在android TTS中使用addSpeech(),您可以将某个文本链接到声音文件.然后,TTS引擎播放文件而不是合成文本的声音(在Android TTS(文本到语音)的addSpeech()中也有问题)并且speak()无法在棉花糖的外部存储器中播放声音文件(api 23)上面,谷歌TTS).这在使用TTS版本3.9.14(和3.10.10)的Android 6.0中不起作用.到目前为止,我没有看到ant post的答案,为什么这在Android 6.0中不起作用.所以我想我会提供更多关于这个问题的数据,这可以帮助有人找出问题所在.(我已将此添加到上面链接中的问题,但主持人删除了它说这不是答案.他们没有建议添加更多这样的数据,除了说另一个问题.因此这个问题.实际上这是关于尚未回答的同一问题的其他数据).所以这里.
在清单中,我使用TTS(后者又使用Media Player)为应用程序提供了读取和写入权限,以播放所提供的语音文件.
android:targetSdkVersion="22"
...
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
请注意,这适用于Android 5.0,但在android 6.0上失败(除非将res/raw中的文件用作语音文件).此外,当它失败时,它似乎在logcat中给出略有不同的错误,具体取决于语音文件是在内部存储还是外部存储.
当res/raw文件夹中的语音文件时,TTS使用资源ID(addSpeech(word,pkgName,resId))正常播放所需的语音文件
当语音文件位于外部存储器上时(/ storage/sdcard0/pkgName/soundFiles/..使用TTS播放会给出EACCES失败日志(对于amr和mp3文件).
09-08 16:57:17.514 1549-7830/? D/MediaPlayer: create failed:
java.io.FileNotFoundException: /storage/emulated/0/pkgName/soundFiles/voice1.amr: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:487)
at java.io.FileInputStream.(FileInputStream.java:76)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1115)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1066)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1003)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:983)
at android.media.MediaPlayer.create(MediaPlayer.java:890
at android.speech.tts.AudioPlaybackQueueItem.run(AudioPlaybackQueueItem.java:58)
at android.speech.tts.AudioPlaybackHandler$MessageLoop.run(AudioPlaybackHandler.java:134)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:473)
at java.io.FileInputStream.(FileInputStream.java:76)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1115)
at …Run Code Online (Sandbox Code Playgroud)android text-to-speech media-player google-text-to-speech android-6.0-marshmallow