当前位置:首页 > > 充电吧
[导读]1.TTS定义TextToSpeech简称 TTS,称为语音合成,是Android 从1.6版本开始支持的新功能,能将所指定的文本转成不同语言音频输出,文字转语音(text-to-speech,TTS

1.TTS定义

TextToSpeech简称 TTS,称为语音合成,是Android 从1.6版本开始支持的新功能,能将所指定的文本转成不同语言音频输出,文字转语音(text-to-speech,TTS)系统是将一般语言的文字转换为语音。

TTS功能需要有TTS Engine的支持,下面我们就来了解下android提供的TTS Engine。

Android使用了叫Pico的支持多种语言的语音合成引擎,Pico在后台负责把分析输入的文本,把分本分成他能识别的各个片段,再把合成的各个语音片段以听起来比较自然的方式连接在一起,这个过程Android系统帮我们做,我们只把他当做一个神奇的过程就可以了。

TTS engine依托于当前 Android Platform 所支持的几种主要的语言: English 、 French 、 German 、 Italian 和Spanish 五大语言 (暂时也是没有对中文提供支持)。 TTS可以将文本随意的转换成以上任意五种语言的语音输出。与此同时,对于个别的语言版本将取决于不同的时区,例如:对于 English ,在 TTS 中可以分别输出美式和英式两种不同的版本 。

2.语音合成历史

早在17世纪就有法国人研发机械式的说话装置。直到19世纪,贝尔实验室对于电子语音合成技术的研究,才开启近代语音合成技术的发展。贝尔实验室在1939年制作出第一个电子语音合成器VODER,是一种利用共振峰原理所制作的合成器。 1960年,瑞典语言学家G. Fant则提出利用线性预测编码技术(LPC)来作为语音合成分析技术,并推动了日后的发展。后来1980年代Moulines E和Charpentier F提出新的语音合成算法PSOLA,此技术可以合成比较自然的语音。


3.TTS 实例 ( 了解 Android 的 TTS 使用方法 )

要求:在文本框中输入英文句子,点击按钮然后朗读出来。

框架:

1.先用 startActivityForResult() 检查 TTS 数据是否已经安装并且可用

2.用 onInit()实现TTS初始化接口

3.实现按钮的 OnClickListener() 接口, 接口中调用 speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null) 朗读输入框里的内容.

Java代码:

package com.example.androidttsdemo1;

import java.util.Locale;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnInitListener {
    /**
     * Called when the activity is first created.
     */
    private EditText inputText = null;
    private Button speakBtn = null;
    private static final int REQ_TTS_STATUS_CHECK = 0;
    private static final String TAG = "TTS Demo";
    private TextToSpeech mTts;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

        //检查TTS数据是否已经安装并且可用
        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);

        inputText = (EditText) findViewById(R.id.inputText);
        speakBtn = (Button) findViewById(R.id.speakBtn);
        inputText.setText("This is an example of speech synthesis.");
        speakBtn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                mTts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null);
                //朗读输入框里的内容
            }
        });
    }

    //实现TTS初始化接口
    @Override
    public void onInit(int status) {
        // TODO Auto-generated method stub
        //TTS Engine初始化完成
        if (status == TextToSpeech.SUCCESS) {
            int result = mTts.setLanguage(Locale.US);
            //设置发音语言
            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
            //判断语言是否可用
            {
                Log.v(TAG, "Language is not available");
                speakBtn.setEnabled(false);
            } else {
                mTts.speak("This is an example of speech synthesis.", TextToSpeech.QUEUE_ADD, null);
                speakBtn.setEnabled(true);
            }
        }

    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQ_TTS_STATUS_CHECK) {
            switch (resultCode) {
                case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:
                    //这个返回结果表明TTS Engine可以用
                {
                    mTts = new TextToSpeech(this, this);
                    Log.v(TAG, "TTS Engine is installed!");

                }

                break;
                case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:
                    //需要的语音数据已损坏
                case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:
                    //缺少需要语言的语音数据
                case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:
                    //缺少需要语言的发音数据
                {
                    //这三种情况都表明数据有错,重新下载安装需要的数据
                    Log.v(TAG, "Need language stuff:" + resultCode);
                    Intent dataIntent = new Intent();
                    dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                    startActivity(dataIntent);

                }
                break;
                case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
                    //检查失败
                default:
                    Log.v(TAG, "Got a failure. TTS apparently not available");
                    break;
            }
        } else {
            //其他Intent返回的结果
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        if (mTts != null)
        //activity暂停时也停止TTS
        {
            mTts.stop();
        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //释放TTS的资源
        mTts.shutdown();
    }
}

