使用微信语音合成接口(TTS)

2017-04-19 遇到的一点小问题
APP的收款功能,需要语音播报收到的个别推送消息。听说这个叫TTS(TextToSpeech)。
网上看了一下安卓自带的android.speech.tts.TextToSpeech,试了试,很麻烦,会弹出选择对话框,而且米2S试了下,返回SUCCESS,但就是没声音。。。

TTS选择对话框

那就换一下专业的,看了下讯飞开放平台。功能很丰富,有很多发音人可选择。可惜离线是收费的,只有在线是免费得,担心有影响,算了。
正好应用里微信的功能用得不少,就上微信开放平台看一下。下载了测试apk竟然闪退,原来他的libs里面armeabi-v7a文件夹里竟没有libWXVoice.so文件。没办法,只能删掉其他,只保留armeabi文件夹和里面的libWXVoice.so文件
微信TTS的libs.

看了下文档,没发现mid-sdk-2.10.jarmta-sdk-2.0.2.jar有啥用,就给删掉了,没想到一删就报错。真坑,文档不写一下。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/tencent/stat/StatSpecifyReportedInfo;
...
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.tencent.stat.StatSpecifyReportedInfo" on path: DexPathList[[zip file "/data/app/com.wannoo.test-2/base.apk"],nativeLibraryDirectories=[/data/app/com.wannoo.test-2/lib/arm, /vendor/lib, /system/lib]]
...
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
微信TTS报错

好吧,测试正常了,试一下效果。
和demo里的操作一样,没什么要特别注意的。除了使用SpeechSynthesizer.shareInstance().start(str)时,返回的int可能等于20109,这是因为微信开放平台AppID写错或包名签名不对。这个文档没写,要注意。

刚关掉网络试了一下,没有网络会返回-100。又去看了文档,才发现这个微信也是需要网络的。。。汗!换讯飞试试看

推荐阅读更多精彩内容