Android使用TTS的一个很奇怪的问题

利用TTS API里面的tts.synthesizeToFile()可以将文本转换成音频文件保存下来,从而可以利用MediaPlayer来播放它,通过对MediaPlayer的控制,可以达到暂停,循环播放等功能,可是发现一个bug:

音频文件可以生成,利用Android自带的播放器可以播放

可是用按照先生成音频文件,再设置数据源,再播放的时候,老提示数据源设置引起的不能创建MediaPlayer

这样一来也就是,MediaPlayer不能解码tts.synthesizeToFile()生成的音频文件...

----------------------------------------------------------------------------------------------------------------------------

查了N多资料,改来改去无用,经测试,发现跟所要转换的文本长度有关系,如果文本太长,则会报错:

Unable to create media player

java.io.IOexception:setDataSourceFD failed:status=0x800000

后来找到解决办法:

将整页的文本分割,以20个字为单元,做相应的遍历处理,问题解决!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android TTSAndroid系统内置的文本转语音引擎,可以将文本转换为语音输出,常用于语音播报、语音导航、语音输入等场景。 以下是使用Android TTS的基本步骤: 1. 首先在AndroidManifest.xml文件中添加权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> ``` 2. 在Activity中初始化TTS引擎,并设置回调接口: ```java private TextToSpeech mTts; // 初始化TTS引擎 mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { // 设置语言 int result = mTts.setLanguage(Locale.CHINESE); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e(TAG, "onInit: 语言不支持"); } } else { Log.e(TAG, "onInit: 初始化失败"); } } }); // 设置回调接口 mTts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onStart(String utteranceId) { // TTS开始播报 } @Override public void onDone(String utteranceId) { // TTS播报完成 } @Override public void onError(String utteranceId) { // TTS播报出错 } }); ``` 3. 调用TTS引擎进行文本转语音: ```java String text = "你好,我是Android TTS"; // 设置播报参数 HashMap<String, String> params = new HashMap<>(); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utteranceId"); // 调用TTS引擎进行文本转语音 mTts.speak(text, TextToSpeech.QUEUE_FLUSH, params); ``` 其中,参数`utteranceId`是播报任务的标识符,用于在回调接口中区分不同的播报任务。 4. 在Activity销毁时释放TTS资源: ```java @Override protected void onDestroy() { super.onDestroy(); if (mTts != null) { mTts.stop(); mTts.shutdown(); } } ``` 以上就是使用Android TTS的基本步骤,需要注意的是,不同版本的Android系统可能支持的语音种类不同,需要根据实际需求进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值