下面简单介绍下上面代码中和TTS相关的一些API使用。
1. 首先是实现OnInitListener这个接口,这个接口中只有一个抽象函数void onInit(int status),在TextToSpeech引擎初始化完成后调用,在这个函数里就可以根据状态status(为TextToSpeech.SUCCESS或者TextToSpeech.Error)判断TTS初始化成功与否进行相应的操作。

2. 接着在使用TTS时,会先启动一个Activity检查TTS引擎需要的TTS数据是否已经安装并且可用,checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);这个Activity会返回如下结果之一:CHECK_VOICE_DATA_PASS, CHECK_VOICE_DATA_FAIL, CHECK_VOICE_DATA_BAD_DATA, CHECK_VOICE_DATA_MISSING_DATA, 或者CHECK_VOICE_DATA_MISSING_VOLUME. 
只有第一个结果CHECK_VOICE_DATA_PASS表明TTS数据可用,其他都是数据不可用的结果,可以启动一个Activity去安装需要的TTS数据,dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
3. 当数据可用时,就可以创建一个TextToSpeech实例,
public TextToSpeech (Context context, TextToSpeech.OnInitListener listener)
这里需要两个参数,一个是TTS实例运行的Context;
另一个是初始化接口的实现,在实例的创建过程中,如果TTS引擎没有运行的话,则会初始化TTS引擎,并且在初始化完成后调用其第二个参数listener。
4. 有了TextToSpeech实例,接下来就可以对文本进行语音合成并发音了,对应的API为
public int speak (String text, int queueMode, HashMap

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2022年11月14日 /美通社/ -- 近日,思享无限旗下秀色直播及嗨秀直播入选"2021高成长企业TOP100"榜单。该榜单创办于2009年,经过十余年的沉淀与发展,已经成为中关村地区标志性、...

关键字: TOP P10 人脸识别 语音合成

(全球TMT2022年5月26日讯)专注于视频、语音合成和AI Human解决方案的人工智能(AI)公司 DeepBrain AI宣布,公司将通过在东京设立分公司进军日本市场,并发布AI Human(虚拟人)技术。AI...

关键字: AI AN 语音合成 iOS

语音合成的理论基础是语音生成的数学模型。该模型语音生成过程是在激励信号的激励下,声波经谐振腔(声道),由嘴或鼻辐射声波。因此,声道参数、声道谐振特性一直是研究的重点。

关键字: 共振峰 语音合成 声道

语音合成是通过机械的、电子的方法产生人造语音的技术。TTS技术(又称文语转换技术)隶属于语音合成,它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的汉语口语输出的技术。

关键字: 语音合成 计算机 文字信息

  通过一番调研,发现国内上市公司科大讯飞的语音+SDK包口碑好,效果好,集成也方便。语音+支持离线应用,这是最主要的。集成过程走起:   1、下载DEMO程序。DEMO程序就包含了全部

关键字: 科大讯飞 语音合成

近期,Oculus为三星Gear VR虚拟现实头盔增加了两项分别名为“ParTIes”和“Rooms”功能,旨在提高用户在使用VR设备时进行更多的

关键字: vr 声纹识别 语音合成 语音识别

Siri 是一个使用语音合成技术与人类进行交流的个人助手。从 iOS 10 开始,苹果已经在 Siri 的语音中用到了深度学习,iOS 11 中的 Siri 依然延续这一技术。使用深度学习使得

关键字: 苹果 语音合成

1 XF-S4240 中文语音合成模块简介 1.1 简介 XF-S4240 中文语音合成模块,是安徽中科大讯飞信息科技有限公司(科大讯飞)推出的基于科大讯飞在嵌入式中文语音合成领

关键字: 语音合成

传出Naver研发的语音合成服务即将进入商用化阶段,最快8月就能在自家人工智能(AI)平台Clova将声音变为知名艺人或儿童父母亲的声音,发展进度将超越Google。 据韩媒E

关键字: AI google 语音合成

2017年,科技可谓是快速发展的一年,人工智能的快速发展,让许多产品都进行了变革。电视坐上了人工智能列车,智能语音的产生,让很多人逐渐解决了双手;音响坐上了人工智能列车,购物,听歌,即说即停,更

关键字: 人工智能 大数据 语音合成 云计算
关闭