平台
Android + 讯飞离线语音SDK
SDK包
下载路径及方法见讯飞官方SDK文档:
离线语音听写 Android SDK 文档 #
在开发者控制台, 可以直接下载SDK.
SDK包中的文件结构
~/Downloads/Android_esriat_exp1143_5a2b58b9$ tree . ├── assets 带UI需要用到的一些图片等资源 │ └── iflytek │ ├── recognize.xml │ ├── voice_bg.9.png │ ├── voice_empty.png │ ├── voice_full.png │ ├── waiting.png │ └── warning.png ├── libs JNI库能JAR包, 只支持v7, v8 64 │ ├── arm64-v8a │ │ └── libmsc.so │ ├── armeabi-v7a │ │ └── libmsc.so │ └── Msc.jar ├── readme.txt ├── release.txt ├── res SDK资源 │ ├── asr │ ├── iat │ │ ├── common.jet │ │ └── sms_16k.jet │ ├── ivw │ ├── layout │ │ └── ifly_layout_mnotice_image.xml │ ├── tts │ └── xtts └── sample 参考DEMO └── mscV5PlusDemo ├── build.gradle ├── libs │ ├── arm64-v8a │ │ └── libmsc.so │ ├── armeabi-v7a │ │ └── libmsc.so │ └── Msc.jar ├── lint.xml ├── msc.cfg └── src └── main ├── AndroidManifest.xml ├── assets │ ├── asr │ ├── call.bnf │ ├── grammar_sample.abnf │ ├── iat │ ├── iattest.wav │ ├── iflytek │ │ ├── recognize.xml │ │ ├── voice_bg.9.png │ │ ├── voice_empty.png │ │ ├── voice_full.png │ │ ├── waiting.png │ │ └── warning.png │ ├── ivw │ ├── layout │ │ └── ifly_layout_mnotice_image.xml │ ├── tts │ ├── userwords │ ├── wake.bnf │ ├── wake_grammar_sample.abnf │ └── xtts ├── java │ └── com │ └── iflytek │ ├── mscv5plusdemo │ │ ├── AsrDemo.java │ │ ├── IatDemo.java │ │ ├── IvwActivity.java │ │ ├── MainActivity.java │ │ ├── OneShotDemo.java │ │ ├── SpeechApp.java │ │ ├── TtsDemo.java │ │ └── WakeDemo.java │ └── speech │ ├── setting │ │ ├── IatSettings.java │ │ └── TtsSettings.java │ └── util │ ├── FucUtil.java │ ├── JsonParser.java │ ├── SettingTextWatcher.java │ └── XmlParser.java └── res ├── drawable │ ├── cancel_button.xml │ ├── list_bg_color.xml │ ├── main_setting_btn_np.xml │ ├── ok_button.xml │ ├── setting.png │ └── setting_p.png ├── drawable-hdpi │ ├── bg.png │ ├── btn_left_f.9.png │ ├── btn_left_n.9.png │ ├── btn_left_p.9.png │ ├── btn_left.xml │ ├── btn_right_f.9.png │ ├── btn_right_n.9.png │ ├── btn_right_p.9.png │ ├── btn_right.xml │ ├── button_login.xml │ ├── cancel.9.png │ ├── cancel_p.9.png │ ├── editbox.9.png │ ├── edittext_name.9.png │ ├── head.png │ ├── icon.png │ ├── login.png │ ├── login_p.png │ ├── mic_0.png │ ├── mic_1.png │ ├── mic_2.png │ ├── mic_3.png │ ├── name_left.png │ ├── name_right.png │ ├── ok.9.png │ ├── ok_d.9.png │ ├── ok_p.9.png │ ├── pane_bg.9.png │ └── superman.9.png ├── drawable-ldpi │ └── icon.png ├── drawable-mdpi │ └── icon.png ├── layout │ ├── iatdemo.xml │ ├── isrdemo.xml │ ├── ivw_activity.xml │ ├── list_items.xml │ ├── main.xml │ ├── oneshot_activity.xml │ ├── title.xml │ ├── ttsdemo.xml │ └── wake_activity.xml ├── values │ ├── colors.xml │ ├── dimen.xml │ ├── strings.xml │ └── styles.xml └── xml ├── iat_setting.xml ├── tts_setting.xml └── understand_setting.xml 42 directories, 101 files
使用
首先可以尝试使用SDK中的DEMO, 将Sample下的mscV5PlusDemo导入到Android Studio中,
~/StudioProjects/TestCodes/mscV5PlusDemo$ ll total 612 drwxrwxr-x 5 anson anson 4096 3月 14 10:43 ./ drwxrwxr-x 20 anson anson 4096 3月 14 10:37 ../ -rw-rw-r-- 1 anson anson 836 3月 14 09:14 build.gradle drwxrwxr-x 4 anson anson 4096 3月 14 10:07 libs/ -rw-rw-r-- 1 anson anson 53 3月 14 09:14 lint.xml -rw-rw-r-- 1 anson anson 5517 3月 14 09:14 msc.cfg drwxrwxr-x 3 anson anson 4096 3月 14 10:07 src/
PS: 需要打开 android.useAndroidX=true配置, 有可能还需解决一些JDK版本不支持LAMBA语法的支持,这里略过.
运行:
一个小插曲: SDK中的DEMO运行离线识别时, DEMO居然报错了??
2022-03-14 10:56:34.643 18483-18483/com.iflytek.mscv5plusdemo W/System.err: java.io.FileNotFoundException: iat/common.jet 2022-03-14 10:56:34.643 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.content.res.AssetManager.nativeOpenAssetFd(Native Method) 2022-03-14 10:56:34.643 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.content.res.AssetManager.openFd(AssetManager.java:966) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.cloud.util.ResourceUtil.a(SourceFile:11) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.cloud.util.ResourceUtil.generateResourcePath(SourceFile:4) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.mscv5plusdemo.IatDemo.getResourcePath(IatDemo.java:358) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.mscv5plusdemo.IatDemo.setParam(IatDemo.java:326) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.mscv5plusdemo.IatDemo.onClick(IatDemo.java:116) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View.performClick(View.java:7312) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View.performClickInternal(View.java:7286) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View.access$3600(View.java:838) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View$PerformClick.run(View.java:28242) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.os.Handler.handleCallback(Handler.java:900) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.os.Handler.dispatchMessage(Handler.java:103) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.os.Looper.loop(Looper.java:219) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.app.ActivityThread.main(ActivityThread.java:8668) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at java.lang.reflect.Method.invoke(Native Method) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109) 2022-03-14 10:56:34.644 18483-18483/com.iflytek.mscv5plusdemo W/System.err: java.io.FileNotFoundException: iat/sms_16k.jet 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.content.res.AssetManager.nativeOpenAssetFd(Native Method) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.content.res.AssetManager.openFd(AssetManager.java:966) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.cloud.util.ResourceUtil.a(SourceFile:11) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.cloud.util.ResourceUtil.generateResourcePath(SourceFile:4) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.mscv5plusdemo.IatDemo.getResourcePath(IatDemo.java:360) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.mscv5plusdemo.IatDemo.setParam(IatDemo.java:326) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.iflytek.mscv5plusdemo.IatDemo.onClick(IatDemo.java:116) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View.performClick(View.java:7312) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View.performClickInternal(View.java:7286) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View.access$3600(View.java:838) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.view.View$PerformClick.run(View.java:28242) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.os.Handler.handleCallback(Handler.java:900) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.os.Handler.dispatchMessage(Handler.java:103) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.os.Looper.loop(Looper.java:219) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at android.app.ActivityThread.main(ActivityThread.java:8668) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at java.lang.reflect.Method.invoke(Native Method) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 2022-03-14 10:56:34.645 18483-18483/com.iflytek.mscv5plusdemo W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
有两个文件找不到: iat/common.jet 和 iat/sms_16k.jet
这两个文件在SDK包中的:
Android_esriat_exp1143_5a2b58b9/res/iat/ total 32020 drwxr-xr-x 2 anson anson 4096 3月 14 09:14 ./ drwxr-xr-x 8 anson anson 4096 3月 14 09:14 ../ -rw-r--r-- 1 anson anson 9781778 3月 14 09:14 common.jet -rw-r--r-- 1 anson anson 22994400 3月 14 09:14 sms_16k.jet
找到并把这两个文件拷贝到项目相应的目录下: src/main/assets/iat/
完整文件目录结构如下:
├── build.gradle ├── libs │ ├── arm64-v8a │ │ └── libmsc.so │ ├── armeabi-v7a │ │ └── libmsc.so │ └── Msc.jar ├── lint.xml ├── msc.cfg └── src └── main ├── AndroidManifest.xml ├── assets │ ├── asr │ ├── call.bnf │ ├── grammar_sample.abnf │ ├── iat │ │ ├── common.jet │ │ └── sms_16k.jet │ ├── iattest.wav │ ├── iflytek │ │ ├── recognize.xml │ │ ├── voice_bg.9.png │ │ ├── voice_empty.png │ │ ├── voice_full.png │ │ ├── waiting.png │ │ └── warning.png │ ├── ivw │ ├── layout │ │ └── ifly_layout_mnotice_image.xml │ ├── tts │ ├── userwords │ ├── wake.bnf │ ├── wake_grammar_sample.abnf │ └── xtts ├── java │ └── com │ └── iflytek │ ├── mscv5plusdemo │ │ ├── AsrDemo.java │ │ ├── IatDemo.java │ │ ├── IvwActivity.java │ │ ├── MainActivity.java │ │ ├── OneShotDemo.java │ │ ├── SpeechApp.java │ │ ├── TtsDemo.java │ │ └── WakeDemo.java │ └── speech │ ├── setting │ │ ├── IatSettings.java │ │ └── TtsSettings.java │ └── util │ ├── FucUtil.java │ ├── JsonParser.java │ ├── SettingTextWatcher.java │ └── XmlParser.java └── res ├── drawable │ ├── cancel_button.xml │ ├── list_bg_color.xml │ ├── main_setting_btn_np.xml │ ├── ok_button.xml │ ├── setting.png │ └── setting_p.png ├── drawable-hdpi │ ├── bg.png │ ├── btn_left_f.9.png │ ├── btn_left_n.9.png │ ├── btn_left_p.9.png │ ├── btn_left.xml │ ├── btn_right_f.9.png │ ├── btn_right_n.9.png │ ├── btn_right_p.9.png │ ├── btn_right.xml │ ├── button_login.xml │ ├── cancel.9.png │ ├── cancel_p.9.png │ ├── editbox.9.png │ ├── edittext_name.9.png │ ├── head.png │ ├── icon.png │ ├── login.png │ ├── login_p.png │ ├── mic_0.png │ ├── mic_1.png │ ├── mic_2.png │ ├── mic_3.png │ ├── name_left.png │ ├── name_right.png │ ├── ok.9.png │ ├── ok_d.9.png │ ├── ok_p.9.png │ ├── pane_bg.9.png │ └── superman.9.png ├── drawable-ldpi │ └── icon.png ├── drawable-mdpi │ └── icon.png ├── layout │ ├── iatdemo.xml │ ├── isrdemo.xml │ ├── ivw_activity.xml │ ├── list_items.xml │ ├── main.xml │ ├── oneshot_activity.xml │ ├── title.xml │ ├── ttsdemo.xml │ └── wake_activity.xml ├── values │ ├── colors.xml │ ├── dimen.xml │ ├── strings.xml │ └── styles.xml └── xml ├── iat_setting.xml ├── tts_setting.xml └── understand_setting.xml
再次运行, 成功!!
参考
SDK说明