Android使用TextToSpeech实现语音播报-及默认不支持中文的方案

对TextToSpeech的介绍就不多说了,直接在下面的连接里面看,很详细

点击查看Android官网对TextToSpeech的介绍

这里直接介绍使用方法,一看就会

首先实例化TextToSpeech语音对象

        //实例化自带语音对象
        textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == textToSpeech.SUCCESS) {              
                    //判断是否支持下面两种语言(英文/中文)
                    int result1 = textToSpeech.setLanguage(Locale.US);
                    int result2 = textToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);
                    boolean a = (result1 == TextToSpeech.LANG_MISSING_DATA || result1 == TextToSpeech.LANG_NOT_SUPPORTED);
                    boolean b = (result2 == TextToSpeech.LANG_MISSING_DATA || result2 == TextToSpeech.LANG_NOT_SUPPORTED);
                    Log.i("TTS", "US是否支持?--》" + a + "\nzh-CN是否支持?--》" + b);
                } else {
                    Toast.makeText(MainActivity.this, "数据丢失或不支持", Toast.LENGTH_SHORT).show();
                }
            }
        });

 可以写一个调用方法,直接把要朗读的内容带进去在需要朗读的地方调用

private void startTTS(String data) {
        // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
        textToSpeech.setPitch(0.1f);
        // 设置语速
        textToSpeech.setSpeechRate(1.5f);
        //输入中文,若不支持的设备则不会读出来
        textToSpeech.speak(data,TextToSpeech.QUEUE_FLUSH, null);
    }

最后就是使用了,直接在需要朗读的地方调用

startTTS("床前明月光,疑是地上霜,举头望明月,低头思故乡。");

 别忘记在使用完之后关闭释放资源

@Override
    protected void onStop() {
        super.onStop();
        textToSpeech.stop(); // 不管是否正在朗读TTS都被打断
        textToSpeech.shutdown(); // 关闭,释放资源
    }

下面是完整的代码用来参考

public class MainActivity extends AppCompatActivity {
    private Button mLook;
    private TextToSpeech textToSpeech = null;//创建自带语音对象
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLook = findViewById(R.id.look);
        initTTS();
        mLook.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startTTS("床前明月光,疑是地上霜,举头望明月,低头思故乡。");
            }
        });
    }

    private void initTTS() {
        //实例化自带语音对象
        textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == textToSpeech.SUCCESS) {
                    textToSpeech.setPitch(1.0f);//方法用来控制音调
                    textToSpeech.setSpeechRate(1.0f);//用来控制语速
                    //判断是否支持下面两种语言(英文/中文)
                    int result1 = textToSpeech.setLanguage(Locale.US);
                    int result2 = textToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);
                    boolean a = (result1 == TextToSpeech.LANG_MISSING_DATA || result1 == TextToSpeech.LANG_NOT_SUPPORTED);
                    boolean b = (result2 == TextToSpeech.LANG_MISSING_DATA || result2 == TextToSpeech.LANG_NOT_SUPPORTED);
                    Log.i("TTS", "US是否支持?--》" + a + "\nzh-CN是否支持?--》" + b);
                } else {
                    Toast.makeText(MainActivity.this, "数据丢失或不支持", Toast.LENGTH_SHORT).show();
                }

            }
        });
    }

    private void startTTS(String data) {
        // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
        textToSpeech.setPitch(0.1f);
        // 设置语速
        textToSpeech.setSpeechRate(1.5f);
        //输入中文,若不支持的设备则不会读出来
        textToSpeech.speak(data,TextToSpeech.QUEUE_FLUSH, null);
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        textToSpeech.stop(); // 不管是否正在朗读TTS都被打断
        textToSpeech.shutdown(); // 关闭,释放资源
    }
}

但是TTS系统默认是不支持中文的,只能进行英文发音,当然也不是没有解决办法,只要在本地安装一个支持中文发音的语音包插件就ok了

科大讯飞语音包

下载上面的语音包,解压出来是个apk文件,安装到手机上即可

实现短促音效请看Android点击按钮触发音效

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 一种实现Speech-to-Text自动语音识别的方法是使用神经网络模型,例如语音识别模型(ASR)。该模型通过学习大量语音数据来预测输入语音的文本转录。训练过程中,模型会学习语音的频谱特征,以及语音和文本之间的对应关系。训练完成后,模型可以对新的语音数据进行识别,并生成文本转录。 ### 回答2: Speech-to-Text自动语音识别是一种将人类的口语转化为文本的技术方法。实现这一过程需要以下步骤: 1. 音频采集:首先需要使用麦克风或其他录音设备采集音频数据。采集到的音频可以是人类的口语、会议录音等。 2. 音频预处理:对采集到的音频数据进行预处理,包括去除噪声、降低音频干扰等步骤,以减少后续识别过程中的错误。 3. 特征提取:从预处理后的音频中提取特征,常用的特征包括MFCC(Mel频率倒谱系数)、梅尔谱图等。这些特征能够反映音频中的语音信息。 4. 建立语音识别模型:使用机器学习或深度学习的方法,构建语音识别模型。这些模型可以是基于隐马尔可夫模型(HMM)的传统模型,也可以是基于循环神经网络(RNN)或转录注意力机制(Transformer)的深度学习模型。 5. 模型训练:使用大量的标注数据对语音识别模型进行训练,以使模型能够学习到音频与文本之间的对应关系。 6. 语音识别:将待识别的音频输入到已训练好的语音识别模型中,模型会对输入音频进行分析并输出最可能的文本结果。 7. 后处理:对识别结果进行后处理,包括错误校正、拼音转换等步骤,以提高识别结果的准确性。 8. 输出结果:最终将识别得到的文本结果呈现给用户,可以是文本形式或显示在屏幕上等。 总体而言,Speech-to-Text自动语音识别方法是一个复杂的过程,需要结合音频采集、预处理、特征提取、模型训练等多个环节来完成。利用这些步骤和技术,可以帮助人们将口述的信息转化为文字,并在各种应用场景中发挥重要的作用,如语音助手、语音翻译等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值