初始化讯飞插件
This commit is contained in:
commit
09b6667615
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# cordova-plugin-IFlyspeech-master
|
||||
|
||||
科大讯飞的语音听说读写的cordova插件
|
||||
|
||||
### Supported Platforms
|
||||
|
||||
- iOS
|
||||
- android
|
||||
|
||||
## Installation
|
||||
|
||||
cordova plugin add https://github.com/victor-fa/cordova-plugin-IFlyspeech-master.git
|
||||
|
19
package.json
Normal file
19
package.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "cordova-plugin-xunfeiListenSpeaking",
|
||||
"version": "0.0.1",
|
||||
"cordova": {
|
||||
"id": "cordova-plugin-xunfeiListenSpeaking",
|
||||
"platforms": [
|
||||
"android",
|
||||
"ios"
|
||||
]
|
||||
},
|
||||
"keywords": [
|
||||
"ecosystem:cordova",
|
||||
"cordova-android",
|
||||
"cordova-ios"
|
||||
],
|
||||
"author": "cc",
|
||||
"license": "ISC",
|
||||
"description": ""
|
||||
}
|
275
plugin.xml
Normal file
275
plugin.xml
Normal file
@ -0,0 +1,275 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<plugin id="cordova-plugin-xunfeiListenSpeaking" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<name>cordova-plugin-xunfeiListenSpeaking</name>
|
||||
|
||||
<platform name = "android">
|
||||
<js-module name="xunfeiListenSpeaking" src="www/cordova-plugin-xunfeiListenSpeaking.js">
|
||||
<clobbers target="xunfeiListenSpeaking" />
|
||||
</js-module>
|
||||
<config-file target="res/xml/config.xml" parent="/*">
|
||||
<feature name="XunfeiListenSpeaking" >
|
||||
<param name="android-package" value="com.thomas.xunfeilistenspeaking.XunfeiListenSpeaking"/>
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<config-file target="AndroidManifest.xml" parent="/manifest">
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<!-- 移动统计分析 -->
|
||||
<meta-data
|
||||
android:name="IFLYTEK_APPKEY"
|
||||
android:value="'5b553cd9'" />
|
||||
<meta-data
|
||||
android:name="IFLYTEK_CHANNEL"
|
||||
android:value="Android_Demo" />
|
||||
|
||||
</config-file>
|
||||
<config-file target="AndroidManifest.xml" parent="/manifest/application">
|
||||
<activity android:name="com.thomas.xunfeilistenspeaking.XunfeiDialogActivity"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar">
|
||||
|
||||
</activity>
|
||||
</config-file>
|
||||
<!--assets-->
|
||||
<source-file src="src/android/assets/iattest.wav" target-dir="assets"/>
|
||||
<source-file src="src/android/assets/call.bnf" target-dir="assets"/>
|
||||
<source-file src="src/android/assets/grammar_sample.abnf" target-dir="assets"/>
|
||||
<source-file src="src/android/assets/keys" target-dir="assets"/>
|
||||
<source-file src="src/android/assets/userwords" target-dir="assets"/>
|
||||
<source-file src="src/android/assets/iflytek/voice_bg.9.png" target-dir="assets/iflytek"/>
|
||||
<source-file src="src/android/assets/iflytek/voice_empty.png" target-dir="assets/iflytek"/>
|
||||
<source-file src="src/android/assets/iflytek/voice_full.png" target-dir="assets/iflytek"/>
|
||||
<source-file src="src/android/assets/iflytek/waiting.png" target-dir="assets/iflytek"/>
|
||||
<source-file src="src/android/assets/iflytek/warning.png" target-dir="assets/iflytek"/>
|
||||
<source-file src="src/android/assets/iflytek/recognize.xml" target-dir="assets/iflytek"/>
|
||||
|
||||
|
||||
<!--lib-->
|
||||
<source-file src="src/android/libs/Msc.jar" target-dir="libs"/>
|
||||
<source-file src="src/android/libs/Sunflower.jar" target-dir="libs"/>
|
||||
<source-file src="src/android/libs/armeabi/libmsc.so" target-dir="libs/armeabi"/>
|
||||
<source-file src="src/android/libs/arm64-v8a/libmsc.so" target-dir="libs/arm64-v8a"/>
|
||||
<source-file src="src/android/libs/armeabi-v7a/libmsc.so" target-dir="libs/armeabi-v7a"/>
|
||||
|
||||
<!--layout-->
|
||||
<source-file src="src/android/res/layout/activity_xunfei_dialog.xml" target-dir="res/layout"/>
|
||||
|
||||
<!--xml-->
|
||||
<source-file src="src/android/res/xml/iat_setting.xml" target-dir="res/xml"/>
|
||||
<source-file src="src/android/res/xml/ise_settings.xml" target-dir="res/xml"/>
|
||||
<source-file src="src/android/res/xml/tts_setting.xml" target-dir="res/xml"/>
|
||||
<source-file src="src/android/res/xml/understand_setting.xml" target-dir="res/xml"/>
|
||||
|
||||
<!--src-->
|
||||
<source-file src="src/android/src/com/thomas/xunfeilistenspeaking/XunfeiListenSpeaking.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
|
||||
<source-file src="src/android/src/com/thomas/xunfeilistenspeaking/IatSettings.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
|
||||
<source-file src="src/android/src/com/thomas/xunfeilistenspeaking/JsonParser.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
|
||||
<source-file src="src/android/src/com/thomas/xunfeilistenspeaking/SettingTextWatcher.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
|
||||
<source-file src="src/android/src/com/thomas/xunfeilistenspeaking/XunfeiDialogActivity.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
|
||||
|
||||
|
||||
<!--res-->
|
||||
<config-file target="res/values/strings.xml" parent="/resources">
|
||||
<!--<string name="app_name">讯飞语音示例</string>-->
|
||||
<!-- 请替换成在语音云官网申请的appid -->
|
||||
<string name="app_id">584e7225</string>
|
||||
<string name="example_explain">本示例为讯飞语音Android平台开发者提供语音听写、语法识别、语义理解和语音合成等代码样例,旨在让用户能够依据该示例快速开发出基于语音接口的应用程序。</string>
|
||||
<string name="text_tts_source">科大讯飞作为中国最大的智能语音技术提供商,在智能语音技术领域有着长期的研究积累,并在中文语音合成、语音识别、口语评测等多项技术上拥有国际领先的成果。科大讯飞是我国唯一以语音技术为产业化方向的“国家863计划成果产业化基地”…</string>
|
||||
<string name="text_tts_source_en">iFLYTEK is a national key software enterprise dedicated to the research of intelligent speech and language technologies, development of software and chip products, provision of speech information services, and integration of E-government systems. The intelligent speech technology of iFLYTEK, the core technology of the company, represents the top level in the world.</string>
|
||||
<string name="text_isr_abnf_hint">\t上传内容为:\n\t#ABNF 1.0 gb2312;\n\tlanguage zh-CN;\n\tmode voice;\n\troot $main;\n\t$main = $place1 到$place2 ;\n\t$place1 = 北京 | 武汉 | 南京 | 天津 | 东京;\n\t$place2 = 上海 | 合肥;</string>
|
||||
<string name="text_understand_hint">\t您可以说:\n\t今天的天气怎么样?\n\t北京到上海的火车?\n\t有什么好吃的?\n\t上海外滩有哪些酒店?\n\n\t更多语义请登录:\n\thttp://osp.voicecloud.cn/ \n\t配置您的专属语义吧!</string>
|
||||
<!-- 听写 -->
|
||||
<string name="text_begin">请开始说话…</string>
|
||||
<string name="text_begin_recognizer">开始音频流识别</string>
|
||||
<string name="text_upload_contacts">上传联系人</string>
|
||||
<string name="text_upload_userwords">上传用户词表</string>
|
||||
<string name="text_upload_success">上传成功</string>
|
||||
<string name="text_userword_empty">词表下载失败或内容为空</string>
|
||||
<string name="text_download_success">下载成功</string>
|
||||
<string name="pref_key_iat_show">iat_show</string>
|
||||
<string name="pref_title_iat_show">显示听写界面</string>
|
||||
<string name="pref_title_iat_dwa">结果动态修正</string>
|
||||
|
||||
<string name="xunfei_cancel_listen">取消语音</string>
|
||||
<!-- 合成 -->
|
||||
<string-array name="engine_entries">
|
||||
<item>本地合成</item>
|
||||
<item>在线合成</item>
|
||||
</string-array>
|
||||
<string-array name="engine_values">
|
||||
<item>local</item>
|
||||
<item>cloud</item>
|
||||
</string-array>
|
||||
<string-array name="voicer_cloud_entries">
|
||||
<item>小燕—女青、中英、普通话</item>
|
||||
<item>小宇—男青、中英、普通话</item>
|
||||
<item>凯瑟琳—女青、英</item>
|
||||
<item>亨利—男青、英</item>
|
||||
<item>玛丽—女青、英</item>
|
||||
<item>小研—女青、中英、普通话</item>
|
||||
<item>小琪—女青、中英、普通话</item>
|
||||
<item>小峰—男青、中英、普通话</item>
|
||||
<item>小梅—女青、中英、粤语</item>
|
||||
<item>小莉—女青、中英、台湾普通话</item>
|
||||
<item>小蓉—女青、中、四川话</item>
|
||||
<item>小芸—女青、中、东北话</item>
|
||||
<item>小坤—男青、中、河南话</item>
|
||||
<item>小强—男青、中、湖南话</item>
|
||||
<item>小莹—女青、中、陕西话</item>
|
||||
<item>小新—男童、中、普通话</item>
|
||||
<item>楠楠—女童、中、普通话</item>
|
||||
<item>老孙—男老、中、普通话</item>
|
||||
</string-array>
|
||||
<string-array name="voicer_cloud_values">
|
||||
<item>xiaoyan</item>
|
||||
<item>xiaoyu</item>
|
||||
<item>catherine</item>
|
||||
<item>henry</item>
|
||||
<item>vimary</item>
|
||||
<item>vixy</item>
|
||||
<item>xiaoqi</item>
|
||||
<item>vixf</item>
|
||||
<item>xiaomei</item>
|
||||
<item>xiaolin</item>
|
||||
<item>xiaorong</item>
|
||||
<item>xiaoqian</item>
|
||||
<item>xiaokun</item>
|
||||
<item>xiaoqiang</item>
|
||||
<item>vixying</item>
|
||||
<item>xiaoxin</item>
|
||||
<item>nannan</item>
|
||||
<item>vils</item>
|
||||
</string-array>
|
||||
<string-array name="emot_entries">
|
||||
<item>正常</item>
|
||||
<item>高兴</item>
|
||||
<item>悲伤</item>
|
||||
<item>生气</item>
|
||||
</string-array>
|
||||
<string-array name="emot_values">
|
||||
<item>neutral</item>
|
||||
<item>happy</item>
|
||||
<item>sad</item>
|
||||
<item>angry</item>
|
||||
</string-array>
|
||||
<string-array name="stream_entries">
|
||||
<item>通话</item>
|
||||
<item>系统</item>
|
||||
<item>铃声</item>
|
||||
<item>音乐</item>
|
||||
<item>闹铃</item>
|
||||
<item>通知</item>
|
||||
</string-array>
|
||||
<string-array name="stream_values">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>3</item>
|
||||
<item>4</item>
|
||||
<item>5</item>
|
||||
</string-array>
|
||||
<string formatted="false" name="tts_toast_format">缓冲进度为%d%%,播放进度为%d%%</string>
|
||||
<!-- 语言 -->
|
||||
<string-array name="language_entries">
|
||||
<item>普通话</item>
|
||||
<item>粤语</item>
|
||||
<item>河南话</item>
|
||||
<item>英语</item>
|
||||
</string-array>
|
||||
<string-array name="language_values">
|
||||
<item>mandarin</item>
|
||||
<item>cantonese</item>
|
||||
<item>henanese</item>
|
||||
<item>en_us</item>
|
||||
</string-array>
|
||||
<!-- 语音评测 -->
|
||||
<string name="text_en_word">"[word]\napple\nbanana\norange"</string>
|
||||
<string name="text_en_sentence">"The quick brown fox jumps over the lazy dog."</string>
|
||||
<string name="text_cn_syllable">"知,痴,是"</string>
|
||||
<string name="text_cn_word">"磁铁,率领,脆弱,动手,古筝"</string>
|
||||
<string name="text_cn_sentence">"一座座雪峰插入云霄,峰顶银光闪闪,大大小小的湖泊,像颗颗宝石镶嵌在彩带般的沟谷中。"</string>
|
||||
<string-array name="ise_language_entries">
|
||||
<item>英语</item>
|
||||
<item>汉语</item>
|
||||
</string-array>
|
||||
<string-array name="ise_language_values">
|
||||
<item>en_us</item>
|
||||
<item>zh_cn</item>
|
||||
</string-array>
|
||||
<string-array name="category_entries">
|
||||
<item>单字</item>
|
||||
<item>词语</item>
|
||||
<item>句子</item>
|
||||
</string-array>
|
||||
<string-array name="category_values">
|
||||
<item>read_syllable</item>
|
||||
<item>read_word</item>
|
||||
<item>read_sentence</item>
|
||||
</string-array>
|
||||
<string-array name="result_level_entries">
|
||||
<item>plain</item>
|
||||
<item>complete</item>
|
||||
</string-array>
|
||||
<!-- 标点符号 -->
|
||||
<string-array name="punc_entries">
|
||||
<item>有标点</item>
|
||||
<item>无标点</item>
|
||||
</string-array>
|
||||
<string-array name="punc_values">
|
||||
<item>1</item>
|
||||
<item>0</item>
|
||||
</string-array>
|
||||
<string-array name="dwa_entries">
|
||||
<item>开启</item>
|
||||
<item>关闭</item>
|
||||
</string-array>
|
||||
</config-file>
|
||||
</platform>
|
||||
|
||||
<platform name="ios">
|
||||
<js-module name="speech" src="www/Speech.js">
|
||||
<!-- <clobbers target="navigator.speech" />-->
|
||||
<clobbers target="xunfeiListenSpeaking" />
|
||||
</js-module>
|
||||
<config-file parent="/*" target="config.xml">
|
||||
<feature name="Speech">
|
||||
<param name="ios-package" value="CDVSpeech" />
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<config-file target="*-Info.plist" parent="NSMicrophoneUsageDescription">
|
||||
<string></string>
|
||||
</config-file>
|
||||
|
||||
<header-file src="src/ios/CDVSpeech.h" />
|
||||
<source-file src="src/ios/CDVSpeech.m" />
|
||||
|
||||
<framework src="AVFoundation.framework" />
|
||||
<framework src="AddressBook.framework" />
|
||||
<framework src="AudioToolbox.framework" />
|
||||
<framework src="SystemConfiguration.framework" />
|
||||
<framework src="QuartzCore.framework" />
|
||||
|
||||
<framework src="libz.tbd" />
|
||||
<framework src="libc++.tbd" />
|
||||
<framework src="UIKit.framework" />
|
||||
<framework src="CoreGraphics.framework" />
|
||||
<framework src="Foundation.framework" />
|
||||
<framework src="CoreTelephony.framework" />
|
||||
<framework src="CoreLocation.framework" />
|
||||
<framework src="Contacts.framework" />
|
||||
|
||||
<framework src="src/ios/iflyMSC.framework" custom="true" />
|
||||
</platform>
|
||||
|
||||
</plugin>
|
12
src/android/assets/call.bnf
Normal file
12
src/android/assets/call.bnf
Normal file
@ -0,0 +1,12 @@
|
||||
#BNF+IAT 1.0 UTF-8;
|
||||
!grammar call;
|
||||
!slot <contact>;
|
||||
!slot <callPre>;
|
||||
!slot <callPhone>;
|
||||
!slot <callTo>;
|
||||
!start <callStart>;
|
||||
<callStart>:[<callPre>][<callTo>]<contact><callPhone>|[<callPre>]<callPhone>[<callTo>]<contact>;
|
||||
<contact>:张海洋;
|
||||
<callPre>:我要|我想|我想要;
|
||||
<callPhone>:打电话;
|
||||
<callTo>:给;
|
8
src/android/assets/grammar_sample.abnf
Normal file
8
src/android/assets/grammar_sample.abnf
Normal file
@ -0,0 +1,8 @@
|
||||
#ABNF 1.0 UTF-8;
|
||||
language zh-CN;
|
||||
mode voice;
|
||||
|
||||
root $main;
|
||||
$main = $place1 到 $place2;
|
||||
$place1 = 北京|武汉|南京|天津|东京;
|
||||
$place2 = 上海|合肥;
|
BIN
src/android/assets/iattest.wav
Normal file
BIN
src/android/assets/iattest.wav
Normal file
Binary file not shown.
BIN
src/android/assets/iflytek/recognize.xml
Normal file
BIN
src/android/assets/iflytek/recognize.xml
Normal file
Binary file not shown.
BIN
src/android/assets/iflytek/voice_bg.9.png
Normal file
BIN
src/android/assets/iflytek/voice_bg.9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
src/android/assets/iflytek/voice_empty.png
Normal file
BIN
src/android/assets/iflytek/voice_empty.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
src/android/assets/iflytek/voice_full.png
Normal file
BIN
src/android/assets/iflytek/voice_full.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
src/android/assets/iflytek/waiting.png
Normal file
BIN
src/android/assets/iflytek/waiting.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
src/android/assets/iflytek/warning.png
Normal file
BIN
src/android/assets/iflytek/warning.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.7 KiB |
BIN
src/android/assets/keys
Normal file
BIN
src/android/assets/keys
Normal file
Binary file not shown.
1
src/android/assets/userwords
Normal file
1
src/android/assets/userwords
Normal file
@ -0,0 +1 @@
|
||||
{"userword":[{"name":"我的常用词","words":["佳晨实业","蜀南庭苑","高兰路","复联二"]},{"name":"我的好友","words":["李馨琪","鹿晓雷","张集栋","周家莉","叶震珂","熊泽萌"]}]}
|
BIN
src/android/libs/Msc.jar
Normal file
BIN
src/android/libs/Msc.jar
Normal file
Binary file not shown.
BIN
src/android/libs/Sunflower.jar
Normal file
BIN
src/android/libs/Sunflower.jar
Normal file
Binary file not shown.
BIN
src/android/libs/arm64-v8a/libmsc.so
Normal file
BIN
src/android/libs/arm64-v8a/libmsc.so
Normal file
Binary file not shown.
BIN
src/android/libs/armeabi-v7a/libmsc.so
Normal file
BIN
src/android/libs/armeabi-v7a/libmsc.so
Normal file
Binary file not shown.
BIN
src/android/libs/armeabi/libmsc.so
Normal file
BIN
src/android/libs/armeabi/libmsc.so
Normal file
Binary file not shown.
7
src/android/res/layout/activity_xunfei_dialog.xml
Normal file
7
src/android/res/layout/activity_xunfei_dialog.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
</LinearLayout>
|
155
src/android/res/values/strings.xml
Normal file
155
src/android/res/values/strings.xml
Normal file
@ -0,0 +1,155 @@
|
||||
<resources>
|
||||
<string name="app_name">XunfeiSpeaking</string>
|
||||
<!--<string name="app_name">讯飞语音示例</string>-->
|
||||
<!-- 请替换成在语音云官网申请的appid -->
|
||||
<string name="app_id">584e7225</string>
|
||||
<string name="example_explain">本示例为讯飞语音Android平台开发者提供语音听写、语法识别、语义理解和语音合成等代码样例,旨在让用户能够依据该示例快速开发出基于语音接口的应用程序。</string>
|
||||
<string name="text_tts_source">科大讯飞作为中国最大的智能语音技术提供商,在智能语音技术领域有着长期的研究积累,并在中文语音合成、语音识别、口语评测等多项技术上拥有国际领先的成果。科大讯飞是我国唯一以语音技术为产业化方向的“国家863计划成果产业化基地”…</string>
|
||||
<string name="text_tts_source_en">iFLYTEK is a national key software enterprise dedicated to the research of intelligent speech and language technologies, development of software and chip products, provision of speech information services, and integration of E-government systems. The intelligent speech technology of iFLYTEK, the core technology of the company, represents the top level in the world.</string>
|
||||
<string name="text_isr_abnf_hint">\t上传内容为:\n\t#ABNF 1.0 gb2312;\n\tlanguage zh-CN;\n\tmode voice;\n\troot $main;\n\t$main = $place1 到$place2 ;\n\t$place1 = 北京 | 武汉 | 南京 | 天津 | 东京;\n\t$place2 = 上海 | 合肥;</string>
|
||||
<string name="text_understand_hint">\t您可以说:\n\t今天的天气怎么样?\n\t北京到上海的火车?\n\t有什么好吃的?\n\t上海外滩有哪些酒店?\n\n\t更多语义请登录:\n\thttp://osp.voicecloud.cn/ \n\t配置您的专属语义吧!</string>
|
||||
<!-- 听写 -->
|
||||
<string name="text_begin">请开始说话…</string>
|
||||
<string name="text_begin_recognizer">开始音频流识别</string>
|
||||
<string name="text_upload_contacts">上传联系人</string>
|
||||
<string name="text_upload_userwords">上传用户词表</string>
|
||||
<string name="text_upload_success">上传成功</string>
|
||||
<string name="text_userword_empty">词表下载失败或内容为空</string>
|
||||
<string name="text_download_success">下载成功</string>
|
||||
<string name="pref_key_iat_show">iat_show</string>
|
||||
<string name="pref_title_iat_show">显示听写界面</string>
|
||||
<string name="pref_title_iat_dwa">结果动态修正</string>
|
||||
|
||||
<!-- 合成 -->
|
||||
<string-array name="engine_entries">
|
||||
<item>本地合成</item>
|
||||
<item>在线合成</item>
|
||||
</string-array>
|
||||
<string-array name="engine_values">
|
||||
<item>local</item>
|
||||
<item>cloud</item>
|
||||
</string-array>
|
||||
<string-array name="voicer_cloud_entries">
|
||||
<item>小燕—女青、中英、普通话</item>
|
||||
<item>小宇—男青、中英、普通话</item>
|
||||
<item>凯瑟琳—女青、英</item>
|
||||
<item>亨利—男青、英</item>
|
||||
<item>玛丽—女青、英</item>
|
||||
<item>小研—女青、中英、普通话</item>
|
||||
<item>小琪—女青、中英、普通话</item>
|
||||
<item>小峰—男青、中英、普通话</item>
|
||||
<item>小梅—女青、中英、粤语</item>
|
||||
<item>小莉—女青、中英、台湾普通话</item>
|
||||
<item>小蓉—女青、中、四川话</item>
|
||||
<item>小芸—女青、中、东北话</item>
|
||||
<item>小坤—男青、中、河南话</item>
|
||||
<item>小强—男青、中、湖南话</item>
|
||||
<item>小莹—女青、中、陕西话</item>
|
||||
<item>小新—男童、中、普通话</item>
|
||||
<item>楠楠—女童、中、普通话</item>
|
||||
<item>老孙—男老、中、普通话</item>
|
||||
</string-array>
|
||||
<string-array name="voicer_cloud_values">
|
||||
<item>xiaoyan</item>
|
||||
<item>xiaoyu</item>
|
||||
<item>catherine</item>
|
||||
<item>henry</item>
|
||||
<item>vimary</item>
|
||||
<item>vixy</item>
|
||||
<item>xiaoqi</item>
|
||||
<item>vixf</item>
|
||||
<item>xiaomei</item>
|
||||
<item>xiaolin</item>
|
||||
<item>xiaorong</item>
|
||||
<item>xiaoqian</item>
|
||||
<item>xiaokun</item>
|
||||
<item>xiaoqiang</item>
|
||||
<item>vixying</item>
|
||||
<item>xiaoxin</item>
|
||||
<item>nannan</item>
|
||||
<item>vils</item>
|
||||
</string-array>
|
||||
<string-array name="emot_entries">
|
||||
<item>正常</item>
|
||||
<item>高兴</item>
|
||||
<item>悲伤</item>
|
||||
<item>生气</item>
|
||||
</string-array>
|
||||
<string-array name="emot_values">
|
||||
<item>neutral</item>
|
||||
<item>happy</item>
|
||||
<item>sad</item>
|
||||
<item>angry</item>
|
||||
</string-array>
|
||||
<string-array name="stream_entries">
|
||||
<item>通话</item>
|
||||
<item>系统</item>
|
||||
<item>铃声</item>
|
||||
<item>音乐</item>
|
||||
<item>闹铃</item>
|
||||
<item>通知</item>
|
||||
</string-array>
|
||||
<string-array name="stream_values">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>3</item>
|
||||
<item>4</item>
|
||||
<item>5</item>
|
||||
</string-array>
|
||||
<string formatted="false" name="tts_toast_format">缓冲进度为%d%%,播放进度为%d%%</string>
|
||||
<!-- 语言 -->
|
||||
<string-array name="language_entries">
|
||||
<item>普通话</item>
|
||||
<item>粤语</item>
|
||||
<item>河南话</item>
|
||||
<item>英语</item>
|
||||
</string-array>
|
||||
<string-array name="language_values">
|
||||
<item>mandarin</item>
|
||||
<item>cantonese</item>
|
||||
<item>henanese</item>
|
||||
<item>en_us</item>
|
||||
</string-array>
|
||||
<!-- 语音评测 -->
|
||||
<string name="text_en_word">"[word]\napple\nbanana\norange"</string>
|
||||
<string name="text_en_sentence">"The quick brown fox jumps over the lazy dog."</string>
|
||||
<string name="text_cn_syllable">"知,痴,是"</string>
|
||||
<string name="text_cn_word">"磁铁,率领,脆弱,动手,古筝"</string>
|
||||
<string name="text_cn_sentence">"一座座雪峰插入云霄,峰顶银光闪闪,大大小小的湖泊,像颗颗宝石镶嵌在彩带般的沟谷中。"</string>
|
||||
<string-array name="ise_language_entries">
|
||||
<item>英语</item>
|
||||
<item>汉语</item>
|
||||
</string-array>
|
||||
<string-array name="ise_language_values">
|
||||
<item>en_us</item>
|
||||
<item>zh_cn</item>
|
||||
</string-array>
|
||||
<string-array name="category_entries">
|
||||
<item>单字</item>
|
||||
<item>词语</item>
|
||||
<item>句子</item>
|
||||
</string-array>
|
||||
<string-array name="category_values">
|
||||
<item>read_syllable</item>
|
||||
<item>read_word</item>
|
||||
<item>read_sentence</item>
|
||||
</string-array>
|
||||
<string-array name="result_level_entries">
|
||||
<item>plain</item>
|
||||
<item>complete</item>
|
||||
</string-array>
|
||||
<!-- 标点符号 -->
|
||||
<string-array name="punc_entries">
|
||||
<item>有标点</item>
|
||||
<item>无标点</item>
|
||||
</string-array>
|
||||
<string-array name="punc_values">
|
||||
<item>1</item>
|
||||
<item>0</item>
|
||||
</string-array>
|
||||
<string-array name="dwa_entries">
|
||||
<item>开启</item>
|
||||
<item>关闭</item>
|
||||
</string-array>
|
||||
</resources>
|
40
src/android/res/xml/iat_setting.xml
Normal file
40
src/android/res/xml/iat_setting.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<ListPreference
|
||||
android:key="iat_language_preference"
|
||||
android:title="语言设置"
|
||||
android:entries="@array/language_entries"
|
||||
android:entryValues="@array/language_values"
|
||||
android:summary="支持:普通话,粤语,河南话,英语 "
|
||||
android:defaultValue="mandarin" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="iat_vadbos_preference"
|
||||
android:title="前端点超时"
|
||||
android:dialogTitle="请输入时间(0-10000)ms"
|
||||
android:summary="默认值:短信转写5000,其他4000"
|
||||
android:defaultValue="5000" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="iat_vadeos_preference"
|
||||
android:title="后端点超时"
|
||||
android:dialogTitle="请输入时间(0-10000)ms"
|
||||
android:summary="默认值:短信转写1800,其他700 "
|
||||
android:defaultValue="1800" />
|
||||
|
||||
<ListPreference
|
||||
android:key="iat_punc_preference"
|
||||
android:title="标点符号"
|
||||
android:entries="@array/punc_entries"
|
||||
android:entryValues="@array/punc_values"
|
||||
android:summary="默认值:有标点 "
|
||||
android:defaultValue="1" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_key_iat_show"
|
||||
android:title="@string/pref_title_iat_show"
|
||||
android:defaultValue="true" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
47
src/android/res/xml/ise_settings.xml
Normal file
47
src/android/res/xml/ise_settings.xml
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<ListPreference
|
||||
android:key="language"
|
||||
android:title="评测语种"
|
||||
android:summary=""
|
||||
android:entries="@array/ise_language_entries"
|
||||
android:entryValues="@array/ise_language_values"
|
||||
android:defaultValue="zh_cn"/>
|
||||
|
||||
<ListPreference
|
||||
android:key="category"
|
||||
android:title="评测题型"
|
||||
android:summary=""
|
||||
android:entries="@array/category_entries"
|
||||
android:entryValues="@array/category_values"
|
||||
android:defaultValue="read_sentence"/>
|
||||
|
||||
<ListPreference
|
||||
android:key="result_level"
|
||||
android:title="结果等级"
|
||||
android:summary=""
|
||||
android:entries="@array/result_level_entries"
|
||||
android:entryValues="@array/result_level_entries"
|
||||
android:defaultValue="complete"/>
|
||||
|
||||
<EditTextPreference
|
||||
android:key="vad_bos"
|
||||
android:title="前端点超时"
|
||||
android:summary=""
|
||||
android:defaultValue="5000"/>
|
||||
|
||||
<EditTextPreference
|
||||
android:key="vad_eos"
|
||||
android:title="后端点超时"
|
||||
android:summary=""
|
||||
android:defaultValue="1800"/>
|
||||
|
||||
<EditTextPreference
|
||||
android:key="speech_timeout"
|
||||
android:title="评测超时"
|
||||
android:summary=""
|
||||
android:defaultValue="-1"/>
|
||||
|
||||
|
||||
</PreferenceScreen>
|
29
src/android/res/xml/tts_setting.xml
Normal file
29
src/android/res/xml/tts_setting.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<EditTextPreference
|
||||
android:dialogTitle="请输入语速:在线(0-100)本地(0-200)"
|
||||
android:key="speed_preference"
|
||||
android:defaultValue="50"
|
||||
android:summary="默认值:50 "
|
||||
android:title="语速" />
|
||||
<EditTextPreference
|
||||
android:dialogTitle="请输入音调(0-100)"
|
||||
android:key="pitch_preference"
|
||||
android:defaultValue="50"
|
||||
android:summary="默认值:50 "
|
||||
android:title="音调" />
|
||||
<EditTextPreference
|
||||
android:dialogTitle="请输入音量(0-100)"
|
||||
android:key="volume_preference"
|
||||
android:defaultValue="50"
|
||||
android:summary="默认值:50 "
|
||||
android:title="音量" />
|
||||
<ListPreference
|
||||
android:defaultValue="3"
|
||||
android:entries="@array/stream_entries"
|
||||
android:entryValues="@array/stream_values"
|
||||
android:key="stream_preference"
|
||||
android:title="音频流类型" />
|
||||
|
||||
</PreferenceScreen>
|
40
src/android/res/xml/understand_setting.xml
Normal file
40
src/android/res/xml/understand_setting.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<ListPreference
|
||||
android:key="understander_language_preference"
|
||||
android:title="语言设置"
|
||||
android:entries="@array/language_entries"
|
||||
android:entryValues="@array/language_values"
|
||||
android:summary="支持:普通话,粤语,河南话,英语 "
|
||||
android:defaultValue="mandarin" />
|
||||
<EditTextPreference
|
||||
android:key="understander_vadbos_preference"
|
||||
android:title="前端点超时"
|
||||
android:dialogTitle="请输入时间(0-10000)ms"
|
||||
android:summary="默认值:短信转写5000,其他4000"
|
||||
android:defaultValue="4000" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="understander_vadeos_preference"
|
||||
android:title="后端点超时"
|
||||
android:dialogTitle="请输入时间(0-10000)ms"
|
||||
android:summary="默认值:短信转写1800,其他700 "
|
||||
android:defaultValue="700" />
|
||||
|
||||
<ListPreference
|
||||
android:key="understander_punc_preference"
|
||||
android:title="标点符号"
|
||||
android:entries="@array/punc_entries"
|
||||
android:entryValues="@array/punc_values"
|
||||
android:summary="默认值:有标点 "
|
||||
android:defaultValue="1" />
|
||||
|
||||
<!-- <CheckBoxPreference -->
|
||||
<!-- android:key="nbest_preference" -->
|
||||
<!-- android:title="@string/set_multiple_candidate_title" -->
|
||||
<!-- android:summary="@string/set_multiple_candidate_summary" -->
|
||||
<!-- android:defaultValue="false" /> -->
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
|
@ -0,0 +1,39 @@
|
||||
package com.thomas.xunfeilistenspeaking;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.view.Window;
|
||||
import com.thomas.xunfeilistenspeaking.SettingTextWatcher;
|
||||
|
||||
/**
|
||||
* 听写设置界面
|
||||
*/
|
||||
public class IatSettings extends PreferenceActivity implements OnPreferenceChangeListener {
|
||||
|
||||
public static final String PREFER_NAME = "com.iflytek.setting";
|
||||
private EditTextPreference mVadbosPreference;
|
||||
private EditTextPreference mVadeosPreference;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
super.onCreate(savedInstanceState);
|
||||
getPreferenceManager().setSharedPreferencesName(PREFER_NAME);
|
||||
// addPreferencesFromResource(R.xml.iat_setting);
|
||||
addPreferencesFromResource(getResources().getIdentifier("iat_setting","xml",getPackageName()));
|
||||
|
||||
mVadbosPreference = (EditTextPreference)findPreference("iat_vadbos_preference");
|
||||
mVadbosPreference.getEditText().addTextChangedListener(new SettingTextWatcher(IatSettings.this,mVadbosPreference,0,10000));
|
||||
|
||||
mVadeosPreference = (EditTextPreference)findPreference("iat_vadeos_preference");
|
||||
mVadeosPreference.getEditText().addTextChangedListener(new SettingTextWatcher(IatSettings.this,mVadeosPreference,0,10000));
|
||||
}
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package com.thomas.xunfeilistenspeaking;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONTokener;
|
||||
|
||||
/**
|
||||
* Json结果解析类
|
||||
*/
|
||||
public class JsonParser {
|
||||
|
||||
public static String parseIatResult(String json) {
|
||||
StringBuffer ret = new StringBuffer();
|
||||
try {
|
||||
JSONTokener tokener = new JSONTokener(json);
|
||||
JSONObject joResult = new JSONObject(tokener);
|
||||
|
||||
JSONArray words = joResult.getJSONArray("ws");
|
||||
for (int i = 0; i < words.length(); i++) {
|
||||
// 转写结果词,默认使用第一个结果
|
||||
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
|
||||
JSONObject obj = items.getJSONObject(0);
|
||||
ret.append(obj.getString("w"));
|
||||
// 如果需要多候选结果,解析数组其他字段
|
||||
// for(int j = 0; j < items.length(); j++)
|
||||
// {
|
||||
// JSONObject obj = items.getJSONObject(j);
|
||||
// ret.append(obj.getString("w"));
|
||||
// }
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
public static String parseGrammarResult(String json) {
|
||||
StringBuffer ret = new StringBuffer();
|
||||
try {
|
||||
JSONTokener tokener = new JSONTokener(json);
|
||||
JSONObject joResult = new JSONObject(tokener);
|
||||
|
||||
JSONArray words = joResult.getJSONArray("ws");
|
||||
for (int i = 0; i < words.length(); i++) {
|
||||
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
|
||||
for(int j = 0; j < items.length(); j++)
|
||||
{
|
||||
JSONObject obj = items.getJSONObject(j);
|
||||
if(obj.getString("w").contains("nomatch"))
|
||||
{
|
||||
ret.append("没有匹配结果.");
|
||||
return ret.toString();
|
||||
}
|
||||
ret.append("【结果】" + obj.getString("w"));
|
||||
ret.append("【置信度】" + obj.getInt("sc"));
|
||||
ret.append("\n");
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
ret.append("没有匹配结果.");
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
public static String parseLocalGrammarResult(String json) {
|
||||
StringBuffer ret = new StringBuffer();
|
||||
try {
|
||||
JSONTokener tokener = new JSONTokener(json);
|
||||
JSONObject joResult = new JSONObject(tokener);
|
||||
|
||||
JSONArray words = joResult.getJSONArray("ws");
|
||||
for (int i = 0; i < words.length(); i++) {
|
||||
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
|
||||
for(int j = 0; j < items.length(); j++)
|
||||
{
|
||||
JSONObject obj = items.getJSONObject(j);
|
||||
if(obj.getString("w").contains("nomatch"))
|
||||
{
|
||||
ret.append("没有匹配结果.");
|
||||
return ret.toString();
|
||||
}
|
||||
ret.append("【结果】" + obj.getString("w"));
|
||||
ret.append("\n");
|
||||
}
|
||||
}
|
||||
ret.append("【置信度】" + joResult.optInt("sc"));
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
ret.append("没有匹配结果.");
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package com.thomas.xunfeilistenspeaking;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 输入框输入范围控制
|
||||
*/
|
||||
public class SettingTextWatcher implements TextWatcher {
|
||||
private int editStart ;
|
||||
private int editCount ;
|
||||
private EditTextPreference mEditTextPreference;
|
||||
int minValue;//最小值
|
||||
int maxValue;//最大值
|
||||
private Context mContext;
|
||||
|
||||
public SettingTextWatcher(Context context, EditTextPreference e, int min, int max) {
|
||||
mContext = context;
|
||||
mEditTextPreference = e;
|
||||
minValue = min;
|
||||
maxValue = max;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
// Log.e("demo", "onTextChanged start:"+start+" count:"+count+" before:"+before);
|
||||
editStart = start;
|
||||
editCount = count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
|
||||
// Log.e("demo", "beforeTextChanged start:"+start+" count:"+count+" after:"+after);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (TextUtils.isEmpty(s)) {
|
||||
return;
|
||||
}
|
||||
String content = s.toString();
|
||||
// Log.e("demo", "content:"+content);
|
||||
if (isNumeric(content)) {
|
||||
int num = Integer.parseInt(content);
|
||||
if (num > maxValue || num < minValue) {
|
||||
s.delete(editStart, editStart+editCount);
|
||||
mEditTextPreference.getEditText().setText(s);
|
||||
Toast.makeText(mContext, "超出有效值范围", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}else {
|
||||
s.delete(editStart, editStart+editCount);
|
||||
mEditTextPreference.getEditText().setText(s);
|
||||
Toast.makeText(mContext, "只能输入数字哦", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 正则表达式-判断是否为数字
|
||||
*/
|
||||
public static boolean isNumeric(String str){
|
||||
Pattern pattern = Pattern.compile("[0-9]*");
|
||||
return pattern.matcher(str).matches();
|
||||
}
|
||||
|
||||
};
|
@ -0,0 +1,299 @@
|
||||
package com.thomas.xunfeilistenspeaking;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
import com.iflytek.cloud.*;
|
||||
import com.iflytek.cloud.ui.RecognizerDialog;
|
||||
import com.iflytek.cloud.ui.RecognizerDialogListener;
|
||||
import com.iflytek.sunflower.FlowerCollector;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
/**
|
||||
* Created by Thomas.Wang on 2017/2/10.
|
||||
*/
|
||||
public class XunfeiDialogActivity extends Activity{
|
||||
|
||||
private static String TAG = XunfeiDialogActivity.class.getSimpleName();
|
||||
// 语音听写对象
|
||||
private SpeechRecognizer mIat;
|
||||
// 语音听写UI
|
||||
private RecognizerDialog mIatDialog;
|
||||
// 用HashMap存储听写结果
|
||||
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
|
||||
|
||||
// private EditText mResultText;
|
||||
private Toast mToast;
|
||||
private SharedPreferences mSharedPreferences;
|
||||
// 引擎类型
|
||||
private String mEngineType = SpeechConstant.TYPE_CLOUD;
|
||||
|
||||
|
||||
private Handler mHandler = new Handler();
|
||||
private boolean isShowDialog;
|
||||
private String punc = "1";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(getResources().getIdentifier("activity_xunfei_dialog","layout",getPackageName()));
|
||||
|
||||
isShowDialog = getIntent().getBooleanExtra("isShowDialog",false);
|
||||
punc = getIntent().getStringExtra("punc");
|
||||
mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
|
||||
mIat = SpeechRecognizer.createRecognizer(this, mInitListener);
|
||||
|
||||
// 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
|
||||
// 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
|
||||
mIatDialog = new RecognizerDialog(this, mInitListener);
|
||||
mIatDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
finishThisActivity(RESULT_CANCELED,getString(getId("xunfei_cancel_listen","string")));
|
||||
}
|
||||
});
|
||||
mSharedPreferences = getSharedPreferences(IatSettings.PREFER_NAME,
|
||||
Activity.MODE_PRIVATE);
|
||||
startListen();
|
||||
}
|
||||
|
||||
private void stopListen(){
|
||||
if (mIat.isListening()) {
|
||||
mIat.stopListening();
|
||||
}
|
||||
}
|
||||
private void startListen() {
|
||||
if (mIat.isListening()) {
|
||||
mIat.stopListening();
|
||||
}
|
||||
// 移动数据分析,收集开始听写事件
|
||||
FlowerCollector.onEvent(this, "iat_recognize");
|
||||
mIatResults.clear();
|
||||
// 设置参数
|
||||
setParam();
|
||||
|
||||
// boolean isShowDialog = true;
|
||||
if (isShowDialog) {
|
||||
// 显示听写对话框
|
||||
mIatDialog.setListener(mRecognizerDialogListener);
|
||||
mIatDialog.show();
|
||||
// showTip(this.getString(getId("text_begin","string")));
|
||||
}else {
|
||||
// 不显示听写对话框
|
||||
ret = mIat.startListening(mRecognizerListener);
|
||||
if (ret != ErrorCode.SUCCESS) {
|
||||
// showTip("听写失败,错误码:" + ret);
|
||||
finishThisActivity(RESULT_CANCELED,"听写失败,错误码:" + ret);
|
||||
} else {
|
||||
// showTip(this.getString(getId("text_begin","string")));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
private int getId(String idName,String type){
|
||||
return getResources().getIdentifier(idName, type,getPackageName());
|
||||
}
|
||||
|
||||
|
||||
private void showTip(final String str) {
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mToast.setText(str);
|
||||
mToast.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
int ret = 0; // 函数调用返回值
|
||||
/**
|
||||
* 听写UI监听器
|
||||
*/
|
||||
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
|
||||
public void onResult(RecognizerResult results, boolean isLast) {
|
||||
printResult(results,isLast);
|
||||
}
|
||||
|
||||
/**
|
||||
* 识别回调错误.
|
||||
*/
|
||||
public void onError(SpeechError error) {
|
||||
// showTip(error.getPlainDescription(true));
|
||||
finishThisActivity(RESULT_CANCELED,error.getPlainDescription(true));
|
||||
}
|
||||
};
|
||||
|
||||
private void finishThisActivity(int type ,String str){
|
||||
Intent resultIntent = new Intent();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("result", str);
|
||||
resultIntent.putExtras(bundle);
|
||||
setResult(type, resultIntent);
|
||||
finish();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化监听器。
|
||||
*/
|
||||
private InitListener mInitListener = new InitListener() {
|
||||
|
||||
@Override
|
||||
public void onInit(int code) {
|
||||
Log.d(TAG, "SpeechRecognizer init() code = " + code);
|
||||
if (code != ErrorCode.SUCCESS) {
|
||||
showTip("初始化失败,错误码:" + code);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 听写监听器。
|
||||
*/
|
||||
private RecognizerListener mRecognizerListener = new RecognizerListener() {
|
||||
|
||||
@Override
|
||||
public void onBeginOfSpeech() {
|
||||
// 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入
|
||||
// showTip("开始说话");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(SpeechError error) {
|
||||
// Tips:
|
||||
// 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。
|
||||
// 如果使用本地功能(语记)需要提示用户开启语记的录音权限。
|
||||
// showTip(error.getPlainDescription(true));
|
||||
finishThisActivity(RESULT_CANCELED,error.getPlainDescription(true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEndOfSpeech() {
|
||||
// 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入
|
||||
// showTip("结束说话");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResult(RecognizerResult results, boolean isLast) {
|
||||
Log.d(TAG, results.getResultString());
|
||||
printResult(results,isLast);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onVolumeChanged(int volume, byte[] data) {
|
||||
// showTip("当前正在说话,音量大小:" + volume);
|
||||
// showTip("当前正在说话...");
|
||||
// Log.d(TAG, "返回音频数据:" + data.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
|
||||
// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
|
||||
// 若使用本地能力,会话id为null
|
||||
// if (SpeechEvent.EVENT_SESSION_ID == eventType) {
|
||||
// String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
|
||||
// Log.d(TAG, "session id =" + sid);
|
||||
// }
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
private void printResult(RecognizerResult results,boolean isLast) {
|
||||
String text = JsonParser.parseIatResult(results.getResultString());
|
||||
String sn = null;
|
||||
// 读取json结果中的sn字段
|
||||
try {
|
||||
JSONObject resultJson = new JSONObject(results.getResultString());
|
||||
sn = resultJson.optString("sn");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
mIatResults.put(sn, text);
|
||||
StringBuffer resultBuffer = new StringBuffer();
|
||||
for (String key : mIatResults.keySet()) {
|
||||
resultBuffer.append(mIatResults.get(key));
|
||||
}
|
||||
Log.d(TAG, "音频中文:" + resultBuffer.toString());
|
||||
// mResultText.setText(resultBuffer.toString());
|
||||
// mResultText.setSelection(mResultText.length());
|
||||
if (isLast){
|
||||
Intent resultIntent = new Intent();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("result", resultBuffer.toString());
|
||||
resultIntent.putExtras(bundle);
|
||||
this.setResult(RESULT_OK, resultIntent);
|
||||
finish();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 参数设置
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public void setParam() {
|
||||
// 清空参数
|
||||
mIat.setParameter(SpeechConstant.PARAMS, null);
|
||||
|
||||
// 设置听写引擎
|
||||
mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
|
||||
// 设置返回结果格式
|
||||
mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
|
||||
|
||||
String lag = mSharedPreferences.getString("iat_language_preference",
|
||||
"mandarin");
|
||||
if (lag.equals("en_us")) {
|
||||
// 设置语言
|
||||
mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");
|
||||
} else {
|
||||
// 设置语言
|
||||
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
|
||||
// 设置语言区域
|
||||
mIat.setParameter(SpeechConstant.ACCENT, lag);
|
||||
}
|
||||
|
||||
// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
|
||||
mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "4000"));
|
||||
|
||||
// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
|
||||
mIat.setParameter(SpeechConstant.VAD_EOS, mSharedPreferences.getString("iat_vadeos_preference", "1000"));
|
||||
|
||||
// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
|
||||
// mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", "1"));
|
||||
// mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", punc));
|
||||
mIat.setParameter(SpeechConstant.ASR_PTT, punc);
|
||||
|
||||
// 设置听写结果是否结果动态修正,为“1”则在听写过程中动态递增地返回结果,否则只在听写结束之后返回最终结果
|
||||
// 注:该参数暂时只对在线听写有效
|
||||
// mIat.setParameter(SpeechConstant.ASR_DWA, mSharedPreferences.getString("iat_dwa_preference", "0"));
|
||||
|
||||
// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
|
||||
// 注:AUDIO_FORMAT参数语记需要更新版本才能生效
|
||||
mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
|
||||
mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (mIatDialog.isShowing()){
|
||||
mIatDialog.dismiss();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,399 @@
|
||||
package com.thomas.xunfeilistenspeaking;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
import com.iflytek.cloud.*;
|
||||
import com.iflytek.sunflower.FlowerCollector;
|
||||
import org.apache.cordova.CallbackContext;
|
||||
import org.apache.cordova.CordovaPlugin;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
/**
|
||||
* Created by Thomas.Wang on 17/2/9.
|
||||
*/
|
||||
public class XunfeiListenSpeaking extends CordovaPlugin{
|
||||
private static String TAG = XunfeiListenSpeaking.class.getSimpleName();
|
||||
private Context context;
|
||||
private CallbackContext callbackContext;
|
||||
private Toast mToast;
|
||||
private Handler mHandler = new Handler();
|
||||
|
||||
private SpeechSynthesizer mTts;
|
||||
|
||||
// 语音听写对象
|
||||
private SpeechRecognizer mIat;
|
||||
|
||||
private SharedPreferences mSharedPreferences;
|
||||
// 引擎类型
|
||||
private String mEngineType = SpeechConstant.TYPE_CLOUD;
|
||||
// 用HashMap存储听写结果
|
||||
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
|
||||
@Override
|
||||
protected void pluginInitialize() {
|
||||
super.pluginInitialize();
|
||||
context = cordova.getActivity();
|
||||
// SpeechUtility.createUtility(context, SpeechConstant.APPID +"=584e7225");
|
||||
SpeechUtility.createUtility(context, SpeechConstant.APPID +"="+context.getString(getId("app_id","string")));
|
||||
}
|
||||
|
||||
private int getId(String idName,String type){
|
||||
return context.getResources().getIdentifier(idName, type,context.getPackageName());
|
||||
}
|
||||
private static final int DIALOG_ACTIVIT_CODE = 0;
|
||||
@Override
|
||||
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
||||
|
||||
this.callbackContext = callbackContext;
|
||||
//开始听写
|
||||
if (action.equals("startListen")){
|
||||
// boolean isShowDialog = args.getBoolean(0);
|
||||
|
||||
// String punc = args.getBoolean(1)?"1":"0";
|
||||
boolean isShowDialog ;
|
||||
try {
|
||||
isShowDialog = args.getBoolean(0);
|
||||
}catch (Exception e){
|
||||
isShowDialog = true;
|
||||
}
|
||||
String punc;
|
||||
try{
|
||||
punc = args.getBoolean(1)?"1":"0";
|
||||
}catch (Exception e){
|
||||
punc = "1";
|
||||
}
|
||||
if (isShowDialog){
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(context, XunfeiDialogActivity.class);
|
||||
intent.putExtra("isShowDialog",isShowDialog);
|
||||
intent.putExtra("punc",punc);
|
||||
cordova.startActivityForResult( this,intent, DIALOG_ACTIVIT_CODE);
|
||||
}else {
|
||||
startListenWidthNotDialog(punc);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//停止听写
|
||||
if (action.equals("stopListen")) {
|
||||
stopListen();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//开始听写
|
||||
if (action.equals("startSpeak")){
|
||||
mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
|
||||
String speakMessage = args.getString(0).trim();
|
||||
startSpeak(speakMessage);
|
||||
return true;
|
||||
}
|
||||
//停止说话
|
||||
if (action.equals("stopSpeak")){
|
||||
stopSpeak();
|
||||
return true;
|
||||
}
|
||||
|
||||
//暂停
|
||||
if (action.equals("pauseSpeaking")){
|
||||
pauseSpeaking();
|
||||
return true;
|
||||
}
|
||||
//继续
|
||||
if (action.equals("resumeSpeaking")){
|
||||
resumeSpeaking();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void stopListen(){
|
||||
if (mIat!=null&&mIat.isListening()) {
|
||||
mIat.stopListening();
|
||||
}
|
||||
}
|
||||
int ret = 0; // 函数调用返回值
|
||||
private void startListenWidthNotDialog(String punc){
|
||||
mIat = SpeechRecognizer.createRecognizer(context, mInitListener);
|
||||
mSharedPreferences = context.getSharedPreferences(IatSettings.PREFER_NAME,
|
||||
Activity.MODE_PRIVATE);
|
||||
if (mIat.isListening()) {
|
||||
mIat.stopListening();
|
||||
}
|
||||
// 移动数据分析,收集开始听写事件
|
||||
FlowerCollector.onEvent(context, "iat_recognize");
|
||||
mIatResults.clear();
|
||||
// 设置参数
|
||||
setParam(punc);
|
||||
|
||||
|
||||
// 不显示听写对话框
|
||||
ret = mIat.startListening(mRecognizerListener);
|
||||
if (ret != ErrorCode.SUCCESS) {
|
||||
// showTip("听写失败,错误码:" + ret);
|
||||
// finishThisActivity(RESULT_CANCELED,"听写失败,错误码:" + ret);
|
||||
callbackContext.error("听写失败,错误码:" + ret);
|
||||
|
||||
} else {
|
||||
// showTip(this.getString(getId("text_begin","string")));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化监听器。
|
||||
*/
|
||||
private InitListener mInitListener = new InitListener() {
|
||||
|
||||
@Override
|
||||
public void onInit(int code) {
|
||||
Log.d(TAG, "SpeechRecognizer init() code = " + code);
|
||||
if (code != ErrorCode.SUCCESS) {
|
||||
showTip("初始化失败,错误码:" + code);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 听写监听器。
|
||||
*/
|
||||
private RecognizerListener mRecognizerListener = new RecognizerListener() {
|
||||
|
||||
@Override
|
||||
public void onBeginOfSpeech() {
|
||||
// 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入
|
||||
// showTip("开始说话");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(SpeechError error) {
|
||||
// Tips:
|
||||
// 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。
|
||||
// 如果使用本地功能(语记)需要提示用户开启语记的录音权限。
|
||||
// showTip(error.getPlainDescription(true));
|
||||
// finishThisActivity(RESULT_CANCELED,error.getPlainDescription(true));
|
||||
callbackContext.error(error.getPlainDescription(true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEndOfSpeech() {
|
||||
// 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入
|
||||
// showTip("结束说话");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResult(RecognizerResult results, boolean isLast) {
|
||||
Log.d(TAG, results.getResultString());
|
||||
|
||||
printResult(results,isLast);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onVolumeChanged(int volume, byte[] data) {
|
||||
// showTip("当前正在说话,音量大小:" + volume);
|
||||
// showTip("当前正在说话...");
|
||||
// Log.d(TAG, "返回音频数据:" + data.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
|
||||
// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
|
||||
// 若使用本地能力,会话id为null
|
||||
// if (SpeechEvent.EVENT_SESSION_ID == eventType) {
|
||||
// String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
|
||||
// Log.d(TAG, "session id =" + sid);
|
||||
// }
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
private void printResult(RecognizerResult results, boolean isLast) {
|
||||
String text = JsonParser.parseIatResult(results.getResultString());
|
||||
String sn = null;
|
||||
// 读取json结果中的sn字段
|
||||
try {
|
||||
JSONObject resultJson = new JSONObject(results.getResultString());
|
||||
sn = resultJson.optString("sn");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
mIatResults.put(sn, text);
|
||||
StringBuffer resultBuffer = new StringBuffer();
|
||||
for (String key : mIatResults.keySet()) {
|
||||
resultBuffer.append(mIatResults.get(key));
|
||||
}
|
||||
Log.d(TAG, "音频中文:" + resultBuffer.toString());
|
||||
// mResultText.setText(resultBuffer.toString());
|
||||
// mResultText.setSelection(mResultText.length());
|
||||
// Intent resultIntent = new Intent();
|
||||
// Bundle bundle = new Bundle();
|
||||
// bundle.putString("result", resultBuffer.toString());
|
||||
// resultIntent.putExtras(bundle);
|
||||
// this.setResult(RESULT_OK, resultIntent);
|
||||
// finish();
|
||||
if (isLast)
|
||||
callbackContext.success(resultBuffer.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 参数设置
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public void setParam(String punc) {
|
||||
// 清空参数
|
||||
mIat.setParameter(SpeechConstant.PARAMS, null);
|
||||
|
||||
// 设置听写引擎
|
||||
mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
|
||||
// 设置返回结果格式
|
||||
mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
|
||||
|
||||
String lag = mSharedPreferences.getString("iat_language_preference",
|
||||
"mandarin");
|
||||
if (lag.equals("en_us")) {
|
||||
// 设置语言
|
||||
mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");
|
||||
} else {
|
||||
// 设置语言
|
||||
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
|
||||
// 设置语言区域
|
||||
mIat.setParameter(SpeechConstant.ACCENT, lag);
|
||||
}
|
||||
|
||||
// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
|
||||
mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "4000"));
|
||||
|
||||
// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
|
||||
mIat.setParameter(SpeechConstant.VAD_EOS, mSharedPreferences.getString("iat_vadeos_preference", "1000"));
|
||||
|
||||
// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
|
||||
// mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", "1"));
|
||||
// mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", punc));
|
||||
mIat.setParameter(SpeechConstant.ASR_PTT, punc);
|
||||
|
||||
// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
|
||||
// 注:AUDIO_FORMAT参数语记需要更新版本才能生效
|
||||
mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
|
||||
mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");
|
||||
}
|
||||
|
||||
|
||||
private void resumeSpeaking(){
|
||||
mTts.resumeSpeaking();
|
||||
}
|
||||
private void pauseSpeaking(){
|
||||
mTts.pauseSpeaking();
|
||||
}
|
||||
|
||||
private void stopSpeak(){
|
||||
if(mTts!=null&&mTts.isSpeaking()){
|
||||
mTts.stopSpeaking();
|
||||
}
|
||||
}
|
||||
|
||||
private void startSpeak(String speakMessage) {
|
||||
setSpeakParameter();
|
||||
if (mTts.isSpeaking()){
|
||||
mTts.stopSpeaking();
|
||||
}
|
||||
mTts.startSpeaking(speakMessage, mSynListener);
|
||||
|
||||
}
|
||||
|
||||
private void setSpeakParameter(){
|
||||
if (mTts==null){
|
||||
//1.创建SpeechSynthesizer对象, 第二个参数:本地合成时传InitListener
|
||||
mTts = SpeechSynthesizer.createSynthesizer(context, null);
|
||||
//2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类
|
||||
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人
|
||||
mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速
|
||||
mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围0~100
|
||||
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端
|
||||
//设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”
|
||||
//保存在SD卡需要在AndroidManifest.xml添加写SD卡权限
|
||||
//如果不需要保存合成音频,注释该行代码
|
||||
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");
|
||||
//3.开始合成
|
||||
// mTts.startSpeaking("科大讯飞,让世界聆听我们的声音", mSynListener);
|
||||
}
|
||||
}
|
||||
//合成监听器
|
||||
private SynthesizerListener mSynListener = new SynthesizerListener(){
|
||||
//会话结束回调接口,没有错误时,error为null
|
||||
public void onCompleted(SpeechError error) {
|
||||
if (error == null) {
|
||||
// showTip("播放完成");
|
||||
callbackContext.success("播放完成");
|
||||
} else if (error != null) {
|
||||
showTip(error.getPlainDescription(true));
|
||||
callbackContext.error(error.getPlainDescription(true));
|
||||
}
|
||||
}
|
||||
//缓冲进度回调
|
||||
//percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在文本中结束位置,info为附加信息。
|
||||
public void onBufferProgress(int percent, int beginPos, int endPos, String info) {}
|
||||
//开始播放
|
||||
public void onSpeakBegin() {
|
||||
|
||||
// showTip("开始播放");
|
||||
}
|
||||
//暂停播放
|
||||
public void onSpeakPaused() {}
|
||||
//播放进度回调
|
||||
//percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文本中结束位置.
|
||||
public void onSpeakProgress(int percent, int beginPos, int endPos) {}
|
||||
//恢复播放回调接口
|
||||
public void onSpeakResumed() {}
|
||||
//会话事件回调接口
|
||||
public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
switch (requestCode) {
|
||||
case DIALOG_ACTIVIT_CODE:
|
||||
if(resultCode == Activity.RESULT_OK){
|
||||
Bundle bundle = data.getExtras();
|
||||
callbackContext.success(bundle.getString("result"));
|
||||
}else if (resultCode == Activity.RESULT_CANCELED){
|
||||
Bundle bundle = data.getExtras();
|
||||
callbackContext.error(bundle.getString("result"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
private void showTip(final String str) {
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mToast.setText(str);
|
||||
mToast.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
36
src/ios/CDVSpeech.h
Normal file
36
src/ios/CDVSpeech.h
Normal file
@ -0,0 +1,36 @@
|
||||
//
|
||||
// CDVSpeech.h
|
||||
// ZJxunfeiDemo-OC
|
||||
//
|
||||
// Created by Edc.zhang on 2017/2/13.
|
||||
// Copyright © 2017年 Edc.zhang. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import <Cordova/CDV.h>
|
||||
|
||||
//#import "iflyMSC/iflyMSC.h"
|
||||
#import "iflyMSC.framework/Headers/IFlyMSC.h"
|
||||
|
||||
|
||||
@interface CDVSpeech : CDVPlugin <IFlySpeechRecognizerDelegate,IFlySpeechSynthesizerDelegate,IFlyRecognizerViewDelegate>{
|
||||
|
||||
}
|
||||
@property (nonatomic, copy) NSString* appId;
|
||||
@property (nonatomic, strong) NSString* callbackId;
|
||||
@property (nonatomic, strong) IFlySpeechRecognizer* recognizer;
|
||||
@property (nonatomic, strong) IFlySpeechSynthesizer* synthesizer;
|
||||
@property(nonatomic,strong) IFlyRecognizerView *iflyRecognizerView;
|
||||
|
||||
|
||||
- (void)startListening:(CDVInvokedUrlCommand*)command;
|
||||
- (void)stopListening:(CDVInvokedUrlCommand*)command;
|
||||
- (void)cancelListening:(CDVInvokedUrlCommand*)command;
|
||||
|
||||
- (void)startSpeaking:(CDVInvokedUrlCommand*)command;
|
||||
- (void)pauseSpeaking:(CDVInvokedUrlCommand*)command;
|
||||
- (void)resumeSpeaking:(CDVInvokedUrlCommand*)command;
|
||||
- (void)stopSpeaking:(CDVInvokedUrlCommand*)command;
|
||||
|
||||
@end
|
343
src/ios/CDVSpeech.m
Normal file
343
src/ios/CDVSpeech.m
Normal file
@ -0,0 +1,343 @@
|
||||
//
|
||||
// CDVSpeech.m
|
||||
// ZJxunfeiDemo-OC
|
||||
//
|
||||
// Created by Edc.zhang on 2017/2/13.
|
||||
// Copyright © 2017年 Edc.zhang. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import "CDVSpeech.h"
|
||||
|
||||
#define STR_EVENT @"event"
|
||||
#define STR_CODE @"code"
|
||||
#define STR_MESSAGE @"message"
|
||||
#define STR_VOLUME @"volume"
|
||||
#define STR_RESULTS @"results"
|
||||
#define STR_PROGRESS @"progress"
|
||||
|
||||
// always replace the appid and the SDK with what you get from voicecloud.cn
|
||||
#define SPEECH_APP_ID @"589d270d"
|
||||
|
||||
|
||||
@interface CDVSpeech()
|
||||
- (void) fireEvent:(NSString*)event;
|
||||
@end
|
||||
|
||||
#import "CDVSpeech.h"
|
||||
|
||||
@implementation CDVSpeech
|
||||
- (void)login:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
self.callbackId = command.callbackId;
|
||||
|
||||
self.appId = SPEECH_APP_ID;
|
||||
|
||||
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",self.appId];
|
||||
[IFlySpeechUtility createUtility:initString];
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - 语音录入
|
||||
- (void)startListening:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSLog(@"Speech :: startListening");
|
||||
NSDictionary* options = [command.arguments objectAtIndex:0];
|
||||
// withDefault:[NSNull null]];
|
||||
//是否有UI弹窗
|
||||
// BOOL isShowDialog = [command.arguments objectAtIndex:1];
|
||||
NSString *isShowDialog = [NSString stringWithFormat:@"%@",[command.arguments objectAtIndex:1]];
|
||||
NSString *isShowPunc = [NSString stringWithFormat:@"%@",[command.arguments objectAtIndex:2]];
|
||||
if ([isShowDialog isEqualToString:@"0"]) {
|
||||
if (!self.recognizer){
|
||||
self.recognizer = [IFlySpeechRecognizer sharedInstance];
|
||||
self.recognizer.delegate = self;
|
||||
[self.recognizer setParameter:@"iat" forKey:@"domain"];
|
||||
[self.recognizer setParameter:@"16000" forKey:@"sample_rate"];
|
||||
[self.recognizer setParameter:@"700" forKey:@"vad_eos"];
|
||||
[self.recognizer setParameter:@"0" forKey:@"plain_result"];
|
||||
[self.recognizer setParameter:@"asr.pcm" forKey:@"asr_audio_path"];
|
||||
//是否显示标点
|
||||
if ([isShowPunc isEqualToString:@"0"]) {
|
||||
[self.recognizer setParameter:@"0" forKey:@"asr_ptt"];
|
||||
}
|
||||
NSLog(@"Speech :: createRecognizer");
|
||||
}
|
||||
if ((NSNull *)options != [NSNull null]) {
|
||||
NSArray *keys = [options allKeys];
|
||||
for (NSString *key in keys) {
|
||||
NSString *value = [options objectForKey:key];
|
||||
[self.recognizer setParameter:value forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
//判断当前是否正在听 若正在识别则先停止 再开始听
|
||||
if ([self.recognizer isListening]) {
|
||||
[self.recognizer stopListening];
|
||||
}
|
||||
[self.recognizer startListening];
|
||||
|
||||
}else{
|
||||
//初始化语音识别控件
|
||||
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
|
||||
self.iflyRecognizerView = [[IFlyRecognizerView alloc] initWithCenter:keyWindow.center];
|
||||
self.iflyRecognizerView.delegate = self;
|
||||
[self.iflyRecognizerView setParameter: @"iat" forKey: [IFlySpeechConstant IFLY_DOMAIN]];
|
||||
//asr_audio_path保存录音文件名,如不再需要,设置value为nil表示取消,默认目录是documents
|
||||
[self.iflyRecognizerView setParameter:@"asrview.pcm " forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];
|
||||
if ([isShowPunc isEqualToString:@"0"]) {
|
||||
[self.iflyRecognizerView setParameter:@"0" forKey:@"asr_ptt"];
|
||||
}
|
||||
[self.iflyRecognizerView start];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)stopListening:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSLog(@"Speech :: stopListening");
|
||||
[self.recognizer stopListening];
|
||||
}
|
||||
|
||||
- (void)cancelListening:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSLog(@"Speech :: cancelListening");
|
||||
[self.recognizer cancel];
|
||||
[self.iflyRecognizerView cancel];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - 语音朗读
|
||||
- (void)startSpeaking:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSString* text = [command.arguments objectAtIndex:0];
|
||||
NSDictionary* options = [command.arguments objectAtIndex:1];
|
||||
// withDefault:[NSNull null]];
|
||||
NSLog(@"Speech :: startSpeaking - %@", text);
|
||||
// [self.commandDelegate runInBackground:^{
|
||||
if (!self.synthesizer){
|
||||
self.synthesizer = [IFlySpeechSynthesizer sharedInstance];
|
||||
self.synthesizer.delegate = self;
|
||||
|
||||
[self.synthesizer setParameter:@"50" forKey:[IFlySpeechConstant SPEED]];//合成的语速,取值范围 0~100
|
||||
[self.synthesizer setParameter:@"80" forKey:[IFlySpeechConstant VOLUME]];//合成的音量;取值范围 0~100
|
||||
[self.synthesizer setParameter:@"vixr" forKey:[IFlySpeechConstant VOICE_NAME]];//发音人,默认为”xiaoyan”
|
||||
|
||||
[self.synthesizer setParameter:@"8000" forKey: [IFlySpeechConstant SAMPLE_RATE]];//音频采样率,目前支持的采样率有 16000 和 8000;
|
||||
[self.synthesizer setParameter:@"tts.pcm" forKey: [IFlySpeechConstant TTS_AUDIO_PATH]];
|
||||
|
||||
NSLog(@"Speech :: createSynthesizer");
|
||||
}
|
||||
if ((NSNull *)options != [NSNull null]) {
|
||||
NSArray *keys = [options allKeys];
|
||||
for (NSString *key in keys) {
|
||||
NSString *value = [options objectForKey:key];
|
||||
[self.synthesizer setParameter:value forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
if ([self.synthesizer isSpeaking]) {
|
||||
[self.synthesizer stopSpeaking];
|
||||
}
|
||||
[self.synthesizer startSpeaking:text];
|
||||
// }];
|
||||
}
|
||||
|
||||
#pragma mark - 暂停语音朗读
|
||||
- (void)pauseSpeaking:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSLog(@"Speech :: pauseSpeaking");
|
||||
[self.synthesizer pauseSpeaking];
|
||||
}
|
||||
|
||||
#pragma mark - 继续语音朗读
|
||||
- (void)resumeSpeaking:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSLog(@"Speech :: resumeSpeaking");
|
||||
[self.synthesizer resumeSpeaking];
|
||||
}
|
||||
|
||||
#pragma mark - 停止语音朗读
|
||||
- (void)stopSpeaking:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
NSLog(@"Speech :: stopSpeaking");
|
||||
[self.synthesizer stopSpeaking];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark IFlyRecognizerViewDelegate
|
||||
|
||||
/*! 有UI
|
||||
* IFlyRecognizerViewDelegate 回调返回识别结果
|
||||
*
|
||||
* @param resultArray 识别结果,NSArray的第一个元素为NSDictionary,NSDictionary的key为识别结果,sc为识别结果的置信度
|
||||
* @param isLast -[out] 是否最后一个结果
|
||||
*/
|
||||
- (void)onResult:(NSArray *)resultArray isLast:(BOOL) isLast{
|
||||
|
||||
NSLog(@"Speech :: onResults - %@", resultArray);
|
||||
if (self.callbackId) {
|
||||
NSMutableString *text = [[NSMutableString alloc] init];
|
||||
NSDictionary *dic = [resultArray objectAtIndex:0];
|
||||
for (NSString *key in dic) {
|
||||
[text appendFormat:@"%@",key];
|
||||
}
|
||||
NSLog(@"Recognize Result: %@",text);
|
||||
|
||||
// NSString * resultFromJson = [ISRDataHelper stringFromJson:text];
|
||||
//
|
||||
// NSLog(@"---------%@",resultFromJson);
|
||||
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"SpeechResults",STR_EVENT,text,STR_RESULTS, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*! 无UI
|
||||
* IFlySpeechRecognizerDelegate 识别结果回调
|
||||
* 在识别过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。
|
||||
* 使用results的示例如下:
|
||||
* <pre><code>
|
||||
* - (void) onResults:(NSArray *) results{
|
||||
* NSMutableString *result = [[NSMutableString alloc] init];
|
||||
* NSDictionary *dic = [results objectAtIndex:0];
|
||||
* for (NSString *key in dic){
|
||||
* [result appendFormat:@"%@",key];//合并结果
|
||||
* }
|
||||
* }
|
||||
* </code></pre>
|
||||
*
|
||||
* @param results -[out] 识别结果,NSArray的第一个元素为NSDictionary,NSDictionary的key为识别结果,sc为识别结果的置信度。
|
||||
* @param isLast -[out] 是否最后一个结果
|
||||
*/
|
||||
- (void) onResults:(NSArray *) results isLast:(BOOL)isLast{
|
||||
NSLog(@"Speech :: onResults - %@", results);
|
||||
if (self.callbackId) {
|
||||
NSMutableString *text = [[NSMutableString alloc] init];
|
||||
NSDictionary *dic = [results objectAtIndex:0];
|
||||
for (NSString *key in dic) {
|
||||
[text appendFormat:@"%@",key];
|
||||
}
|
||||
NSLog(@"Recognize Result: %@",text);
|
||||
|
||||
// NSString * resultFromJson = [ISRDataHelper stringFromJson:text];
|
||||
//
|
||||
// NSLog(@"---------%@",resultFromJson);
|
||||
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"SpeechResults",STR_EVENT,text,STR_RESULTS, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* IFlySpeechRecognizerDelegate 音量变化回调
|
||||
* 在录音过程中,回调音频的音量。
|
||||
*
|
||||
* @param volume -[out] 音量,范围从0-30
|
||||
*/
|
||||
|
||||
- (void) onVolumeChanged:(int)volume
|
||||
{
|
||||
NSLog(@"Speech :: onVolumeChanged - %d", volume);
|
||||
if (self.callbackId) {
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"VolumeChanged",STR_EVENT,[NSNumber numberWithInt:volume],STR_VOLUME, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* 识别结束回调
|
||||
*
|
||||
* @param error 识别结束错误码
|
||||
*/
|
||||
- (void)onError: (IFlySpeechError *) error{
|
||||
NSLog(@"Speech :: onError - %d", error.errorCode);
|
||||
if (self.callbackId) {
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"11SpeechError",STR_EVENT,[NSNumber numberWithInt:error.errorCode],STR_CODE,error.errorDesc,STR_MESSAGE, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark IFlySpeechSynthesizerDelegate
|
||||
- (void) onCompleted:(IFlySpeechError*)error
|
||||
{
|
||||
NSLog(@"Speech :: onCompleted - %d", error.errorCode);
|
||||
if (self.callbackId) {
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"SpeakCompleted",STR_EVENT,[NSNumber numberWithInt:error.errorCode],STR_CODE,error.errorDesc,STR_MESSAGE, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) onSpeakBegin
|
||||
{
|
||||
NSLog(@"Speech :: onSpeakBegin");
|
||||
[self fireEvent:@"SpeakBegin"];
|
||||
}
|
||||
|
||||
- (void) onBufferProgress:(int)progress message:(NSString *)msg
|
||||
{
|
||||
NSLog(@"Speech :: onBufferProgress - %d", progress);
|
||||
if (self.callbackId) {
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"BufferProgress",STR_EVENT,[NSNumber numberWithInt:progress],STR_PROGRESS,msg,STR_MESSAGE, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) onSpeakProgress:(int)progress
|
||||
{
|
||||
NSLog(@"Speech :: onSpeakProgress - %d", progress);
|
||||
if (self.callbackId) {
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObjectsAndKeys:@"SpeakProgress",STR_EVENT,[NSNumber numberWithInt:progress],STR_PROGRESS, nil];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) onSpeakPaused
|
||||
{
|
||||
NSLog(@"Speech :: onSpeakPaused");
|
||||
[self fireEvent:@"SpeakPaused"];
|
||||
}
|
||||
|
||||
- (void) onSpeakResumed
|
||||
{
|
||||
NSLog(@"Speech :: onSpeakResumed");
|
||||
[self fireEvent:@"SpeakResumed"];
|
||||
}
|
||||
|
||||
- (void) onSpeakCancel
|
||||
{
|
||||
NSLog(@"Speech :: onSpeakCancel");
|
||||
[self fireEvent:@"SpeakCancel"];
|
||||
}
|
||||
|
||||
- (void) fireEvent:(NSString*)event
|
||||
{
|
||||
if (self.callbackId) {
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObject:event forKey:STR_EVENT];
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
|
||||
[result setKeepCallbackAsBool:YES];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:self.callbackId];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
27
src/ios/iflyMSC.framework/Headers/IFlyContact.h
Normal file
27
src/ios/iflyMSC.framework/Headers/IFlyContact.h
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// IFlyContact.h
|
||||
// msc
|
||||
//
|
||||
// Created by ypzhao on 13-3-1.
|
||||
// Copyright (c) 2013年 IFLYTEK. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 此接口为获取通信录中的联系人
|
||||
* 获取联系人是为了在进行语音识别时(sms)能更好的识别出您说的人名,联系人上传是属于个性化的
|
||||
* 一部分.
|
||||
*/
|
||||
@interface IFlyContact : NSObject
|
||||
|
||||
/*!
|
||||
* 获取联系人
|
||||
* 调用此方法需要添加 AddressBook.framework 到工程中,调用此方法后可以直接将通信录中的联系
|
||||
* 人转化为语音云识别的数据结构。您可以将获取的数据通过IFlyDataUploader类,上传到语音云,我们
|
||||
* 只获取通信录中的人名
|
||||
*
|
||||
* @return 返回联系人信息
|
||||
*/
|
||||
- (NSString *) contact;
|
||||
@end
|
54
src/ios/iflyMSC.framework/Headers/IFlyDataUploader.h
Normal file
54
src/ios/iflyMSC.framework/Headers/IFlyDataUploader.h
Normal file
@ -0,0 +1,54 @@
|
||||
//
|
||||
// IFlyDataUploader.h
|
||||
// MSC
|
||||
//
|
||||
// Created by ypzhao on 13-4-8.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/*!
|
||||
* 数据上传类
|
||||
*/
|
||||
@interface IFlyDataUploader : NSObject
|
||||
|
||||
/*!
|
||||
* 数据名称
|
||||
*/
|
||||
@property(nonatomic,copy) NSString *dataName;
|
||||
/*!
|
||||
* 数据
|
||||
*/
|
||||
@property(nonatomic,copy) NSString *data;
|
||||
|
||||
/*!
|
||||
* 上传完成回调
|
||||
*
|
||||
* @param result 结果
|
||||
* @param error 错误码
|
||||
*/
|
||||
typedef void(^IFlyUploadDataCompletionHandler)(NSString* result,IFlySpeechError * error);
|
||||
|
||||
/*!
|
||||
* 上传数据
|
||||
* 此函数用于上传数据,下载的过程是**异步**的。
|
||||
*
|
||||
* @param completionHandler -[in] 上传完成回调
|
||||
* @param name -[in] 上传的内容名称,名称最好和你要上传的数据内容相关,不可以为nil
|
||||
* @param data -[in] 上传的数据,以utf8编码,不可以为nil
|
||||
*/
|
||||
- (void) uploadDataWithCompletionHandler:(IFlyUploadDataCompletionHandler)completionHandler name:(NSString *)name data:(NSString *)data;
|
||||
|
||||
/*!
|
||||
* 设置上传数据参数
|
||||
*
|
||||
* @param parameter 参数值
|
||||
* @param key 参数名
|
||||
*/
|
||||
-(void) setParameter:(NSString*) parameter forKey:(NSString*) key;
|
||||
|
||||
@end
|
37
src/ios/iflyMSC.framework/Headers/IFlyDebugLog.h
Normal file
37
src/ios/iflyMSC.framework/Headers/IFlyDebugLog.h
Normal file
@ -0,0 +1,37 @@
|
||||
//
|
||||
// IFlyDebugLog.h
|
||||
// MSC
|
||||
|
||||
// description: 程序中的log处理类
|
||||
|
||||
// Created by ypzhao on 12-11-22.
|
||||
// Copyright (c) 2012年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 调试信息
|
||||
*/
|
||||
@interface IFlyDebugLog : NSObject
|
||||
|
||||
/*!
|
||||
* 打印调试信息
|
||||
*
|
||||
* @param format -[in] 要打印的内容格式
|
||||
* @param ... -[in] 要打印的内容
|
||||
*/
|
||||
+ (void) showLog:(NSString *)format, ...;
|
||||
|
||||
/*!
|
||||
* 将log写入文件中
|
||||
*/
|
||||
+ (void) writeLog;
|
||||
|
||||
/*!
|
||||
* 设置是否显示log
|
||||
*
|
||||
* @param showLog YES:显示;NO:不显示
|
||||
*/
|
||||
+ (void) setShowLog:(BOOL) showLog;
|
||||
@end
|
48
src/ios/iflyMSC.framework/Headers/IFlyISVDelegate.h
Normal file
48
src/ios/iflyMSC.framework/Headers/IFlyISVDelegate.h
Normal file
@ -0,0 +1,48 @@
|
||||
//
|
||||
// IFlyISVDelegate.h
|
||||
// msc_UI
|
||||
//
|
||||
// Created by admin on 14-9-15.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/**
|
||||
* 声纹回调协议
|
||||
*/
|
||||
@protocol IFlyISVDelegate
|
||||
|
||||
/**
|
||||
* 声纹结果回调
|
||||
*
|
||||
* @param dic 结果
|
||||
*/
|
||||
-(void) onResult:(NSDictionary *)dic;
|
||||
|
||||
/**
|
||||
* 错误码回调
|
||||
*
|
||||
* @param errorCode 错误码
|
||||
*/
|
||||
-(void) onError:(IFlySpeechError *) errorCode;
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
* 等待结果
|
||||
*/
|
||||
-(void) onRecognition;
|
||||
|
||||
/**
|
||||
* 音量改变回调
|
||||
*
|
||||
* @param volume 音量值
|
||||
*/
|
||||
-(void) onVolumeChanged: (int)volume;
|
||||
|
||||
@end
|
||||
|
134
src/ios/iflyMSC.framework/Headers/IFlyISVRecognizer.h
Normal file
134
src/ios/iflyMSC.framework/Headers/IFlyISVRecognizer.h
Normal file
@ -0,0 +1,134 @@
|
||||
//
|
||||
// IFlyISVRecognizer.h
|
||||
// ISV
|
||||
//
|
||||
// Created by wangdan on 14-9-6.
|
||||
// Copyright (c) 2014年 IFlyTEK. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IFlyISVDelegate.h"
|
||||
|
||||
/**
|
||||
* 声纹接口类
|
||||
*/
|
||||
@interface IFlyISVRecognizer : NSObject
|
||||
{
|
||||
|
||||
}
|
||||
@property (assign) id<IFlyISVDelegate> delegate;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* FlyISVRecognizer is a kind of Singleton calss
|
||||
* the function can be used as below:
|
||||
IFLyISVRecognizer *recognizer=[IFlyISVRecognizer creteRecognizer: self];
|
||||
*/
|
||||
|
||||
+(instancetype) sharedInstance;
|
||||
|
||||
|
||||
/*
|
||||
* genrerate a serial number password
|
||||
* princeple:
|
||||
1.number serial has no 1 in itself;
|
||||
2.the nuber serial has no same number("98765432"is right while "99876543" is wrong)
|
||||
* @length: the serial number's length,length of "98765432" is 8,
|
||||
generally length is 8 and other value is forbidden
|
||||
*/
|
||||
|
||||
-(NSString*) generatePassword:(int)length;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Used to get password from server
|
||||
* @pwdt:
|
||||
when pwdt is 1,the function will return chinese text;
|
||||
while pwdt is 2, the funciton will return number serial
|
||||
*/
|
||||
|
||||
-(NSArray*) getPasswordList:(int)pwdt;
|
||||
|
||||
|
||||
/*
|
||||
* Used to judge if the engine is running in listenning
|
||||
* return value:
|
||||
YES: the engine is listenning;
|
||||
No : the engine is not listenning
|
||||
*/
|
||||
-(BOOL) isListening;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Used to query or delete the voiceprint model in server
|
||||
* @cmd:
|
||||
"del": delete model
|
||||
"que": query model
|
||||
* @authid: user id ,can be @"tianxia" or other;
|
||||
* @pwdt: voiceprint type
|
||||
1: fixed txt voiceprint code ,like @"我的地盘我做主"
|
||||
2: free voiceprint code , user can speek anything,but 5 times
|
||||
trainning the speech shall be same
|
||||
3: number serial voiceprint code ,like @"98765432" and so on
|
||||
* @ptxt: voiceprint txt,only fixed voiceprint and number serial have this,
|
||||
in free voiceprint model this param shall be set nil
|
||||
* @vid: another voiceprint type model,user can use this to query or delete
|
||||
model in server can be @"jakillasdfasdjjjlajlsdfhdfdsadff",totally 32 bits;
|
||||
* NOTES:
|
||||
when vid is not nil,then the server will judge the vid first
|
||||
while the vid is nil, server can still query or delete the voiceprint model
|
||||
by other params
|
||||
*/
|
||||
-(BOOL) sendRequest:(NSString*)cmd authid:(NSString *)auth_id pwdt:(int)pwdt ptxt:(NSString *)ptxt vid:(NSString *)vid err:(int *)err;
|
||||
|
||||
|
||||
/*
|
||||
* set the voiceprint params
|
||||
* @"sst" : @"train" or @"verify"
|
||||
* @"auth_id" : @"tianxia" or ther
|
||||
* @"sub" : @"ivp"
|
||||
* @"ptxt" :
|
||||
* @"rgn" : @"5"
|
||||
* @"pwdt" : @"1",or @"2", or @"3"
|
||||
* @"auf" : @"audio/L16;rate=16000" or @"audio/L16;rate=8000"
|
||||
* @"vad_enable : @"1" or @"0"
|
||||
* @"vad_timeout" : @"3000"
|
||||
* @"vad_speech_tail": @"100"
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *)value forKey:(NSString *)key;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get the voiceprint params
|
||||
* used the same as function of setParameter
|
||||
*/
|
||||
-(NSString*) getParameter:(NSString *)key;
|
||||
|
||||
|
||||
/*
|
||||
* start recording
|
||||
*/
|
||||
-(void) startListening;
|
||||
|
||||
|
||||
/*
|
||||
* stop recording
|
||||
*/
|
||||
-(void) stopListening;
|
||||
|
||||
|
||||
/*
|
||||
* cancel recording,like function stopListening
|
||||
*/
|
||||
-(void) cancel; /* cancel recognization */
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
42
src/ios/iflyMSC.framework/Headers/IFlyMSC.h
Normal file
42
src/ios/iflyMSC.framework/Headers/IFlyMSC.h
Normal file
@ -0,0 +1,42 @@
|
||||
//
|
||||
// IFlyMSC.h
|
||||
// msc
|
||||
//
|
||||
// Created by 张剑 on 15/1/14.
|
||||
// Copyright (c) 2015年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef MSC_IFlyMSC_h
|
||||
#define MSC_IFlyMSC_h
|
||||
|
||||
#import "IFlyContact.h"
|
||||
#import "IFlyDataUploader.h"
|
||||
#import "IFlyDebugLog.h"
|
||||
#import "IFlyISVDelegate.h"
|
||||
#import "IFlyISVRecognizer.h"
|
||||
#import "IFlyRecognizerView.h"
|
||||
#import "IFlyRecognizerViewDelegate.h"
|
||||
#import "IFlyResourceUtil.h"
|
||||
#import "IFlySetting.h"
|
||||
#import "IFlySpeechConstant.h"
|
||||
#import "IFlySpeechError.h"
|
||||
#import "IFlySpeechEvaluator.h"
|
||||
#import "IFlySpeechEvaluatorDelegate.h"
|
||||
#import "IFlySpeechEvent.h"
|
||||
#import "IFlySpeechRecognizer.h"
|
||||
#import "IFlySpeechRecognizerDelegate.h"
|
||||
#import "IFlySpeechSynthesizer.h"
|
||||
#import "IFlySpeechSynthesizerDelegate.h"
|
||||
#import "IFlySpeechUnderstander.h"
|
||||
#import "IFlySpeechUtility.h"
|
||||
#import "IFlyTextUnderstander.h"
|
||||
#import "IFlyUserWords.h"
|
||||
#import "IFlyPcmRecorder.h"
|
||||
#import "IFlySpeechEvaluator.h"
|
||||
#import "IFlySpeechEvaluatorDelegate.h"
|
||||
|
||||
#import "IFlyVoiceWakeuper.h"
|
||||
#import "IFlyVoiceWakeuperDelegate.h"
|
||||
|
||||
|
||||
#endif
|
104
src/ios/iflyMSC.framework/Headers/IFlyPcmRecorder.h
Normal file
104
src/ios/iflyMSC.framework/Headers/IFlyPcmRecorder.h
Normal file
@ -0,0 +1,104 @@
|
||||
//
|
||||
// IFlyPcmRecorder.h
|
||||
// MSC
|
||||
|
||||
// description:
|
||||
|
||||
// Created by ypzhao on 12-11-15.
|
||||
// Copyright (c) 2012年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import <AudioToolbox/AudioQueue.h>
|
||||
#import <AudioToolbox/AudioFile.h>
|
||||
#import <AudioToolbox/AudioServices.h>
|
||||
#import <AudioToolbox/AudioConverter.h>
|
||||
#import <AVFoundation/AVAudioSession.h>
|
||||
|
||||
|
||||
@class IFlyPcmRecorder;
|
||||
|
||||
/**
|
||||
* 录音协议
|
||||
*/
|
||||
@protocol IFlyPcmRecorderDelegate<NSObject>
|
||||
|
||||
/**
|
||||
* 回调音频数据
|
||||
*
|
||||
* @param buffer 音频数据
|
||||
* @param size 表示音频的长度
|
||||
*/
|
||||
- (void) onIFlyRecorderBuffer: (const void *)buffer bufferSize:(int)size;
|
||||
|
||||
/**
|
||||
* 回调音频的错误码
|
||||
*
|
||||
* @param recoder 录音器
|
||||
* @param error 错误码
|
||||
*/
|
||||
- (void) onIFlyRecorderError:(IFlyPcmRecorder*)recoder theError:(int) error;
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
* 回调录音音量
|
||||
*
|
||||
* @param power 音量值
|
||||
*/
|
||||
- (void) onIFlyRecorderVolumeChanged:(int) power;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
/**
|
||||
* 录音封装
|
||||
*/
|
||||
@interface IFlyPcmRecorder : NSObject<AVAudioSessionDelegate>
|
||||
|
||||
/**
|
||||
* 录音委托对象
|
||||
*/
|
||||
@property (assign) id<IFlyPcmRecorderDelegate> delegate;
|
||||
|
||||
/**
|
||||
* 单例模式
|
||||
*
|
||||
* @return 返回录音对象单例
|
||||
*/
|
||||
+ (instancetype) sharedInstance;
|
||||
|
||||
/**
|
||||
* 开始录音
|
||||
*
|
||||
* @return 开启录音成功返回YES,否则返回NO
|
||||
*/
|
||||
- (BOOL) start;
|
||||
|
||||
/**
|
||||
* 停止录音
|
||||
*/
|
||||
- (void) stop;
|
||||
|
||||
/**
|
||||
* 设置音频采样率
|
||||
*
|
||||
* @param rate -[in] 采样率,8k/16k
|
||||
*/
|
||||
- (void) setSample:(NSString *) rate;
|
||||
|
||||
/*
|
||||
* 设置录音时间间隔参数
|
||||
*/
|
||||
- (void) setPowerCycle:(float) cycle;
|
||||
|
||||
/**
|
||||
* 保存录音
|
||||
*
|
||||
* @param savePath 音频保存路径
|
||||
*/
|
||||
-(void) setSaveAudioPath:(NSString *)savePath;
|
||||
|
||||
@end
|
||||
|
137
src/ios/iflyMSC.framework/Headers/IFlyRecognizerView.h
Normal file
137
src/ios/iflyMSC.framework/Headers/IFlyRecognizerView.h
Normal file
@ -0,0 +1,137 @@
|
||||
//
|
||||
// IFlyRecognizerView.h
|
||||
// MSC
|
||||
//
|
||||
// Created by admin on 13-4-16.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@protocol IFlyRecognizerViewDelegate ;
|
||||
|
||||
/*!
|
||||
* 语音识别控件
|
||||
* 录音时触摸控件结束录音,开始识别(相当于旧版的停止);触摸其他位置,取消录音,结束会话(取消)
|
||||
* 出错时触摸控件,重新开启会话(相当于旧版的再说一次);触摸其他位置,取消录音,结束会话(取消)
|
||||
*
|
||||
*/
|
||||
@interface IFlyRecognizerView : UIView<NSObject>
|
||||
|
||||
/*!
|
||||
* 设置委托对象
|
||||
*/
|
||||
@property(nonatomic,assign)id<IFlyRecognizerViewDelegate> delegate;
|
||||
|
||||
/*!
|
||||
* 初始化控件
|
||||
*
|
||||
* @param origin 控件左上角的坐标
|
||||
*
|
||||
* @return IFlyRecognizerView 对象
|
||||
*/
|
||||
- (id)initWithOrigin:(CGPoint)origin;
|
||||
|
||||
/*!
|
||||
* 初始化控件
|
||||
*
|
||||
* @param center 控件中心的坐标
|
||||
*
|
||||
* @return IFlyRecognizerView 对象
|
||||
*/
|
||||
- (id) initWithCenter:(CGPoint)center;
|
||||
|
||||
/*!
|
||||
* 设置横竖屏自适应
|
||||
*
|
||||
* @param autoRotate 默认值YES,横竖屏自适应
|
||||
*/
|
||||
- (void) setAutoRotate:(BOOL)autoRotate;
|
||||
|
||||
/*
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | 参数 | 描述
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | domain |应用的领域: 取值为:iat、search、video、poi、music、asr;
|
||||
* | | iat:普通文本听写;
|
||||
* | | search:热词搜索;
|
||||
* | | video:视频音乐搜索;
|
||||
* | | asr:关键词识别;
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | vad_bos |前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;
|
||||
* | | engine指定iat识别默认值为5000;
|
||||
* | | 其他情况默认值为 4000,范围 0-10000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | vad_eos |后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,
|
||||
* | | 自动停止录音;单位:ms;
|
||||
* | | sms 识别默认值为 1800;
|
||||
* | | 其他默认值为 700,范围 0-10000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | sample_rate |采样率:目前支持的采样率设置有 16000 和 8000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | asr_ptt |标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | result_type |返回结果的数据格式: 可设置为json,xml,plain,默认为json。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | grammarID |识别的语法id: 只针对 domain 设置为”asr”的应用。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | asr_audio_path|音频文件名: 设置此参数后,将会自动保存识别的录音文件。
|
||||
* | | 路径为Documents/(指定值)。
|
||||
* | | 不设置或者设置为nil,则不保存音频。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | params |扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
|
||||
/*!
|
||||
* 设置识别引擎的参数
|
||||
* 识别的引擎参数(key)取值如下:
|
||||
* <table>
|
||||
* <thead>
|
||||
* <tr><th>*参数</th><th><em>描述</em></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>domain</td><td>应用的领域: 取值为:iat、search、video、poi、music、asr;<br/>iat:普通文本听写;<br/>search:热词搜索;<br/>video:视频音乐搜索;<br/>video:视频音乐搜索;<br/>asr:关键词识别;</td></tr>
|
||||
* <tr><td>vad_bos</td><td>前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br/>engine指定iat识别默认值为5000;<br/>其他情况默认值为 4000,范围 0-10000。</td></tr>
|
||||
* <tr><td>vad_eos</td><td>后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,<br/>自动停止录音;单位:ms;<br/>sms 识别默认值为 1800;<br/>其他默认值为 700,范围 0-10000。</td></tr>
|
||||
* <tr><td>sample_rate</td><td>采样率:目前支持的采样率设置有 16000 和 8000。</td></tr>
|
||||
* <tr><td>asr_ptt</td><td>标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。</td></tr>
|
||||
* <tr><td>result_type</td><td>返回结果的数据格式: 可设置为json,xml,plain,默认为json。</td></tr>
|
||||
* <tr><td>grammarID</td><td>识别的语法id: 只针对 domain 设置为”asr”的应用。</td></tr>
|
||||
* <tr><td>asr_audio_path</td><td>音频文件名: 设置此参数后,将会自动保存识别的录音文件。<br/> 路径为Documents/(指定值)。<br/>不设置或者设置为nil,则不保存音频。</td></tr>
|
||||
* <tr><td>params</td><td>扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
* @param value 参数对应的取值
|
||||
* @param key 识别引擎参数
|
||||
*
|
||||
* @return 成功返回YES;失败返回NO
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/*!
|
||||
* 获取识别引擎参数
|
||||
*
|
||||
* @param key 参数key
|
||||
*
|
||||
* @return 参数值
|
||||
*/
|
||||
-(NSString*) parameterForKey:(NSString *)key;
|
||||
|
||||
/*!
|
||||
* 开始识别
|
||||
*
|
||||
* @return 成功返回YES;失败返回NO
|
||||
*/
|
||||
- (BOOL)start;
|
||||
|
||||
/*!
|
||||
* 取消本次识别
|
||||
*/
|
||||
- (void)cancel;
|
||||
|
||||
|
||||
@end
|
@ -0,0 +1,36 @@
|
||||
//
|
||||
// IFlyRecognizerDelegate.h
|
||||
// MSC
|
||||
//
|
||||
// Created by admin on 13-4-16.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlyRecognizerView;
|
||||
@class IFlySpeechError;
|
||||
|
||||
/*!
|
||||
* 识别回调委托
|
||||
*/
|
||||
@protocol IFlyRecognizerViewDelegate <NSObject>
|
||||
|
||||
/*!
|
||||
* 回调返回识别结果
|
||||
*
|
||||
* @param resultArray 识别结果,NSArray的第一个元素为NSDictionary,NSDictionary的key为识别结果,sc为识别结果的置信度
|
||||
* @param isLast -[out] 是否最后一个结果
|
||||
*/
|
||||
- (void)onResult:(NSArray *)resultArray isLast:(BOOL) isLast;
|
||||
|
||||
/*!
|
||||
* 识别结束回调
|
||||
*
|
||||
* @param error 识别结束错误码
|
||||
*/
|
||||
- (void)onError: (IFlySpeechError *) error;
|
||||
|
||||
@optional
|
||||
|
||||
@end
|
90
src/ios/iflyMSC.framework/Headers/IFlyResourceUtil.h
Normal file
90
src/ios/iflyMSC.framework/Headers/IFlyResourceUtil.h
Normal file
@ -0,0 +1,90 @@
|
||||
//
|
||||
// IFlyResourceUtil.h
|
||||
// MSCDemo
|
||||
//
|
||||
// Created by admin on 14-6-20.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 资源工具类
|
||||
*/
|
||||
@interface IFlyResourceUtil : NSObject
|
||||
|
||||
/*!
|
||||
* 获取通过MSPSetParam,启动引擎的标识
|
||||
*
|
||||
* @return 通过MSPSetParam,启动引擎的标识
|
||||
*/
|
||||
+(NSString*) ENGINE_START;
|
||||
|
||||
/*!
|
||||
* 获取通过MSPSetParam,销毁引擎的标识
|
||||
*
|
||||
* @return 通过MSPSetParam,销毁引擎的标识
|
||||
*/
|
||||
+(NSString*) ENGINE_DESTROY;
|
||||
|
||||
/*!
|
||||
* 获取识别引擎的资源目录标识
|
||||
*
|
||||
* @return 识别引擎的资源目录标识
|
||||
*/
|
||||
+(NSString*) ASR_RES_PATH;
|
||||
|
||||
/*!
|
||||
* 得到语法构建目录
|
||||
*
|
||||
* @return 语法构建目录
|
||||
*/
|
||||
+(NSString*) GRM_BUILD_PATH;
|
||||
|
||||
/*!
|
||||
* 获取合成引擎的资源目录标识,同时需要先传入voice_name方可生效
|
||||
*
|
||||
* @return 合成引擎的资源目录标识,同时需要先传入voice_name方可生效
|
||||
*/
|
||||
+(NSString*) TTS_RES_PATH;
|
||||
|
||||
/*!
|
||||
* 获取唤醒资源的资源目录标识
|
||||
*
|
||||
* @return 唤醒资源的资源目录标识
|
||||
*/
|
||||
+(NSString*) IVW_RES_PATH;
|
||||
|
||||
/*!
|
||||
* 语法类型
|
||||
*
|
||||
* @return 语法类型
|
||||
*/
|
||||
+(NSString*) GRAMMARTYPE;
|
||||
|
||||
/*!
|
||||
* 语记SDK专用参数,用于设置本地默认资源路径
|
||||
*
|
||||
* @return 本地默认资源路径key字符串
|
||||
*/
|
||||
+(NSString*) PLUS_LOCAL_DEFAULT_RES_PATH;
|
||||
|
||||
#pragma mark -
|
||||
/*!
|
||||
* 资源存放路径
|
||||
*
|
||||
* @param path 设置的路径
|
||||
*
|
||||
* @return 资源目录
|
||||
*/
|
||||
+(NSString*) generateResourcePath:(NSString *)path;
|
||||
|
||||
/**
|
||||
* 获得离线发音人对应的id
|
||||
*
|
||||
* @param voiceName 发音人名称
|
||||
*
|
||||
* @return 有,发音人对应的id;无,返回nil
|
||||
*/
|
||||
+(NSString*) identifierForVoiceName:(NSString*)voiceName;
|
||||
@end
|
93
src/ios/iflyMSC.framework/Headers/IFlySetting.h
Normal file
93
src/ios/iflyMSC.framework/Headers/IFlySetting.h
Normal file
@ -0,0 +1,93 @@
|
||||
//
|
||||
// IFlySetting.h
|
||||
// MSC
|
||||
//
|
||||
// Created by iflytek on 13-4-12.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 日志打印等级
|
||||
*/
|
||||
typedef NS_OPTIONS(NSInteger, LOG_LEVEL){
|
||||
/*!
|
||||
* 全部打印
|
||||
*/
|
||||
LVL_ALL = -1,
|
||||
/*!
|
||||
* 高,异常分析需要的级别
|
||||
*/
|
||||
LVL_DETAIL = 31,
|
||||
/*!
|
||||
* 中,打印基本日志信息
|
||||
*/
|
||||
LVL_NORMAL = 15,
|
||||
/*!
|
||||
* 低,只打印主要日志信息
|
||||
*/
|
||||
LVL_LOW = 7,
|
||||
/*!
|
||||
* 不打印
|
||||
*/
|
||||
LVL_NONE = 0
|
||||
};
|
||||
|
||||
/*!
|
||||
* 此接口为iflyMSC sdk 配置接口。
|
||||
* 可以获取版本号,设置日志打印等级等
|
||||
*/
|
||||
@interface IFlySetting : NSObject
|
||||
|
||||
/*!
|
||||
* 获取版本号
|
||||
*
|
||||
* @return 版本号
|
||||
*/
|
||||
+ (NSString *) getVersion;
|
||||
|
||||
/*!
|
||||
* 获取日志等级
|
||||
*
|
||||
* @return 返回日志等级
|
||||
*/
|
||||
+ (LOG_LEVEL) logLvl;
|
||||
|
||||
/*!
|
||||
* 是否打印控制台log
|
||||
* 在软件发布时,建议关闭此log。
|
||||
*
|
||||
* @param showLog -[in] YES,打印log;NO,不打印
|
||||
*/
|
||||
+ (void) showLogcat:(BOOL) showLog;
|
||||
|
||||
/*!
|
||||
* 设置日志msc.log生成路径以及日志等级
|
||||
* <table>
|
||||
* <thead>
|
||||
* <tr><th>*日志打印等级</th><th><em>描述</em></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>LVL_ALL</td><td>全部打印</td></tr>
|
||||
* <tr><td>LVL_DETAIL</td><td>高,异常分析需要的级别</td></tr>
|
||||
* <tr><td>LVL_NORMAL</td><td>中,打印基本日志信息</td></tr>
|
||||
* <tr><td>LVL_LOW</td><td>低,只打印主要日志信息</td></tr>
|
||||
* <tr><td>LVL_NONE</td><td>不打印</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* @param level -[in] 日志打印等级
|
||||
*/
|
||||
+ (void) setLogFile:(LOG_LEVEL) level;
|
||||
|
||||
/*!
|
||||
* 设置日志文件的路径
|
||||
* 日志文件默认存放在Documents目录。
|
||||
*
|
||||
* @param path -[in] 日志文件的全路径
|
||||
*/
|
||||
+ (void) setLogFilePath:(NSString*) path;
|
||||
|
||||
@end
|
851
src/ios/iflyMSC.framework/Headers/IFlySpeechConstant.h
Normal file
851
src/ios/iflyMSC.framework/Headers/IFlySpeechConstant.h
Normal file
@ -0,0 +1,851 @@
|
||||
//
|
||||
// IFlySpeechConstant.h
|
||||
// MSCDemo
|
||||
//
|
||||
// Created by iflytek on 5/9/14.
|
||||
// Copyright (c) 2014 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 公共常量类
|
||||
* 主要定义参数的key value值
|
||||
*/
|
||||
@interface IFlySpeechConstant : NSObject
|
||||
|
||||
|
||||
#pragma mark - 通用参数key
|
||||
|
||||
/*!
|
||||
* 语音应用ID
|
||||
* 通过开发者网站申请
|
||||
*
|
||||
* @return 语音应用IDkey
|
||||
*/
|
||||
+(NSString*)APPID;
|
||||
|
||||
|
||||
/*!
|
||||
* 语言区域。
|
||||
*
|
||||
* @return 语言区域key。
|
||||
*/
|
||||
+(NSString*)ACCENT;
|
||||
|
||||
/*!
|
||||
* 语言区域。
|
||||
*
|
||||
* @return 普通话value。
|
||||
*/
|
||||
+(NSString*)ACCENT_MANDARIN;
|
||||
|
||||
/*!
|
||||
* 语言区域。
|
||||
*
|
||||
* @return 河南话value。
|
||||
*/
|
||||
+(NSString*)ACCENT_HENANESE;
|
||||
|
||||
/*!
|
||||
* 语言区域。
|
||||
*
|
||||
* @return 粤语value。
|
||||
*/
|
||||
+(NSString*)ACCENT_CANTONESE;
|
||||
|
||||
/*!
|
||||
* 语言
|
||||
* 支持:zh_cn,zh_tw,en_us<br>
|
||||
*
|
||||
* @return 语言key
|
||||
*/
|
||||
+(NSString*)LANGUAGE;
|
||||
|
||||
/*!
|
||||
* 语言
|
||||
*
|
||||
* @return 中文value
|
||||
*/
|
||||
+(NSString*)LANGUAGE_CHINESE;
|
||||
|
||||
|
||||
/*!
|
||||
* 语言
|
||||
*
|
||||
* @return 中文台湾value
|
||||
*/
|
||||
+(NSString*)LANGUAGE_CHINESE_TW;
|
||||
|
||||
/*!
|
||||
* 语言
|
||||
*
|
||||
* @return 英文value
|
||||
*/
|
||||
+(NSString*)LANGUAGE_ENGLISH;
|
||||
|
||||
/*!
|
||||
* 返回结果的数据格式,
|
||||
* 可设置为json,xml,plain,默认为json。
|
||||
*
|
||||
* @return 返回结果的数据格式key
|
||||
*/
|
||||
+(NSString*)RESULT_TYPE;
|
||||
|
||||
/*!
|
||||
* 应用领域。
|
||||
*
|
||||
* @return 应用领域key
|
||||
*/
|
||||
+(NSString*)IFLY_DOMAIN;
|
||||
|
||||
/*!
|
||||
* 个性化数据上传类型
|
||||
*
|
||||
* @return 个性化数据上传类型key
|
||||
*/
|
||||
+(NSString*)DATA_TYPE;
|
||||
|
||||
/*!
|
||||
* 语音输入超时时间
|
||||
* 单位:ms,默认30000
|
||||
*
|
||||
* @return 语音输入超时时间key
|
||||
*/
|
||||
+(NSString*)SPEECH_TIMEOUT;
|
||||
|
||||
/*!
|
||||
* 网络连接超时时间
|
||||
* 单位:ms,默认20000
|
||||
*
|
||||
* @return 网络连接超时时间key
|
||||
*/
|
||||
+(NSString*)NET_TIMEOUT;
|
||||
|
||||
/*!
|
||||
* 业务类型。
|
||||
*
|
||||
* @return 业务类型key。
|
||||
*/
|
||||
+(NSString*)SUBJECT;
|
||||
|
||||
/*!
|
||||
* 扩展参数。
|
||||
*
|
||||
* @return 扩展参数key。
|
||||
*/
|
||||
+(NSString*)PARAMS;
|
||||
|
||||
/**
|
||||
* 加密参数
|
||||
*
|
||||
* 支持类型:ssl 加密 tcp 非加密 默认:tcp
|
||||
* 建议对安全性要求较高时使用ssl。
|
||||
*
|
||||
* @return 加密参数key
|
||||
*/
|
||||
+(NSString*)PROT_TYPE;
|
||||
|
||||
/**
|
||||
* ssl证书内容
|
||||
*
|
||||
* @return ssl证书内容key
|
||||
*/
|
||||
+(NSString*)SSL_CERT;
|
||||
|
||||
/*!
|
||||
* 录音音量返回时间间隔。
|
||||
*
|
||||
* @return 间隔key。
|
||||
*/
|
||||
+(NSString*)POWER_CYCLE;
|
||||
|
||||
/*!
|
||||
* 合成、识别、唤醒、评测、声纹等业务采样率。
|
||||
*
|
||||
* @return 合成及识别采样率key。
|
||||
*/
|
||||
+(NSString*)SAMPLE_RATE;
|
||||
|
||||
/*!
|
||||
* 合成、识别、唤醒、评测、声纹等业务采样率。
|
||||
*
|
||||
* @return 合成及识别采样率8K Value。
|
||||
*/
|
||||
+(NSString*)SAMPLE_RATE_8K;
|
||||
|
||||
/*!
|
||||
* 合成、识别、唤醒、评测、声纹等业务采样率。
|
||||
*
|
||||
* @return 合成及识别采样率16K Value。
|
||||
*/
|
||||
+(NSString*)SAMPLE_RATE_16K;
|
||||
|
||||
/*!
|
||||
* 引擎类型。
|
||||
* 可选:local,cloud,auto
|
||||
* 默认:auto
|
||||
*
|
||||
* @return 引擎类型key。
|
||||
*/
|
||||
+(NSString*)ENGINE_TYPE;
|
||||
|
||||
/*!
|
||||
* 本地识别引擎。
|
||||
*
|
||||
* @return 本地识别引擎value。
|
||||
*/
|
||||
+(NSString*)TYPE_LOCAL;
|
||||
|
||||
/*!
|
||||
* 云端识别引擎。
|
||||
*
|
||||
* @return 云端识别引擎value。
|
||||
*/
|
||||
+(NSString*)TYPE_CLOUD;
|
||||
|
||||
/*!
|
||||
* 混合识别引擎。
|
||||
*
|
||||
* @return 混合识别引擎value。
|
||||
*/
|
||||
+(NSString*)TYPE_MIX;
|
||||
|
||||
/*!
|
||||
* 引擎根据当前配置进行选择。
|
||||
*
|
||||
* @return 引擎根据当前配置进行选择value。
|
||||
*/
|
||||
+(NSString*)TYPE_AUTO;
|
||||
|
||||
/*!
|
||||
* 输入文本编码格式。
|
||||
*
|
||||
* @return 编码格式key。
|
||||
*/
|
||||
+(NSString*)TEXT_ENCODING;
|
||||
|
||||
/*!
|
||||
* 结果编码格式。
|
||||
*
|
||||
* @return 结果编码格式key。
|
||||
*/
|
||||
+(NSString*)RESULT_ENCODING;
|
||||
|
||||
/**
|
||||
* 是否初始化播放器
|
||||
* SDK内部播放器采用音频队列实现,有部分外部需求需要自定义音频队列,可以通过此开关控制
|
||||
* 0:不初始化,非0或者参数为空:初始化,默认初始化
|
||||
* @return 是否初始化播放器 参数key
|
||||
*/
|
||||
+(NSString*)PLAYER_INIT;
|
||||
|
||||
/**
|
||||
* 是否初始化录音器
|
||||
* SDK内部录音器采用音频队列实现,有部分外部需求需要自定义音频队列,可以通过此开关控制
|
||||
* 0:不初始化,非0或者参数为空:初始化,默认初始化
|
||||
* @return 是否初始化录音器 参数key
|
||||
*/
|
||||
+(NSString*)RECORDER_INIT;
|
||||
|
||||
#pragma mark - 合成相关设置key
|
||||
/*!
|
||||
* 语速
|
||||
* 范围 (0~100) 默认值:50
|
||||
*
|
||||
* @return 语速key
|
||||
*/
|
||||
+(NSString*)SPEED;
|
||||
|
||||
/*!
|
||||
* 音调
|
||||
* 范围(0~100)默认值:50
|
||||
*
|
||||
* @return 音调key
|
||||
*/
|
||||
+(NSString*)PITCH;
|
||||
|
||||
/*!
|
||||
* 合成录音保存路径
|
||||
*
|
||||
* @return 合成录音保存路径key
|
||||
* @注意 只需要设置文件名则可,会自动拼接到IFlySetting setLogFilePath接口设置的目录后
|
||||
*/
|
||||
+(NSString*)TTS_AUDIO_PATH;
|
||||
|
||||
/**
|
||||
* 启用VAD功能
|
||||
*
|
||||
* @return 启用VAD功能key
|
||||
*/
|
||||
+(NSString*)VAD_ENABLE;
|
||||
|
||||
/*!
|
||||
* VAD前端点超时
|
||||
* 范围:0-10000(单位ms)
|
||||
*
|
||||
* @return VAD前端点超时key
|
||||
*/
|
||||
+(NSString*)VAD_BOS;
|
||||
|
||||
/*!
|
||||
* VAD后端点超时 。
|
||||
* 可选范围:0-10000(单位ms)
|
||||
*
|
||||
* @return VAD后端点超时key
|
||||
*/
|
||||
+(NSString*)VAD_EOS;
|
||||
|
||||
|
||||
/*
|
||||
* 云端支持如下发音人:
|
||||
* 对于网络TTS的发音人角色,不同引擎类型支持的发音人不同,使用中请注意选择。
|
||||
*
|
||||
* |--------|----------------|
|
||||
* | 发音人 | 参数 |
|
||||
* |--------|----------------|
|
||||
* | 小燕 | xiaoyan |
|
||||
* |--------|----------------|
|
||||
* | 小宇 | xiaoyu |
|
||||
* |--------|----------------|
|
||||
* | 凯瑟琳 | catherine |
|
||||
* |--------|----------------|
|
||||
* | 亨利 | henry |
|
||||
* |--------|----------------|
|
||||
* | 玛丽 | vimary |
|
||||
* |--------|----------------|
|
||||
* | 小研 | vixy |
|
||||
* |--------|----------------|
|
||||
* | 小琪 | vixq |
|
||||
* |--------|----------------|
|
||||
* | 小峰 | vixf |
|
||||
* |--------|----------------|
|
||||
* | 小梅 | vixl |
|
||||
* |--------|----------------|
|
||||
* | 小莉 | vixq |
|
||||
* |--------|----------------|
|
||||
* | 小蓉 | vixr |
|
||||
* |--------|----------------|
|
||||
* | 小芸 | vixyun |
|
||||
* |--------|----------------|
|
||||
* | 小坤 | vixk |
|
||||
* |--------|----------------|
|
||||
* | 小强 | vixqa |
|
||||
* |--------|----------------|
|
||||
* | 小莹 | vixyin |
|
||||
* |--------|----------------|
|
||||
* | 小新 | vixx |
|
||||
* |--------|----------------|
|
||||
* | 楠楠 | vinn |
|
||||
* |--------|----------------|
|
||||
* | 老孙 | vils |
|
||||
* |--------|----------------|
|
||||
*/
|
||||
|
||||
/*!
|
||||
* 发音人
|
||||
* <table>
|
||||
* <thead>
|
||||
* <tr><th>*云端发音人名称</th><th><em>参数</em></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>小燕</td><td>xiaoyan</td></tr>
|
||||
* <tr><td>小宇</td><td>xiaoyu</td></tr>
|
||||
* <tr><td>凯瑟琳</td><td>catherine</td></tr>
|
||||
* <tr><td>亨利</td><td>henry</td></tr>
|
||||
* <tr><td>玛丽</td><td>vimary</td></tr>
|
||||
* <tr><td>小研</td><td>vixy</td></tr>
|
||||
* <tr><td>小琪</td><td>vixq</td></tr>
|
||||
* <tr><td>小峰</td><td>vixf</td></tr>
|
||||
* <tr><td>小梅</td><td>vixl</td></tr>
|
||||
* <tr><td>小莉</td><td>vixq</td></tr>
|
||||
* <tr><td>小蓉(四川话)</td><td>vixr</td></tr>
|
||||
* <tr><td>小芸</td><td>vixyun</td></tr>
|
||||
* <tr><td>小坤</td><td>vixk</td></tr>
|
||||
* <tr><td>小强</td><td>vixqa</td></tr>
|
||||
* <tr><td>小莹</td><td>vixying</td></tr>
|
||||
* <tr><td>小新</td><td>vixx</td></tr>
|
||||
* <tr><td>楠楠</td><td>vinn</td></tr>
|
||||
* <tr><td>老孙</td><td>vils</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* @return 发音人key
|
||||
*/
|
||||
+(NSString*)VOICE_NAME;
|
||||
|
||||
/*!
|
||||
* 发音人ID key。
|
||||
* @return 发音人ID key
|
||||
*/
|
||||
+(NSString*)VOICE_ID;
|
||||
|
||||
/*!
|
||||
* 发音人语种 key。
|
||||
* 参数值:0:Auto 1:中文 2英文 ,默认 0.
|
||||
* @return 发音人ID key
|
||||
*/
|
||||
+(NSString*)VOICE_LANG;
|
||||
|
||||
/*!
|
||||
* 音量
|
||||
* 范围(0~100) 默认值:50
|
||||
*
|
||||
* @return 音量key
|
||||
*/
|
||||
+(NSString*)VOLUME ;
|
||||
|
||||
/*!
|
||||
* 合成音频播放缓冲时间
|
||||
* 即缓冲多少秒音频后开始播放,如tts_buffer_time=1000;
|
||||
* 默认缓冲1000ms毫秒后播放。
|
||||
*
|
||||
* @return 合成音频播放缓冲时间缓冲时间key
|
||||
*/
|
||||
+(NSString*)TTS_BUFFER_TIME ;
|
||||
|
||||
/** 合成数据即时返回
|
||||
*/
|
||||
|
||||
/**
|
||||
* 合成数据是否即时返回
|
||||
* 是否需要数据回调,为1时,当合成一段音频会通过onEvent回调返回,直接合成结束;
|
||||
* 设置为1为即时返回;0为非即时返回;默认值为0;
|
||||
*
|
||||
* @return 成数据即时返回key
|
||||
*/
|
||||
+(NSString*)TTS_DATA_NOTIFY;
|
||||
|
||||
/**
|
||||
* 预合成文本
|
||||
*
|
||||
* @return 预合成文本参数key
|
||||
*/
|
||||
+(NSString*)NEXT_TEXT;
|
||||
|
||||
/**
|
||||
* 是否需要打开MPPlayingInfocenter
|
||||
* 是否需要初始化MPPlayerCenter的属性;0:需要初始化,1:不初始化
|
||||
*
|
||||
* @return 是否需要打开MPPlayingInfocenter 参数key
|
||||
*/
|
||||
+(NSString*)MPPLAYINGINFOCENTER;
|
||||
|
||||
#pragma mark - 识别、听写、语义相关设置key
|
||||
|
||||
/*!
|
||||
* 录音源
|
||||
* 录音时的录音方式,默认为麦克风,设置为1;
|
||||
* 如果需要外部送入音频,设置为-1,通过WriteAudio接口送入音频。
|
||||
*
|
||||
* @return 录音源key
|
||||
*/
|
||||
+(NSString*)AUDIO_SOURCE;
|
||||
|
||||
/*!
|
||||
* 识别录音保存路径
|
||||
*
|
||||
* @return 识别录音保存路径key
|
||||
*/
|
||||
+(NSString*) ASR_AUDIO_PATH;
|
||||
|
||||
/*!
|
||||
* 设置是否开启语义
|
||||
*
|
||||
* @return 设置是否开启语义key
|
||||
*/
|
||||
+(NSString*)ASR_SCH;
|
||||
|
||||
/*!
|
||||
* 设置是否有标点符号
|
||||
*
|
||||
* @return 设置是否有标点符号key
|
||||
*/
|
||||
+(NSString*)ASR_PTT;
|
||||
|
||||
/*!
|
||||
* ASR_PTT 参数值:设置带标点符号
|
||||
*
|
||||
* @return 设置是有标点符号Value
|
||||
*/
|
||||
+(NSString*)ASR_PTT_HAVEDOT;
|
||||
|
||||
/*!
|
||||
* ASR_PTT 参数值:设置不带标点符号
|
||||
*
|
||||
* @return 设置是无标点符号Value
|
||||
*/
|
||||
+(NSString*)ASR_PTT_NODOT;
|
||||
|
||||
/*!
|
||||
* 本地语法名称。
|
||||
* 本地语法名称,对应云端的有CLOUD_GRAMMAR
|
||||
*
|
||||
* @return 本地语法名称key。
|
||||
*/
|
||||
+(NSString*)LOCAL_GRAMMAR;
|
||||
|
||||
/*!
|
||||
* 云端语法ID。
|
||||
* 云端编译语法返回的表示,早期版本使用GRAMMAR_ID,仍然兼容,但建议使用新的。
|
||||
*
|
||||
* @return 云端语法ID key。
|
||||
*/
|
||||
+(NSString*)CLOUD_GRAMMAR;
|
||||
|
||||
/*!
|
||||
* 语法类型
|
||||
*
|
||||
* @return 语法类型key
|
||||
*/
|
||||
+(NSString*)GRAMMAR_TYPE;
|
||||
|
||||
/*!
|
||||
* 语法内容。
|
||||
*
|
||||
* @return 语法内容key。
|
||||
*/
|
||||
+(NSString*)GRAMMAR_CONTENT;
|
||||
|
||||
/*!
|
||||
* 字典内容。
|
||||
*
|
||||
* @return 字典内容key。
|
||||
*/
|
||||
+(NSString*)LEXICON_CONTENT;
|
||||
|
||||
/*!
|
||||
* 字典名字。
|
||||
*
|
||||
* @return 字典名字key。
|
||||
*/
|
||||
+(NSString*)LEXICON_NAME;
|
||||
|
||||
/*!
|
||||
* 语法名称列表。
|
||||
*
|
||||
* @return 语法名称列表key。
|
||||
*/
|
||||
+(NSString*)GRAMMAR_LIST;
|
||||
|
||||
/*!
|
||||
* 开放语义协议版本号。
|
||||
* 如需使用请在http://osp.voicecloud.cn/上进行业务配置
|
||||
*
|
||||
* @return 开放语义协议版本号key。
|
||||
*/
|
||||
+(NSString*)NLP_VERSION;
|
||||
|
||||
#pragma mark - 唤醒相关设置key
|
||||
/*!
|
||||
* 唤醒门限值。
|
||||
*
|
||||
* @return 唤醒门限值key。
|
||||
*/
|
||||
+(NSString*)IVW_THRESHOLD;
|
||||
|
||||
/*!
|
||||
* 唤醒服务类型。
|
||||
*
|
||||
* @return 唤醒服务类型key。
|
||||
*/
|
||||
+(NSString*)IVW_SST;
|
||||
|
||||
/*!
|
||||
* 唤醒+识别。
|
||||
*
|
||||
* @return 唤醒+识别key。
|
||||
*/
|
||||
+(NSString*)IVW_ONESHOT;
|
||||
|
||||
/*!
|
||||
* 唤醒工作方式
|
||||
* 1:表示唤醒成功后继续录音,0:表示唤醒成功后停止录音。
|
||||
*
|
||||
* @return 唤醒工作方式key
|
||||
*/
|
||||
+(NSString*)KEEP_ALIVE;
|
||||
|
||||
#pragma mark - 评测相关设置key
|
||||
/*!
|
||||
* 评测类型<br>
|
||||
* 可选值:read_syllable(英文评测不支持):单字;read_word:词语;read_sentence:句子;read_chapter(待开放):篇章。
|
||||
*
|
||||
* @return 评测类型 key
|
||||
*/
|
||||
+(NSString*)ISE_CATEGORY;
|
||||
|
||||
/*!
|
||||
* 评测结果等级<br>
|
||||
* 可选值:complete:完整 ;plain:简单
|
||||
*
|
||||
* @return 评测结果等级 key
|
||||
*/
|
||||
+(NSString*)ISE_RESULT_LEVEL;
|
||||
|
||||
/*!
|
||||
* 评测结果格式
|
||||
* 可选值:xml;plain
|
||||
*
|
||||
* @return 评测结果格式 key
|
||||
*/
|
||||
+(NSString*)ISE_RESULT_TYPE;
|
||||
|
||||
/*!
|
||||
* 评测录音保存路径
|
||||
*
|
||||
* @return 评测录音保存路径key
|
||||
*/
|
||||
+(NSString*) ISE_AUDIO_PATH;
|
||||
|
||||
|
||||
/*!
|
||||
* 朗读跟踪,只对句子和篇章有效<br>
|
||||
* 可选值:enable:开启;disable:关闭。
|
||||
*
|
||||
* @return 朗读跟踪 key
|
||||
*/
|
||||
+(NSString*)ISE_AUTO_TRACKING;
|
||||
|
||||
/*!
|
||||
* 跟踪模式<br>
|
||||
* 可选值:easy:简单;hard:复杂。
|
||||
*
|
||||
* @return 跟踪模式 key
|
||||
*/
|
||||
+(NSString*)ISE_TRACK_TYPE;
|
||||
|
||||
#pragma mark - 语记SDK业务key
|
||||
/**
|
||||
* 本地所有资源
|
||||
*
|
||||
* @return 本地所有资源key
|
||||
*/
|
||||
+ (NSString *)PLUS_LOCAL_ALL;
|
||||
|
||||
/**
|
||||
* 本地合成资源
|
||||
*
|
||||
* @return 本地合成资源key
|
||||
*/
|
||||
+ (NSString *)PLUS_LOCAL_TTS;
|
||||
|
||||
/**
|
||||
* 本地识别资源
|
||||
*
|
||||
* @return 本地识别资源key
|
||||
*/
|
||||
+ (NSString *)PLUS_LOCAL_ASR;
|
||||
|
||||
/**
|
||||
* 本地唤醒资源
|
||||
*
|
||||
* @return 本地唤醒资源key
|
||||
*/
|
||||
+ (NSString *)PLUS_LOCAL_IVW;
|
||||
|
||||
#pragma mark - 身份验证业务key
|
||||
|
||||
/**
|
||||
* auth_id
|
||||
* 用于用户注册和登录、查询、删除等业务时标识用户身份
|
||||
*
|
||||
* @return 用户标识
|
||||
*/
|
||||
+ (NSString*)MFV_AUTH_ID;
|
||||
|
||||
/**
|
||||
* 请求业务类型,可选值:mfv(默认,融合验证),ivp(声纹),ifr(人脸)
|
||||
*
|
||||
* @return 请求业务类型key
|
||||
*/
|
||||
+ (NSString*)MFV_SUB;
|
||||
|
||||
/**
|
||||
* 会话类型,不同sub有不同的sst取值。
|
||||
* ifr:enroll,verify,identify,reenroll,query,delete
|
||||
* ivp:enroll(train),verify,reenroll,query,delete,download
|
||||
*
|
||||
* @return 会话类型key
|
||||
*/
|
||||
+ (NSString*)MFV_SST;
|
||||
|
||||
/**
|
||||
* 融合验证模式,仅在融合验证场景下使用。可选值:sin(单一生物特征数据验证),mix(混合生物特征数据验证),agi(灵活生物特征数据验证)
|
||||
*
|
||||
* @return 融合验证模式key
|
||||
*/
|
||||
+ (NSString*)MFV_VCM;
|
||||
|
||||
/**
|
||||
* 特征场景,用来说明本次验证将涉及的业务。可选值:ivp,ifr,ivp|ifr
|
||||
*
|
||||
* @return 特征场景 key
|
||||
*/
|
||||
+ (NSString*)MFV_SCENES;
|
||||
|
||||
/**
|
||||
* 确认周期(affirmance cycle,单位:s),用户设置的确认超时时间(生命周期),仅在灵活融合验证场景下使用
|
||||
*
|
||||
* @return 确认周期key
|
||||
*/
|
||||
+ (NSString*)MFV_AFC;
|
||||
|
||||
/**
|
||||
* 数据保存路径
|
||||
*
|
||||
* @return 数据保存路径key
|
||||
*/
|
||||
+ (NSString*)MFV_DATA_PATH;
|
||||
|
||||
/**
|
||||
* 训练次数:取值2~9.无默认值,必须明确指定。
|
||||
*
|
||||
* @return 训练次数key
|
||||
*/
|
||||
+ (NSString*)MFV_RGN;
|
||||
|
||||
/**
|
||||
* 声纹确认门限值,验证得分>=tsd验证通过,否则验证失败(该参数目前不支持,作为保留参数。)却只范围:0~100.
|
||||
*
|
||||
* @return 声纹确认门限值key
|
||||
*/
|
||||
+ (NSString*)MFV_TSD;
|
||||
|
||||
/**
|
||||
* 密码文本。从服务端下载,比如数字密码所需要的数字串。
|
||||
*
|
||||
* @return 密码文本key
|
||||
*/
|
||||
+ (NSString*)MFV_PTXT;
|
||||
|
||||
/**
|
||||
* 密码类型。取值:1(文本密码),2(自由说),3(数字密码).
|
||||
*
|
||||
* @return 密码类型key
|
||||
*/
|
||||
+ (NSString*)MFV_PWDT;
|
||||
|
||||
/**
|
||||
* 取消注册。取值:0(不取消,即不生效),1(取消本次注册).
|
||||
*
|
||||
* @return 取消注册key
|
||||
*/
|
||||
+ (NSString*)MFV_FIN;
|
||||
|
||||
/**
|
||||
* 等待超时时间:描述客户端等待结果的超时时间
|
||||
*
|
||||
* @return 等待超时时间:key
|
||||
*/
|
||||
+ (NSString*)MFV_WTT;
|
||||
|
||||
/**
|
||||
* 数据格式
|
||||
* 声纹为音频采样率支持:16000和8000;人脸为图片格式,支持jpg和gif
|
||||
*
|
||||
* @return 数据格式key
|
||||
*/
|
||||
+ (NSString*)MFV_DATA_FORMAT;
|
||||
|
||||
/**
|
||||
* 数据压缩编码
|
||||
* 声纹为;人脸支持raw,不对图片压缩
|
||||
*
|
||||
* @return 数据压缩编码key
|
||||
*/
|
||||
+ (NSString*)MFV_DATA_ENCODING;
|
||||
|
||||
#pragma mark - 人脸业务key
|
||||
|
||||
//1. sub 取值: wfr 用途: 用于区分业务类型,web访问方式中,nginx配置不用使用,但是在结构化日志和染色日志记录中使用。
|
||||
//2. sst 取值: reg、verify、detect、align 用途: 指定本路会话是属于何种性质
|
||||
// + 人脸图像注册(reg):上传图像,验证图像的有效性,然后存储起来,作为数据源。
|
||||
// + 人脸图像验证(verify):通过与指定源图像比较,验证人脸相似性。
|
||||
// + 人脸图像检测(detect):能够检测出不同姿态方位的人脸在图中的位置。
|
||||
// + 人脸图像聚焦(align):在给定人脸框下自动标定出两眼、鼻尖、嘴角的坐标。
|
||||
//3. aue 取值: raw 用途: 图像压缩格式,现在引擎不支持图像压缩,aue只能取值raw
|
||||
//4. pset 取值: 整数 用途: 人脸识别验证阈值,取值可以是负数也可以是整数。
|
||||
//5. skip 取值: true/false 用途: 后台图片处理是否进行过滤。true表示不过滤,false表示过滤
|
||||
//6. gid 取值: *********** 用途: 图像模型id,如:4a6c124ed6b78436ee5aac4563f13eb5
|
||||
//7. appid 取值:用户申请的appid 用途: 验证用户
|
||||
|
||||
|
||||
/** sub 默认值:wfr
|
||||
* 用于区分业务类型,web访问方式中,nginx配置不用使用,但是在结构化日志和染色日志记录中使用。
|
||||
*/
|
||||
+ (NSString*) FACE_SUB;
|
||||
|
||||
/** WFR
|
||||
* sub参数的默认值
|
||||
*/
|
||||
+ (NSString*) FACE_WFR;
|
||||
|
||||
/** sst
|
||||
* 指定本路会话是属于何种性质
|
||||
*/
|
||||
+ (NSString*) FACE_SST;
|
||||
|
||||
/** REG
|
||||
* 人脸图像注册(reg):上传图像,验证图像的有效性,然后存储起来,作为数据源。
|
||||
*/
|
||||
+ (NSString*) FACE_REG;
|
||||
/** VERIFY
|
||||
* 人脸图像验证(verify):通过与指定源图像比较,验证人脸相似性。
|
||||
*/
|
||||
+ (NSString*) FACE_VERIFY;
|
||||
/** DETECT
|
||||
* 人脸图像检测(detect):能够检测出不同姿态方位的人脸在图中的位置。
|
||||
*/
|
||||
+ (NSString*) FACE_DETECT;
|
||||
/** ALIGN
|
||||
* 人脸图像聚焦(align):在给定人脸框下自动标定出两眼、鼻尖、嘴角的坐标。
|
||||
*/
|
||||
+ (NSString*) FACE_ALIGN;
|
||||
|
||||
/** ATTR
|
||||
* 面部属性识别(attr):对面部属性进行识别:例如秃顶、刘海、大嘴、模糊、眼镜等。
|
||||
*/
|
||||
+ (NSString*) FACE_ATTR;
|
||||
|
||||
|
||||
/** AUE
|
||||
* 图像压缩格式,现在引擎不支持图像压缩,aue只能取值raw
|
||||
*/
|
||||
+ (NSString*) FACE_AUE;
|
||||
|
||||
/** RAW
|
||||
* AUE参数的值
|
||||
*/
|
||||
+ (NSString*) FACE_RAW;
|
||||
|
||||
/** PSET
|
||||
* 人脸识别验证阈值,取值可以是负数也可以是整数。
|
||||
*/
|
||||
+ (NSString*) FACE_PSET;
|
||||
|
||||
/** SKIP
|
||||
* 后台图片处理是否进行过滤。true表示不过滤,false表示过滤,传入字符串@“true”或@“false”
|
||||
*/
|
||||
+ (NSString*) FACE_SKIP;
|
||||
|
||||
/** GID
|
||||
* 图像模型id,如:4a6c124ed6b78436ee5aac4563f13eb5
|
||||
*/
|
||||
+ (NSString*) FACE_GID;
|
||||
|
||||
/**
|
||||
* auth_id
|
||||
* 用于用户注册和登录、查询、删除等业务时标识用户身份
|
||||
*
|
||||
* @return 用户标识
|
||||
*/
|
||||
+ (NSString*)FACE_AUTH_ID;
|
||||
|
||||
/** DVC
|
||||
* 用户设备编号,用于验证用户
|
||||
*/
|
||||
+ (NSString*) FACE_DVC;
|
||||
|
||||
@end
|
58
src/ios/iflyMSC.framework/Headers/IFlySpeechError.h
Normal file
58
src/ios/iflyMSC.framework/Headers/IFlySpeechError.h
Normal file
@ -0,0 +1,58 @@
|
||||
//
|
||||
// IFlySpeechError.h
|
||||
// MSC
|
||||
//
|
||||
// Created by iflytek on 13-3-19.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef __IFlySpeechError__
|
||||
#define __IFlySpeechError__
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 错误描述类
|
||||
*/
|
||||
@interface IFlySpeechError : NSObject
|
||||
|
||||
/*!
|
||||
* 错误码
|
||||
*/
|
||||
@property(nonatomic,assign) int errorCode;
|
||||
|
||||
/*!
|
||||
* 错误码类
|
||||
*/
|
||||
@property(nonatomic,assign) int errorType;
|
||||
|
||||
/*!
|
||||
* 错误描述
|
||||
*/
|
||||
@property(nonatomic,retain) NSString* errorDesc;
|
||||
|
||||
/*!
|
||||
* 初始化
|
||||
*
|
||||
* @param errorCode -[in] 错误码
|
||||
*
|
||||
* @return IFlySpeechError对象
|
||||
*/
|
||||
+ (instancetype) initWithError:(int) errorCode;
|
||||
|
||||
/*!
|
||||
* 获取错误码
|
||||
*
|
||||
* @return 错误码
|
||||
*/
|
||||
-(int) errorCode;
|
||||
|
||||
/*!
|
||||
* 获取错误描述
|
||||
*
|
||||
* @return 错误描述
|
||||
*/
|
||||
- (NSString *) errorDesc;
|
||||
|
||||
@end
|
||||
#endif
|
78
src/ios/iflyMSC.framework/Headers/IFlySpeechEvaluator.h
Normal file
78
src/ios/iflyMSC.framework/Headers/IFlySpeechEvaluator.h
Normal file
@ -0,0 +1,78 @@
|
||||
//
|
||||
// IFlySpeechEvaluator.h
|
||||
// msc
|
||||
//
|
||||
// Created by jianzhang on 14-1-13
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IFlySpeechEvaluatorDelegate.h"
|
||||
|
||||
/*!
|
||||
* 语音评测类
|
||||
*/
|
||||
@interface IFlySpeechEvaluator : NSObject <IFlySpeechEvaluatorDelegate>
|
||||
|
||||
/*!
|
||||
* 设置委托对象
|
||||
*/
|
||||
@property (assign) id <IFlySpeechEvaluatorDelegate> delegate;
|
||||
|
||||
/*!
|
||||
* 返回评测对象的单例
|
||||
*
|
||||
* @return 别对象的单例
|
||||
*/
|
||||
+ (instancetype)sharedInstance;
|
||||
|
||||
/*!
|
||||
* 销毁评测对象。
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO。
|
||||
*/
|
||||
- (BOOL)destroy;
|
||||
|
||||
/*!
|
||||
* 设置评测引擎的参数
|
||||
*
|
||||
* @param value 评测引擎参数值
|
||||
* @param key 评测引擎参数
|
||||
*
|
||||
* @return 设置的参数和取值正确返回YES,失败返回NO
|
||||
*/
|
||||
- (BOOL)setParameter:(NSString *)value forKey:(NSString *)key;
|
||||
|
||||
|
||||
/*!
|
||||
* 获得评测引擎的参数
|
||||
*
|
||||
* @param key 评测引擎参数
|
||||
*
|
||||
* @return key对应的参数值
|
||||
*/
|
||||
- (NSString*)parameterForKey:(NSString *)key;
|
||||
|
||||
/*!
|
||||
* 开始评测
|
||||
* 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错
|
||||
*
|
||||
* @param data 评测的试题
|
||||
* @param params 评测的参数
|
||||
*/
|
||||
- (void)startListening:(NSData *)data params:(NSString *)params;
|
||||
|
||||
/*!
|
||||
* 停止录音
|
||||
* 调用此函数会停止录音,并开始进行语音识别
|
||||
*/
|
||||
- (void)stopListening;
|
||||
|
||||
/*!
|
||||
* 取消本次会话
|
||||
*/
|
||||
- (void)cancel;
|
||||
|
||||
@end
|
||||
|
@ -0,0 +1,66 @@
|
||||
//
|
||||
// IFlySpeechEvaluatorDelegate.h
|
||||
// msc
|
||||
//
|
||||
// Created by admin on 13-6-19.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/*!
|
||||
* 评测协议
|
||||
*/
|
||||
@protocol IFlySpeechEvaluatorDelegate <NSObject>
|
||||
|
||||
/*!
|
||||
* 音量和数据回调
|
||||
*
|
||||
* @param volume 音量
|
||||
* @param buffer 音频数据
|
||||
*/
|
||||
- (void)onVolumeChanged:(int)volume buffer:(NSData *)buffer;
|
||||
|
||||
/*!
|
||||
* 开始录音回调
|
||||
* 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。如果发生错误则回调onError:函数
|
||||
*/
|
||||
- (void)onBeginOfSpeech;
|
||||
|
||||
/*!
|
||||
* 停止录音回调
|
||||
* 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。
|
||||
* 如果发生错误则回调onError:函数
|
||||
*/
|
||||
- (void)onEndOfSpeech;
|
||||
|
||||
/*!
|
||||
* 正在取消
|
||||
*/
|
||||
- (void)onCancel;
|
||||
|
||||
/*!
|
||||
* 评测错误回调
|
||||
* 在进行语音评测过程中的任何时刻都有可能回调此函数,你可以根据errorCode进行相应的处理.
|
||||
* 当errorCode没有错误时,表示此次会话正常结束,否则,表示此次会话有错误发生。特别的当调用
|
||||
* `cancel`函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函
|
||||
* 数之前如果重新调用了`startListenging`函数则会报错误。
|
||||
*
|
||||
* @param errorCode 错误描述类
|
||||
*/
|
||||
- (void)onError:(IFlySpeechError *)errorCode;
|
||||
|
||||
/*!
|
||||
* 评测结果回调
|
||||
* 在评测过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。
|
||||
*
|
||||
* @param results -[out] 评测结果。
|
||||
* @param isLast -[out] 是否最后一条结果
|
||||
*/
|
||||
- (void)onResults:(NSData *)results isLast:(BOOL)isLast;
|
||||
|
||||
@end
|
||||
|
171
src/ios/iflyMSC.framework/Headers/IFlySpeechEvent.h
Normal file
171
src/ios/iflyMSC.framework/Headers/IFlySpeechEvent.h
Normal file
@ -0,0 +1,171 @@
|
||||
//
|
||||
// IFlySpeechEvent.h
|
||||
// MSCDemo
|
||||
//
|
||||
// Created by admin on 14-8-12.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 事件类型
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger,IFlySpeechEventType){
|
||||
/*!
|
||||
* 网络状态消息
|
||||
* 在消息到达时,可通过onEvent的第2个参数arg1,获取当前网络连接状态值
|
||||
*/
|
||||
IFlySpeechEventTypeNetPref = 10001,
|
||||
/**
|
||||
* 转写音频文件消息
|
||||
* 在录音模式下,成功创建音频文件时返回。可通过onEvent
|
||||
* 第4个参数data 指定Key为[IFlySpeechConstant IST_AUDIO_PATH],获取音频文件绝对路径.
|
||||
* 或通过[IFlySpeechTranscripter getParameter:[IFlySpeechConstant IST_AUDIO_PATH]],
|
||||
* 获取音频文件绝对路径.
|
||||
*/
|
||||
IFlySpeechEventTypeISTAudioFile = 10004,
|
||||
/**
|
||||
* 转写已上传字节消息
|
||||
* 在消息到达时,通过onEvent
|
||||
* 的第二个参数arg1,获取已确认上传到服务器的字节数.
|
||||
* 若当前音频源为非写音频模式,还可通过onEvent
|
||||
* 的第三个参数arg2,获取当前所有音频的字节大小.录音模式时,由于所有音频字节大小会变。
|
||||
* 当停止音频输入后(等待录音时间超时
|
||||
* [IFlySpeechConstant SPEECH_TIMEOUT]
|
||||
* ,或调用[IFlySpeechTranscripter stopTranscripting]),
|
||||
* 且服务器收到所有音频时,第四个参数data,将包含完成标记的布尔值(true),可通过data调用
|
||||
* 指定KEY为KCIFlySpeechEventKeyISTUploadComplete获取。
|
||||
* 此消息可能多次返回.
|
||||
*/
|
||||
IFlySpeechEventTypeISTUploadBytes = 10006,
|
||||
|
||||
/**
|
||||
* 转写缓存剩余
|
||||
* 此消息仅在音频源为-1时需要关注
|
||||
* 在调用[IFlySpeechTranscripter writeAudio]写音频时,应该关注此事件。
|
||||
* 此事件在调用写音频接口、及音频最后被写入底库库时分别回调一次。当事件回调时,通过onEvent
|
||||
* 的第二个参数arg1,获取当前剩余的缓存大小,当缓存小于要写入的音频时,应该先暂停写音频数据,直到下次缓存大小大于要写入的音频时.
|
||||
* 最大缓存为128KByte。
|
||||
*/
|
||||
IFlySpeechEventTypeISTCacheLeft = 10007,
|
||||
|
||||
/**
|
||||
* 转写结果等待时间消息
|
||||
* 在消息到达时,通过 onEvent
|
||||
* 的第二个参数arg1,获取当前结果需要的时间.
|
||||
* 此消息可能多次返回,返回时间不定,且不一定会返回.
|
||||
*/
|
||||
IFlySpeechEventTypeISTResultTime= 10008,
|
||||
|
||||
/**
|
||||
* 转写转写音频同步ID消息
|
||||
* 在消息到达时,通过 onEvent
|
||||
* 的第二个参数arg1,获取当前写音频同步ID.
|
||||
* 此消息可能多次返回.
|
||||
*/
|
||||
IFlySpeechEventTypeISTSyncID= 10009,
|
||||
|
||||
/**
|
||||
* 会话开始消息
|
||||
* 在会话开始成功后返回
|
||||
*/
|
||||
IFlySpeechEventTypeSessionBegin = 10010,
|
||||
|
||||
/**
|
||||
* 会话结束消息
|
||||
* 在会话结束前返回
|
||||
*/
|
||||
IFlySpeechEventTypeSessionEnd = 10011,
|
||||
|
||||
/**
|
||||
* 音量消息,在得到音量时抛出,暂时只有身份验证的声纹业务用到
|
||||
*/
|
||||
IFlySpeechEventTypeVolume = 10012,
|
||||
|
||||
/**
|
||||
* VAD后端点消息,在检测到VAD后端点时抛出,暂时只有身份验证的声纹业务用到
|
||||
*/
|
||||
IFlySpeechEventTypeVadEOS = 10013,
|
||||
|
||||
/*!
|
||||
* 服务端会话id
|
||||
* 在消息到达时,可通过onEvent的第4个参数data(字典类型),
|
||||
* 指定key KCIFlySpeechEventKeySessionID,获取服务端会话id.
|
||||
*/
|
||||
IFlySpeechEventTypeSessionID = 20001,
|
||||
|
||||
/*!
|
||||
* TTS合成数据消息
|
||||
* -(void)onEvent:(int)eventType arg0:(int)arg0 arg1:(int)arg1 data:(NSData *)eventData
|
||||
* 其中eventData中包含数据
|
||||
*
|
||||
*/
|
||||
IFlySpeechEventTypeTTSBuffer = 21001,
|
||||
|
||||
/*!
|
||||
* 通知cancel方法被调用的回调
|
||||
*
|
||||
*/
|
||||
IFlySpeechEventTypeTTSCancel = 21002,
|
||||
|
||||
/*!
|
||||
* IVW onshot 听写 or 识别结果
|
||||
* 在消息到达时,第2个参数arg1包含是否为最后一个结果:1为是,0为否;
|
||||
* 第4个参数data中包含数据,通过指定KEY为KCIFlySpeechEventKeyIVWResult获取.
|
||||
*/
|
||||
IFlySpeechEventTypeIVWResult = 22001,
|
||||
|
||||
/*!
|
||||
* 开始处理录音数据
|
||||
*
|
||||
*/
|
||||
IFlySpeechEventTypeSpeechStart= 22002,
|
||||
|
||||
/*!
|
||||
* 录音停止
|
||||
*
|
||||
*/
|
||||
IFlySpeechEventTypeRecordStop= 22003,
|
||||
|
||||
/*!
|
||||
* 服务端音频url
|
||||
* 在消息到达时,
|
||||
* 第4个参数data,包含数据,通过
|
||||
* 指定KEY为KCIFlySpeechEventKeyAudioUrl获取.
|
||||
*/
|
||||
IFlySpeechEventTypeAudioUrl = 23001,
|
||||
|
||||
/*!
|
||||
* 变声数据结果返回
|
||||
*
|
||||
* 设置voice_change参数获取结果.
|
||||
*/
|
||||
IFlySpeechEventTypeVoiceChangeResult = 24001
|
||||
|
||||
};
|
||||
|
||||
#pragma mark - keys for event data
|
||||
|
||||
/**
|
||||
* 转写是否已上传完标记key
|
||||
*/
|
||||
extern NSString* const KCIFlySpeechEventKeyISTUploadComplete;
|
||||
|
||||
/**
|
||||
* 服务端会话key
|
||||
*/
|
||||
extern NSString* const KCIFlySpeechEventKeySessionID;
|
||||
/**
|
||||
* TTS取音频数据key
|
||||
*/
|
||||
extern NSString* const KCIFlySpeechEventKeyTTSBuffer;
|
||||
/**
|
||||
* IVW oneshot 听写 or 识别结果 key
|
||||
*/
|
||||
extern NSString* const KCIFlySpeechEventKeyIVWResult;
|
||||
/**
|
||||
* 服务端音频url key
|
||||
*/
|
||||
extern NSString* const KCIFlySpeechEventKeyAudioUrl;
|
||||
|
174
src/ios/iflyMSC.framework/Headers/IFlySpeechRecognizer.h
Normal file
174
src/ios/iflyMSC.framework/Headers/IFlySpeechRecognizer.h
Normal file
@ -0,0 +1,174 @@
|
||||
//
|
||||
// IFlySpeechRecognizer.h
|
||||
// MSC
|
||||
//
|
||||
// Created by iflytek on 13-3-19.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "IFlySpeechRecognizerDelegate.h"
|
||||
|
||||
#define IFLY_AUDIO_SOURCE_MIC @"1"
|
||||
#define IFLY_AUDIO_SOURCE_STREAM @"-1"
|
||||
|
||||
/*!
|
||||
* 语音识别类
|
||||
* 此类现在设计为单例,你在使用中只需要创建此对象,不能调用release/dealloc函数去释放此对象。所有关于语音识别的操作都在此类中。
|
||||
*/
|
||||
@interface IFlySpeechRecognizer : NSObject<IFlySpeechRecognizerDelegate>
|
||||
|
||||
/** 设置委托对象 */
|
||||
@property(nonatomic,assign) id<IFlySpeechRecognizerDelegate> delegate ;
|
||||
|
||||
/*!
|
||||
* 返回识别对象的单例
|
||||
*
|
||||
* @return 识别对象的单例
|
||||
*/
|
||||
+ (instancetype) sharedInstance;
|
||||
|
||||
/*!
|
||||
* 销毁识别对象。
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
- (BOOL) destroy;
|
||||
|
||||
/*
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | 参数 | 描述
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | domain |应用的领域: 取值为:iat、search、video、poi、music、asr;
|
||||
* | | iat:普通文本听写;
|
||||
* | | search:热词搜索;
|
||||
* | | video:视频音乐搜索;
|
||||
* | | asr:关键词识别;
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | vad_bos |前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;
|
||||
* | | engine指定iat识别默认值为5000;
|
||||
* | | 其他情况默认值为 4000,范围 0-10000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | vad_eos |后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,
|
||||
* | | 自动停止录音;单位:ms;
|
||||
* | | sms 识别默认值为 1800;
|
||||
* | | 其他默认值为 700,范围 0-10000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | sample_rate |采样率:目前支持的采样率设置有 16000 和 8000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | asr_ptt |标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | result_type |返回结果的数据格式: 可设置为json,xml,plain,默认为json。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | grammarID |识别的语法id: 只针对 domain 设置为”asr”的应用。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | asr_audio_path|音频文件名: 设置此参数后,将会自动保存识别的录音文件。
|
||||
* | | 路径为Documents/(指定值)。
|
||||
* | | 不设置或者设置为nil,则不保存音频。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | params |扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
|
||||
/*!
|
||||
* 设置识别引擎的参数
|
||||
* 识别的引擎参数(key)取值如下:
|
||||
* <table>
|
||||
* <thead>
|
||||
* <tr><th>*参数</th><th><em>描述</em></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>domain</td><td>应用的领域: 取值为:iat、search、video、poi、music、asr;<br/>iat:普通文本听写;<br/>search:热词搜索;<br/>video:视频音乐搜索;<br/>video:视频音乐搜索;<br/>asr:关键词识别;</td></tr>
|
||||
* <tr><td>vad_bos</td><td>前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br/>engine指定iat识别默认值为5000;<br/>其他情况默认值为 4000,范围 0-10000。</td></tr>
|
||||
* <tr><td>vad_eos</td><td>后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,<br/>自动停止录音;单位:ms;<br/>sms 识别默认值为 1800;<br/>其他默认值为 700,范围 0-10000。</td></tr>
|
||||
* <tr><td>sample_rate</td><td>采样率:目前支持的采样率设置有 16000 和 8000。</td></tr>
|
||||
* <tr><td>asr_ptt</td><td>标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。</td></tr>
|
||||
* <tr><td>result_type</td><td>返回结果的数据格式: 可设置为json,xml,plain,默认为json。</td></tr>
|
||||
* <tr><td>grammarID</td><td>识别的语法id: 只针对 domain 设置为”asr”的应用。</td></tr>
|
||||
* <tr><td>asr_audio_path</td><td>音频文件名: 设置此参数后,将会自动保存识别的录音文件。<br/> 路径为Documents/(指定值)。<br/>不设置或者设置为nil,则不保存音频。</td></tr>
|
||||
* <tr><td>params</td><td>扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
* @param value 参数对应的取值
|
||||
* @param key 识别引擎参数
|
||||
*
|
||||
* @return 成功返回YES;失败返回NO
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/*!
|
||||
* 获取识别引擎参数
|
||||
*
|
||||
* @param key 参数key
|
||||
*
|
||||
* @return 参数值
|
||||
*/
|
||||
-(NSString*) parameterForKey:(NSString *)key;
|
||||
|
||||
/*!
|
||||
* 开始识别
|
||||
* 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错。若有需要多次回话,
|
||||
* 请在onError回调返回后请求下一路回话。
|
||||
*
|
||||
* @return 成功返回YES;失败返回NO
|
||||
*/
|
||||
- (BOOL) startListening;
|
||||
|
||||
/*!
|
||||
* 停止录音
|
||||
* 调用此函数会停止录音,并开始进行语音识别
|
||||
*/
|
||||
- (void) stopListening;
|
||||
|
||||
/*!
|
||||
* 取消本次会话
|
||||
*/
|
||||
- (void) cancel;
|
||||
|
||||
/*!
|
||||
* 上传语法
|
||||
*
|
||||
* @param completionHandler 上传语法完成回调
|
||||
* @param grammarType 语法类型
|
||||
* @param grammarContent 语法内容
|
||||
*
|
||||
* @return 错误码
|
||||
*/
|
||||
- (int) buildGrammarCompletionHandler:(IFlyOnBuildFinishCompletionHandler)completionHandler
|
||||
grammarType:(NSString *)grammarType
|
||||
grammarContent:(NSString *)grammarContent;
|
||||
|
||||
/** 是否正在识别
|
||||
*/
|
||||
@property (nonatomic, readonly) BOOL isListening;
|
||||
|
||||
@end
|
||||
|
||||
/*!
|
||||
* 音频流识别
|
||||
* 音频流识别可以将文件分段写入
|
||||
*/
|
||||
@interface IFlySpeechRecognizer(IFlyStreamRecognizer)
|
||||
|
||||
/*!
|
||||
* 写入音频流
|
||||
* 此方法的使用示例如下:
|
||||
* <pre><code>[_iFlySpeechRecognizer setParameter:@"audio_source" value:@"-1"];
|
||||
* [_iFlySpeechRecognizer startListening];
|
||||
* [_iFlySpeechRecognizer writeAudio:audioData1];
|
||||
* [_iFlySpeechRecognizer writeAudio:audioData2];
|
||||
* ...
|
||||
* [_iFlySpeechRecognizer stopListening];
|
||||
* </code></pre>
|
||||
*
|
||||
* @param audioData 音频数据
|
||||
*
|
||||
* @return 写入成功返回YES,写入失败返回NO
|
||||
*/
|
||||
- (BOOL) writeAudio:(NSData *) audioData;
|
||||
|
||||
@end
|
||||
|
112
src/ios/iflyMSC.framework/Headers/IFlySpeechRecognizerDelegate.h
Normal file
112
src/ios/iflyMSC.framework/Headers/IFlySpeechRecognizerDelegate.h
Normal file
@ -0,0 +1,112 @@
|
||||
//
|
||||
// IFlySpeechRecognizerDelegate.h
|
||||
// MSC
|
||||
//
|
||||
// Created by ypzhao on 13-3-27.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/*!
|
||||
* 构建语法结束回调
|
||||
*
|
||||
* @param grammarId 语法id
|
||||
* @param error 错误描述
|
||||
*/
|
||||
typedef void(^IFlyOnBuildFinishCompletionHandler)(NSString* grammarId,IFlySpeechError * error);
|
||||
|
||||
|
||||
/*!
|
||||
* 语音识别协议
|
||||
* 在使用语音识别时,需要实现这个协议中的方法.
|
||||
*/
|
||||
@protocol IFlySpeechRecognizerDelegate <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
/*!
|
||||
* 识别结果回调
|
||||
* 在进行语音识别过程中的任何时刻都有可能回调此函数,你可以根据errorCode进行相应的处理,
|
||||
* 当errorCode没有错误时,表示此次会话正常结束;否则,表示此次会话有错误发生。特别的当调用
|
||||
* `cancel`函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函数
|
||||
* 之前如果重新调用了`startListenging`函数则会报错误。
|
||||
*
|
||||
* @param errorCode 错误描述
|
||||
*/
|
||||
- (void) onError:(IFlySpeechError *) errorCode;
|
||||
|
||||
/*!
|
||||
* 识别结果回调
|
||||
* 在识别过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。
|
||||
* 使用results的示例如下:
|
||||
* <pre><code>
|
||||
* - (void) onResults:(NSArray *) results{
|
||||
* NSMutableString *result = [[NSMutableString alloc] init];
|
||||
* NSDictionary *dic = [results objectAtIndex:0];
|
||||
* for (NSString *key in dic){
|
||||
* [result appendFormat:@"%@",key];//合并结果
|
||||
* }
|
||||
* }
|
||||
* </code></pre>
|
||||
*
|
||||
* @param results -[out] 识别结果,NSArray的第一个元素为NSDictionary,NSDictionary的key为识别结果,sc为识别结果的置信度。
|
||||
* @param isLast -[out] 是否最后一个结果
|
||||
*/
|
||||
- (void) onResults:(NSArray *) results isLast:(BOOL)isLast;
|
||||
|
||||
@optional
|
||||
|
||||
/*!
|
||||
* 音量变化回调
|
||||
* 在录音过程中,回调音频的音量。
|
||||
*
|
||||
* @param volume -[out] 音量,范围从0-30
|
||||
*/
|
||||
- (void) onVolumeChanged: (int)volume;
|
||||
|
||||
/*!
|
||||
* 开始录音回调
|
||||
* 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。
|
||||
* 如果发生错误则回调onError:函数
|
||||
*/
|
||||
- (void) onBeginOfSpeech;
|
||||
|
||||
/*!
|
||||
* 停止录音回调
|
||||
* 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。
|
||||
* 如果发生错误则回调onError:函数
|
||||
*/
|
||||
- (void) onEndOfSpeech;
|
||||
|
||||
/*!
|
||||
* 取消识别回调
|
||||
* 当调用了`cancel`函数之后,会回调此函数,在调用了cancel函数和回调onError之前会有一个
|
||||
* 短暂时间,您可以在此函数中实现对这段时间的界面显示。
|
||||
*/
|
||||
- (void) onCancel;
|
||||
|
||||
#ifdef _EDUCATION_
|
||||
/**
|
||||
* 返回音频Key
|
||||
*
|
||||
* @param key 音频Key
|
||||
*/
|
||||
- (void) getAudioKey:(NSString *)key;
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* 扩展事件回调
|
||||
* 根据事件类型返回额外的数据
|
||||
*
|
||||
* @param eventType 事件类型,具体参见IFlySpeechEventType的IFlySpeechEventTypeVoiceChangeResult枚举。
|
||||
* @param arg0 arg0
|
||||
* @param arg1 arg1
|
||||
* @param eventData 事件数据
|
||||
*/
|
||||
- (void) onEvent:(int)eventType arg0:(int)arg0 arg1:(int)arg1 data:(NSData *)eventData;
|
||||
|
||||
@end
|
128
src/ios/iflyMSC.framework/Headers/IFlySpeechSynthesizer.h
Normal file
128
src/ios/iflyMSC.framework/Headers/IFlySpeechSynthesizer.h
Normal file
@ -0,0 +1,128 @@
|
||||
//
|
||||
// IFlySpeechSynthesizer.h
|
||||
// MSC
|
||||
//
|
||||
// Created by 侯效林 on 16-4-22.
|
||||
// Copyright (c) 2016年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IFlySpeechSynthesizerDelegate.h"
|
||||
|
||||
|
||||
/*!
|
||||
* 语音合成
|
||||
*/
|
||||
@interface IFlySpeechSynthesizer : NSObject
|
||||
|
||||
/*!
|
||||
* 设置识别的委托对象
|
||||
*/
|
||||
@property(nonatomic,assign) id<IFlySpeechSynthesizerDelegate> delegate;
|
||||
|
||||
/*!
|
||||
* 返回合成对象的单例
|
||||
*
|
||||
* @return 合成对象
|
||||
*/
|
||||
+ (instancetype) sharedInstance;
|
||||
|
||||
/*!
|
||||
* 销毁合成对象。
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO.
|
||||
*/
|
||||
+ (BOOL) destroy;
|
||||
|
||||
/*
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | 参数 | 描述
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | speed |合成语速,取值范围 0~100
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | volume |合成的音量,取值范围 0~100
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | voice_name |默认为”xiaoyan”;可以设置的参数列表可参考个性化发音人列表
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | sample_rate |采样率:目前支持的采样率设置有 16000 和 8000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | tts_audio_path|音频文件名 设置此参数后,将会自动保存合成的音频文件。
|
||||
* | |路径为Documents/(指定值)。不设置或者设置为nil,则不保存音频。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | params |扩展参数: 对于一些特殊的参数可在此设置。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
|
||||
/*!
|
||||
* 设置合成参数
|
||||
* <table>
|
||||
* <thead>
|
||||
* <tr><th>参数</th><th><em>描述</em></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>speed</td><td>合成语速,取值范围 0~100</td></tr>
|
||||
* <tr><td>volume</td><td>合成的音量,取值范围 0~100</td></tr>
|
||||
* <tr><td>voice_name</td><td>默认为”xiaoyan”;可以设置的参数列表可参考个性化发音人列表</td></tr>
|
||||
* <tr><td>sample_rate</td><td>采样率:目前支持的采样率设置有 16000 和 8000。</td></tr>
|
||||
* <tr><td>tts_audio_path</td><td>音频文件名 设置此参数后,将会自动保存合成的音频文件。<br/>路径为Documents/(指定值)。不设置或者设置为nil,则不保存音频。</td></tr>
|
||||
* <tr><td>params</td><td>扩展参数: 对于一些特殊的参数可在此设置。</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* @param value 参数取值
|
||||
* @param key 合成参数
|
||||
*
|
||||
* @return 设置成功返回YES,失败返回NO
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/*!
|
||||
* 获取合成参数
|
||||
*
|
||||
* @param key 参数key
|
||||
*
|
||||
* @return 参数值
|
||||
*/
|
||||
-(NSString*) parameterForKey:(NSString *)key;
|
||||
|
||||
/*!
|
||||
* 开始合成(播放)
|
||||
* 调用此函数进行合成,如果发生错误会回调错误`onCompleted`
|
||||
*
|
||||
* @param text 合成的文本,最大的字节数为1k
|
||||
*/
|
||||
- (void) startSpeaking:(NSString *)text;
|
||||
|
||||
/*!
|
||||
* 开始合成(不播放)
|
||||
* 调用此函数进行合成,如果发生错误会回调错误`onCompleted`
|
||||
*
|
||||
* @param text 合成的文本,最大的字节数为1k
|
||||
* @param uri 合成后,保存再本地的音频路径
|
||||
*/
|
||||
-(void)synthesize:(NSString *)text toUri:(NSString*)uri;
|
||||
|
||||
/*!
|
||||
* 暂停播放
|
||||
* 暂停播放之后,合成不会暂停,仍会继续,如果发生错误则会回调错误`onCompleted`
|
||||
*/
|
||||
- (void) pauseSpeaking;
|
||||
|
||||
/*!
|
||||
* 恢复播放
|
||||
*/
|
||||
- (void) resumeSpeaking;
|
||||
|
||||
/*!
|
||||
* 停止播放并停止合成
|
||||
*/
|
||||
- (void) stopSpeaking;
|
||||
|
||||
/*!
|
||||
* 是否正在播放
|
||||
*/
|
||||
@property (nonatomic, readonly) BOOL isSpeaking;
|
||||
|
||||
@end
|
@ -0,0 +1,80 @@
|
||||
//
|
||||
// IFlySpeechSynthesizerDelegate.h
|
||||
// MSC
|
||||
//
|
||||
// Created by ypzhao on 13-3-20.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IFlySpeechEvent.h"
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/**
|
||||
* 语音合成回调
|
||||
*/
|
||||
@protocol IFlySpeechSynthesizerDelegate <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
/**
|
||||
* 结束回调
|
||||
* 当整个合成结束之后会回调此函数
|
||||
*
|
||||
* @param error 错误码
|
||||
*/
|
||||
- (void) onCompleted:(IFlySpeechError*) error;
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
* 开始合成回调
|
||||
*/
|
||||
- (void) onSpeakBegin;
|
||||
|
||||
/**
|
||||
* 缓冲进度回调
|
||||
*
|
||||
* @param progress 缓冲进度,0-100
|
||||
* @param msg 附件信息,此版本为nil
|
||||
*/
|
||||
- (void) onBufferProgress:(int) progress message:(NSString *)msg;
|
||||
|
||||
/**
|
||||
* 播放进度回调
|
||||
*
|
||||
* @param progress 当前播放进度,0-100
|
||||
* @param beginPos 当前播放文本的起始位置,0-100
|
||||
* @param endPos 当前播放文本的结束位置,0-100
|
||||
*/
|
||||
- (void) onSpeakProgress:(int) progress beginPos:(int)beginPos endPos:(int)endPos;
|
||||
|
||||
/**
|
||||
* 暂停播放回调
|
||||
*/
|
||||
- (void) onSpeakPaused;
|
||||
|
||||
/**
|
||||
* 恢复播放回调
|
||||
*/
|
||||
- (void) onSpeakResumed;
|
||||
|
||||
/**
|
||||
* 正在取消回调
|
||||
* 当调用`cancel`之后会回调此函数
|
||||
*/
|
||||
- (void) onSpeakCancel;
|
||||
|
||||
/**
|
||||
* 扩展事件回调
|
||||
* 根据事件类型返回额外的数据
|
||||
*
|
||||
* @param eventType 事件类型,具体参见IFlySpeechEventType枚举。目前只支持EVENT_TTS_BUFFER也就是实时返回合成音频。
|
||||
* @param arg0 arg0
|
||||
* @param arg1 arg1
|
||||
* @param eventData 事件数据
|
||||
*/
|
||||
- (void) onEvent:(int)eventType arg0:(int)arg0 arg1:(int)arg1 data:(NSData *)eventData;
|
||||
|
||||
@end
|
134
src/ios/iflyMSC.framework/Headers/IFlySpeechUnderstander.h
Normal file
134
src/ios/iflyMSC.framework/Headers/IFlySpeechUnderstander.h
Normal file
@ -0,0 +1,134 @@
|
||||
//
|
||||
// IFlySpeechUnderstander.h
|
||||
// MSC
|
||||
//
|
||||
// Created by iflytek on 2014-03-12.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlySpeechError;
|
||||
@protocol IFlySpeechRecognizerDelegate;
|
||||
|
||||
/*!
|
||||
* 语义理解接口
|
||||
*/
|
||||
@interface IFlySpeechUnderstander : NSObject
|
||||
|
||||
/*!
|
||||
* 是否正在语义理解
|
||||
*/
|
||||
@property (readonly) BOOL isUnderstanding;
|
||||
|
||||
/*!
|
||||
* 设置委托对象
|
||||
*/
|
||||
@property(nonatomic,retain) id<IFlySpeechRecognizerDelegate> delegate ;
|
||||
|
||||
/*!
|
||||
* 创建语义理解对象的单例
|
||||
*
|
||||
* @return 语义理解对象
|
||||
*/
|
||||
+(instancetype) sharedInstance;
|
||||
|
||||
/*!
|
||||
* 开始义理解
|
||||
* 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错。若有需要多次回话,请在onError回调返回后请求下一路回话。
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
- (BOOL) startListening;
|
||||
|
||||
/*!
|
||||
* 停止录音
|
||||
* 调用此函数会停止录音,并开始进行语义理解
|
||||
*/
|
||||
- (void) stopListening;
|
||||
|
||||
/*!
|
||||
* 取消本次会话
|
||||
*/
|
||||
- (void) cancel;
|
||||
|
||||
/*
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | 参数 | 描述
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | domain |应用的领域: 取值为:iat、search、video、poi、music、asr;
|
||||
* | | iat:普通文本听写;
|
||||
* | | search:热词搜索;
|
||||
* | | video:视频音乐搜索;
|
||||
* | | asr:关键词识别;
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | vad_bos |前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;
|
||||
* | | engine指定iat识别默认值为5000;
|
||||
* | | 其他情况默认值为 4000,范围 0-10000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | vad_eos |后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,
|
||||
* | | 自动停止录音;单位:ms;
|
||||
* | | sms 识别默认值为 1800;
|
||||
* | | 其他默认值为 700,范围 0-10000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | sample_rate |采样率:目前支持的采样率设置有 16000 和 8000。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | asr_ptt |标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | result_type |返回结果的数据格式: 可设置为json,xml,plain,默认为json。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | grammarID |识别的语法id: 只针对 domain 设置为”asr”的应用。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | asr_audio_path|音频文件名: 设置此参数后,将会自动保存识别的录音文件。
|
||||
* | | 路径为Documents/(指定值)。
|
||||
* | | 不设置或者设置为nil,则不保存音频。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
* | params |扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。
|
||||
* | ------------- |-----------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
|
||||
/*!
|
||||
* 设置语义理解引擎的参数
|
||||
* 语义理解的引擎参数(key)取值如下:
|
||||
* <table>
|
||||
* <thead>
|
||||
* <tr><th>*参数</th><th><em>描述</em></th>
|
||||
* </tr>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <tr><td>domain</td><td>应用的领域: 取值为:iat、search、video、poi、music、asr;<br/>iat:普通文本听写;<br/>search:热词搜索;<br/>video:视频音乐搜索;<br/>video:视频音乐搜索;<br/>asr:关键词识别;</td></tr>
|
||||
* <tr><td>vad_bos</td><td>前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br/>engine指定iat识别默认值为5000;<br/>其他情况默认值为 4000,范围 0-10000。</td></tr>
|
||||
* <tr><td>vad_eos</td><td>后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,<br/>自动停止录音;单位:ms;<br/>sms 识别默认值为 1800;<br/>其他默认值为 700,范围 0-10000。</td></tr>
|
||||
* <tr><td>sample_rate</td><td>采样率:目前支持的采样率设置有 16000 和 8000。</td></tr>
|
||||
* <tr><td>asr_ptt</td><td>标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。</td></tr>
|
||||
* <tr><td>result_type</td><td>返回结果的数据格式: 可设置为json,xml,plain,默认为json。</td></tr>
|
||||
* <tr><td>grammarID</td><td>识别的语法id: 只针对 domain 设置为”asr”的应用。</td></tr>
|
||||
* <tr><td>asr_audio_path</td><td>音频文件名: 设置此参数后,将会自动保存识别的录音文件。<br/> 路径为Documents/(指定值)。<br/>不设置或者设置为nil,则不保存音频。</td></tr>
|
||||
* <tr><td>params</td><td>扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。</td></tr>
|
||||
* </tbody>
|
||||
* </table>
|
||||
* @param value 参数对应的取值
|
||||
* @param key 语义理解引擎参数
|
||||
*
|
||||
* @return 成功返回YES;失败返回NO
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/*!
|
||||
* 写入音频流
|
||||
*
|
||||
* @param audioData 音频数据
|
||||
*
|
||||
* @return 写入成功返回YES,写入失败返回NO
|
||||
*/
|
||||
- (BOOL) writeAudio:(NSData *) audioData;
|
||||
|
||||
/*!
|
||||
* 销毁语义理解对象。
|
||||
*
|
||||
* @return 成功返回YES;失败返回NO
|
||||
*/
|
||||
- (BOOL) destroy;
|
||||
|
||||
@end
|
184
src/ios/iflyMSC.framework/Headers/IFlySpeechUtility.h
Normal file
184
src/ios/iflyMSC.framework/Headers/IFlySpeechUtility.h
Normal file
@ -0,0 +1,184 @@
|
||||
//
|
||||
// IFlySpeechUtility.h
|
||||
// MSCDemo
|
||||
//
|
||||
// Created by admin on 14-5-7.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#define iOS_EXCLUSIVE //iOS平台独占API
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/**
|
||||
* 引擎模式
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger,IFlyEngineMode){
|
||||
/**
|
||||
* 云端使用MSC,本地优先使用语记
|
||||
*/
|
||||
IFlyEngineModeAuto = 0,
|
||||
/**
|
||||
* 只使用MSC
|
||||
*/
|
||||
IFlyEngineModeMsc,
|
||||
/**
|
||||
* 本地只使用语记(受平台限制,云端无法使用语记)
|
||||
*/
|
||||
IFlyEngineModePlus,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 服务类型
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){
|
||||
/**
|
||||
* 打开语记主界面
|
||||
*/
|
||||
IFlySpeechPlusServiceTypeNone=0,
|
||||
/**
|
||||
* 获取合成资源
|
||||
*/
|
||||
IFlySpeechPlusServiceTypeTTS,
|
||||
/**
|
||||
* 获取识别资源(未开放)
|
||||
*/
|
||||
IFlySpeechPlusServiceTypeISR,
|
||||
/**
|
||||
* 获取唤醒资源(未开放)
|
||||
*/
|
||||
IFlySpeechPlusServiceTypeIVW,
|
||||
} ;
|
||||
|
||||
/** 语记返回回调
|
||||
*/
|
||||
@protocol IFlySpeechplusDelegate <NSObject>
|
||||
|
||||
/**
|
||||
* 发生错误
|
||||
*
|
||||
* @param errorCode 错误码
|
||||
*/
|
||||
- (void)onError:(int)errorCode;
|
||||
|
||||
/**
|
||||
* 服务正常结束
|
||||
*/
|
||||
- (void)onCompleted;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
* 用户配置
|
||||
*/
|
||||
@interface IFlySpeechUtility : NSObject
|
||||
|
||||
/*!
|
||||
* 创建用户语音配置
|
||||
* 注册应用请前往语音云开发者网站。<br>
|
||||
* 网站:http://www.xfyun.cn
|
||||
*
|
||||
* @param params 启动参数,必须保证appid参数传入,示例:appid=123456
|
||||
*
|
||||
* @return 语音配置对象
|
||||
*/
|
||||
+ (IFlySpeechUtility*) createUtility:(NSString *) params;
|
||||
|
||||
/*!
|
||||
* 销毁用户配置对象
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
+(BOOL) destroy;
|
||||
|
||||
/*!
|
||||
* 获取用户配置对象
|
||||
*
|
||||
* @return 用户配置对象
|
||||
*/
|
||||
+(IFlySpeechUtility *) getUtility;
|
||||
|
||||
/*!
|
||||
* 设置MSC引擎的状态参数
|
||||
*
|
||||
* @param value 参数值
|
||||
* @param key 参数名称
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/**
|
||||
* 获取MSC引擎状态参数
|
||||
*
|
||||
* @param key 参数名
|
||||
*
|
||||
* @return 参数值
|
||||
*/
|
||||
- (NSString *)parameterForKey:(NSString *)key;
|
||||
|
||||
/**
|
||||
* 引擎类型
|
||||
*/
|
||||
@property (nonatomic, readonly) IFlyEngineMode engineMode;
|
||||
|
||||
/**
|
||||
* 语记协议委托
|
||||
*/
|
||||
@property (nonatomic, assign) id<IFlySpeechplusDelegate> delegate;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
* 讯飞语记类别
|
||||
*/
|
||||
@interface IFlySpeechUtility (SpeechPlus)
|
||||
|
||||
/**
|
||||
* 检查讯飞语记是否安装
|
||||
*
|
||||
* @return 已安装返回YES,否则返回NO
|
||||
*/
|
||||
+ (BOOL)checkServiceInstalled;
|
||||
|
||||
/**
|
||||
* 获取讯飞语记下载地址进行下载,安装完成后即可使用服务。
|
||||
* 下载地址需要通过[[UIApplication sharedApplication] openUrl:]打开
|
||||
*
|
||||
* @return 讯飞语记在App Store下载地址
|
||||
*/
|
||||
+ (NSString *)componentUrl;
|
||||
|
||||
|
||||
/**
|
||||
* 注意:此接口废弃,不再需要使用
|
||||
* 处理语记使用URL启动第三方应用程序时传递的数据
|
||||
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
|
||||
*
|
||||
* @param url 语记启动第三方应用程序时传递过来的URL
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO。
|
||||
*/
|
||||
- (BOOL)handleOpenURL:(NSURL *)url iOS_EXCLUSIVE;
|
||||
|
||||
/**
|
||||
* 打开讯飞语记获取相应类型服务,0表示打开主界面
|
||||
*
|
||||
* @param serviceType 服务类型
|
||||
*
|
||||
* @return 成功打开返回YES,否则返回NO
|
||||
*/
|
||||
- (BOOL)openSpeechPlus:(IFlySpeechPlusServiceType)serviceType iOS_EXCLUSIVE;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
57
src/ios/iflyMSC.framework/Headers/IFlyTextUnderstander.h
Normal file
57
src/ios/iflyMSC.framework/Headers/IFlyTextUnderstander.h
Normal file
@ -0,0 +1,57 @@
|
||||
//
|
||||
// TextUnderstand.h
|
||||
// MSCDemo
|
||||
//
|
||||
// Created by iflytek on 4/24/14.
|
||||
// Copyright (c) 2014 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/*!
|
||||
* 文本转语义完成回调函数
|
||||
*
|
||||
* @param result 成功,返回文本语义理解结果
|
||||
* @param error 错误描述
|
||||
*/
|
||||
typedef void(^IFlyUnderstandTextCompletionHandler)(NSString* result, IFlySpeechError * error);
|
||||
|
||||
/*!
|
||||
* 文本转语义类
|
||||
*/
|
||||
@interface IFlyTextUnderstander : NSObject
|
||||
|
||||
/*!
|
||||
* 是否正在文本转语义
|
||||
*/
|
||||
@property (readonly, atomic) __block BOOL isUnderstanding;
|
||||
|
||||
/*!
|
||||
* 文本转语义接口
|
||||
* 输入文本内容,获取语义理解结果
|
||||
*
|
||||
* @param text 输入的文本内容
|
||||
* @param completionHandler 文本转语义完成回调函数
|
||||
*
|
||||
* @return 错误码
|
||||
*/
|
||||
-(int) understandText:(NSString*)text withCompletionHandler:(IFlyUnderstandTextCompletionHandler) completionHandler;
|
||||
|
||||
/*!
|
||||
* 设置文本转语义参数
|
||||
*
|
||||
* @param value 参数对应的取值
|
||||
* @param key 文本转语义参数参数
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/*!
|
||||
* 取消本次会话
|
||||
*/
|
||||
-(void)cancel;
|
||||
|
||||
@end
|
73
src/ios/iflyMSC.framework/Headers/IFlyUserWords.h
Normal file
73
src/ios/iflyMSC.framework/Headers/IFlyUserWords.h
Normal file
@ -0,0 +1,73 @@
|
||||
//
|
||||
// IFlyUserWords.h
|
||||
// MSC
|
||||
//
|
||||
// Created by ypzhao on 13-2-26.
|
||||
// Copyright (c) 2013年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
/*!
|
||||
* 用户词表类
|
||||
* 获取用户词表是为了更好的语音识别(iat),用户词表也属于个性化的一部分.
|
||||
*/
|
||||
@interface IFlyUserWords : NSObject
|
||||
|
||||
/*!
|
||||
* 初始化对象
|
||||
* 在进行初始化时,需要传入的格式如下:
|
||||
* <pre><code>{\"userword\":[{\"name\":\"iflytek\",\"words\":[\"科大讯飞\",
|
||||
* \"云平台\",\"用户词条\",\"开始上传词条\"]}]}</code></pre>
|
||||
*
|
||||
* @param json 初始化时传入的数据
|
||||
*
|
||||
* @return IFlyUserWords对象
|
||||
*/
|
||||
- (id) initWithJson:(NSString *)json;
|
||||
|
||||
/*!
|
||||
* 将数据转化为上传的数据格式
|
||||
*
|
||||
* @return 没有数据或者格式不对时返回nil
|
||||
*/
|
||||
- (NSString *) toString;
|
||||
|
||||
/*!
|
||||
* 返回key对应的数据
|
||||
*
|
||||
* @param key 在putword:value中设置的key
|
||||
*
|
||||
* @return key对应的数组
|
||||
*/
|
||||
- (NSArray *) getWords: (NSString *) key;
|
||||
|
||||
/*!
|
||||
* 添加一条用户词数据
|
||||
*
|
||||
* @param key 用户词对应的key
|
||||
* @param value 上传的用户词数据
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
- (BOOL) putWord: (NSString *) key value:(NSString *)value;
|
||||
|
||||
/*!
|
||||
* 添加一组数据
|
||||
*
|
||||
* @param key 用户词对应的key
|
||||
* @param words 上传的用户词数据
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
- (BOOL) putwords: (NSString *) key words:(NSArray *)words;
|
||||
|
||||
/*!
|
||||
* 是否包含key对应的用户词数据
|
||||
*
|
||||
* @param key 用户词对应的key
|
||||
*
|
||||
* @return 成功返回YES,失败返回NO
|
||||
*/
|
||||
- (BOOL) containsKey: (NSString *) key;
|
||||
@end
|
179
src/ios/iflyMSC.framework/Headers/IFlyVoiceWakeuper.h
Normal file
179
src/ios/iflyMSC.framework/Headers/IFlyVoiceWakeuper.h
Normal file
@ -0,0 +1,179 @@
|
||||
//
|
||||
// IFlyVoiceWakeuper.h
|
||||
// wakeup
|
||||
//
|
||||
// Created by admin on 14-3-18.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IFlyVoiceWakeuperDelegate.h"
|
||||
|
||||
/**
|
||||
|
||||
版本描述:唤醒1.0.0.1
|
||||
|
||||
语音唤醒资源占用(iPhone5s实测)
|
||||
内存占用:3M
|
||||
CPU占用:< 12%
|
||||
|
||||
|
||||
唤醒服务接口时序描述
|
||||
|
||||
sharedInstance 创建唤醒实例
|
||||
setParameter 设置服务参数
|
||||
|
||||
例:[_voiceWakeuper setParameter:@"wake" forKey:@"sst"];
|
||||
sst 表示服务类型,wake是唤醒,enroll是注册
|
||||
|
||||
例:[_voiceWakeuper setParameter:@"m_wakeupResPath" forKey:@"ivw_wake_list"];
|
||||
ivw_wake_list 表示唤醒资源的路径
|
||||
|
||||
例:[_voiceWakeuper setParameter:@"holdValue" forKey:@"ivw_threshold"];
|
||||
ivw_threshold 表示唤醒资源的阀值,holdValue形式:
|
||||
ID:20;15;30
|
||||
每个数字代表对应资源的阀值,15表示资源1阀值,20表示资源2阀值,30表示资源3阀值
|
||||
本demo只有一个资源设置为ID:20 则可
|
||||
|
||||
startListening启动服务
|
||||
stopListening 取消服务,但是不释放内部资源
|
||||
cancel 终止服务,并释放内部资源
|
||||
|
||||
|
||||
*参数定义
|
||||
|
||||
* 服务设置参数
|
||||
sst=wake表示唤醒
|
||||
sst=enroll表示注册
|
||||
SESSION_TYPE @"sst" //服务类型
|
||||
|
||||
WAKEUP @"wake" //唤醒
|
||||
ENROLL @"enroll" //注册
|
||||
|
||||
* 唤醒时,表示资源对应的阀值,为输入值,参数类型为:ID:20;20;3
|
||||
已ID为起始,中间用“;”隔开,表示公三个资源,各自阀值对应为20,20和3
|
||||
IVW_THRESHOLD @"ivw_threshold" //唤醒词对应的门限
|
||||
|
||||
|
||||
* 传入参数
|
||||
主要是没有定义的参数,依赖params传入
|
||||
PARAM @"params"
|
||||
|
||||
|
||||
* 训练,合并生成的资源路径
|
||||
|
||||
例:ivw_word_path=/abc/123/newpath.irf
|
||||
IVW_WORD_PATH @"ivw_word_path"
|
||||
|
||||
|
||||
|
||||
* 业务成功后的会话持续状态
|
||||
keep_alive 0:唤醒一次就结束,1:唤醒后继续
|
||||
KEEP_ALIVE @"keep_alive"
|
||||
|
||||
|
||||
* focus_type注册和唤醒的返回参数
|
||||
wake 唤醒
|
||||
enroll 注册
|
||||
FOCUS_TYPE @"focus_type" //服务类型
|
||||
|
||||
|
||||
* 服务状态
|
||||
status=success 服务正常
|
||||
status=failed 服务失败
|
||||
status=done 注册完成
|
||||
STATUS @"status" //服务状态
|
||||
SUCESS @"success" //服务成功
|
||||
FAILED @"failed" //服务失败
|
||||
DONE @"done" //训练完成
|
||||
|
||||
|
||||
* 唤醒结果的位置
|
||||
ID @"id" //唤醒结果的id
|
||||
|
||||
|
||||
* 唤醒资源的阀值
|
||||
注册时返回,表示注册资源对应的阀值,为输出值
|
||||
THRESHOLD @"threshold" //训练资源的阀值
|
||||
|
||||
|
||||
* 服务结果的可信度
|
||||
SCORE @"score" //服务结果可信度
|
||||
|
||||
|
||||
* 为注册时返回,表示已经注册成功的次数
|
||||
NUM @"num" //已训练成功次数
|
||||
|
||||
|
||||
* 表示服务传入音频对应的起始点和结束点
|
||||
BOS @"bos" //前端点
|
||||
EOS @"eos" //后端点
|
||||
|
||||
|
||||
* 录音方式,如果是外部数据,设置为-1,通过WriteAudio送入音频
|
||||
注意:目前紧紧支持唤醒服务,注册业务尚不支持
|
||||
AUDIO_SOURCE @"audio_source"
|
||||
|
||||
|
||||
* 表示资源合并操作
|
||||
MERGE_RES_ACTION @"merge"
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@interface IFlyVoiceWakeuper : NSObject
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@property(assign) id<IFlyVoiceWakeuperDelegate> delegate;
|
||||
|
||||
/**
|
||||
创建唤醒实例,采用单例模式
|
||||
*/
|
||||
+ (instancetype) sharedInstance;
|
||||
|
||||
|
||||
/**
|
||||
启动唤醒
|
||||
返回值:YES 成功,NO:失败
|
||||
*/
|
||||
-(BOOL) startListening;
|
||||
|
||||
/**
|
||||
取消唤醒会话
|
||||
注意与cancel的区别,紧紧停止服务,并不释放资源
|
||||
*/
|
||||
-(BOOL) stopListening;
|
||||
|
||||
/**
|
||||
获取工作参数
|
||||
*/
|
||||
-(NSString*) getParameter:(NSString *)key;
|
||||
|
||||
/**
|
||||
设置工作参数
|
||||
注意服务正在运行中,不能设置参数
|
||||
*/
|
||||
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
|
||||
|
||||
/**
|
||||
取消唤醒会话,并释放内部资源
|
||||
*/
|
||||
-(BOOL) cancel;
|
||||
|
||||
/**
|
||||
唤醒业务更新,目前支持合并资源操作
|
||||
*/
|
||||
//+(int) updateWords:(NSString *)action params:(NSString*) params;
|
||||
|
||||
/**
|
||||
写入录音数据
|
||||
暂时紧紧支持唤醒的写入,注册服务尚不支持
|
||||
*/
|
||||
//-(int) writeAudio:(const void*)buffer offset:(int)offset length:(int)length;
|
||||
|
||||
@property (readonly) BOOL isListening;
|
||||
|
||||
@end
|
@ -0,0 +1,84 @@
|
||||
|
||||
//
|
||||
// IFlyVoiceWakeuperDel.h
|
||||
// wakeup
|
||||
//
|
||||
// Created by admin on 14-3-18.
|
||||
// Copyright (c) 2014年 iflytek. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class IFlySpeechError;
|
||||
|
||||
/**
|
||||
* 代理返回时序描述
|
||||
|
||||
onError 为唤醒会话错误反馈
|
||||
onBeginOfSpeech 表示录音开始
|
||||
onVolumeChanged 录音音量大小
|
||||
onEndOfSpeech 录音结束,当服务终止时返回onEndOfSpeech
|
||||
onResult 服务结果反馈,内容定义如下
|
||||
|
||||
* 唤醒服务
|
||||
|
||||
例:
|
||||
focus_type = wake 唤醒会话
|
||||
wakeup_result_id = 0 唤醒词位置
|
||||
wakeup_result_Score = 60 唤醒词可信度
|
||||
|
||||
* 注册服务
|
||||
|
||||
例:
|
||||
focus_type = enroll 注册会话
|
||||
enroll_success_num = 1 当前注册成功次数
|
||||
current_enroll_status = success/failed 当前会话是否成功
|
||||
wakeup_result_Score = 60 注册结果可信度
|
||||
threshold = 10 当注册达到3次后,反馈对应资源的阀值
|
||||
*/
|
||||
@protocol IFlyVoiceWakeuperDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
录音开始
|
||||
*/
|
||||
-(void) onBeginOfSpeech;
|
||||
|
||||
/**
|
||||
录音结束
|
||||
*/
|
||||
-(void) onEndOfSpeech;
|
||||
|
||||
/**
|
||||
会话错误
|
||||
@param errorCode 错误描述类,
|
||||
*/
|
||||
- (void) onError:(IFlySpeechError *) error;
|
||||
|
||||
/**
|
||||
唤醒
|
||||
resultID:唤醒词位置
|
||||
*/
|
||||
-(void) onResult:(NSMutableDictionary *)resultArray;
|
||||
|
||||
/**
|
||||
音量反馈,返回频率与录音数据返回回调频率一致
|
||||
volume:音量值
|
||||
*/
|
||||
- (void) onVolumeChanged: (int)volume;
|
||||
|
||||
|
||||
/** 扩展事件回调
|
||||
|
||||
根据事件类型返回额外的数据
|
||||
|
||||
@param eventType 事件类型,具体参见IFlySpeechEvent枚举。
|
||||
|
||||
*/
|
||||
- (void) onEvent:(int)eventType isLast:(BOOL)isLast arg1:(int)arg1 data:(NSMutableDictionary *)eventData;
|
||||
|
||||
@end
|
||||
|
BIN
src/ios/iflyMSC.framework/iflyMSC
Normal file
BIN
src/ios/iflyMSC.framework/iflyMSC
Normal file
Binary file not shown.
137
www/Speech.js
Normal file
137
www/Speech.js
Normal file
@ -0,0 +1,137 @@
|
||||
/**
|
||||
* Created by Edc.zhang on 2017/2/13.
|
||||
*/
|
||||
var cordova = require('cordova'),
|
||||
channel = require('cordova/channel'),
|
||||
exec = require('cordova/exec');
|
||||
|
||||
var Speech = function() {
|
||||
this.channels = {
|
||||
'SyncContact': channel.create('SyncContact'),
|
||||
'UpdateUserWord': channel.create('UpdateUserWord'),
|
||||
'SpeechError': channel.create('SpeechError'),
|
||||
'SpeechResults': channel.create('SpeechResults'),
|
||||
'VolumeChanged': channel.create('VolumeChanged'),
|
||||
'SpeechBegin': channel.create('SpeechBegin'),
|
||||
'SpeechEnd': channel.create('SpeechEnd'),
|
||||
'SpeechCancel': channel.create('SpeechCancel'),
|
||||
'SpeakCompleted': channel.create('SpeakCompleted'),
|
||||
'SpeakBegin': channel.create('SpeakBegin'),
|
||||
'SpeakProgress': channel.create('SpeakProgress'),
|
||||
'SpeakPaused': channel.create('SpeakPaused'),
|
||||
'SpeakResumed': channel.create('SpeakResumed'),
|
||||
'SpeakCancel': channel.create('SpeakCancel'),
|
||||
'BufferProgress': channel.create('BufferProgress')
|
||||
};
|
||||
this.voice_names = {
|
||||
'xiaoyan' : '小燕',
|
||||
'xiaoyu' : '小宇',
|
||||
'vixy' : '小研',
|
||||
'vixq' : '小琪',
|
||||
'vixf' : '小峰',
|
||||
'vixm' : '香港小梅',
|
||||
'vixl' : '台湾小莉',
|
||||
'vixr' : '四川妹纸',
|
||||
'vixyun' : '东北小芸',
|
||||
'vixk' : '河南小坤',
|
||||
'vixqa' : '湖南小强',
|
||||
'vixying' : '陕西小莹',
|
||||
'vixx' : '蜡笔小新',
|
||||
'vinn' : '楠楠',
|
||||
'vils' : '孙大爷',
|
||||
'Catherine' : '美国Catherine',
|
||||
'henry' : '美国Henry',
|
||||
'vimary' : '英国Mary',
|
||||
'Mariane' : '法国Mariane',
|
||||
'Guli' : '维族Guli',
|
||||
'Allabent' : '俄国Allabent',
|
||||
'Gabriela' : '西班牙Gabriela',
|
||||
'Abha' : '印度Abha',
|
||||
'XiaoYun' : '越南XiaoYun'
|
||||
};
|
||||
this.login();
|
||||
this.msg = "";
|
||||
};
|
||||
|
||||
Speech.prototype = {
|
||||
|
||||
_eventHandler: function(info) {
|
||||
if (info.event in this.channels) {
|
||||
this.channels[info.event].fire(info);
|
||||
}
|
||||
},
|
||||
|
||||
addEventListener: function(event, f, c) {
|
||||
if (event in this.channels) {
|
||||
this.channels[event].subscribe(f, c || this);
|
||||
}
|
||||
},
|
||||
|
||||
removeEventListener: function(event, f) {
|
||||
if (event in this.channels) {
|
||||
this.channels[event].unsubscribe(f);
|
||||
}
|
||||
},
|
||||
|
||||
login: function() {
|
||||
// closure variable for local function to use
|
||||
var speech = this;
|
||||
|
||||
// the callback will be saved in the session for later use
|
||||
var callback = function(info) {
|
||||
speech._eventHandler(info);
|
||||
};
|
||||
exec(callback, callback, 'Speech', 'login', []);
|
||||
|
||||
function parseResults( e ) {
|
||||
var data = JSON.parse( e.results );
|
||||
if(data.sn == 1) speech.msg = "";
|
||||
var ws = data.ws;
|
||||
for( var i=0; i<ws.length; i++ ) {
|
||||
var word = ws[i].cw[0].w;
|
||||
speech.msg += word;
|
||||
}
|
||||
if(data.ls == true) {
|
||||
console.log( speech.msg );
|
||||
if(typeof speech.onspeakcallback === 'function') {
|
||||
speech.onspeakcallback( speech.msg );
|
||||
}
|
||||
}
|
||||
}
|
||||
this.addEventListener('SpeechResults', parseResults );
|
||||
|
||||
},
|
||||
|
||||
|
||||
startListen: function(func,fail,isShow,isShowPunc) {
|
||||
this.onspeakcallback = func;
|
||||
exec(null, null, 'Speech', 'startListening', [{language:'zh_cn', accent:'mandarin'},isShow,isShowPunc]);
|
||||
},
|
||||
|
||||
stopListen: function() {
|
||||
exec(null, null, 'Speech', 'stopListening', []);
|
||||
},
|
||||
|
||||
cancelListening: function() {
|
||||
exec(null, null, 'Speech', 'cancelListening', []);
|
||||
},
|
||||
|
||||
startSpeak: function(success,error,text) {
|
||||
exec(null, null, 'Speech', 'startSpeaking', [text, {voice_name: 'xiaoyan'}]);
|
||||
},
|
||||
|
||||
pauseSpeaking: function() {
|
||||
exec(null, null, 'Speech', 'pauseSpeaking', []);
|
||||
},
|
||||
|
||||
resumeSpeaking: function() {
|
||||
exec(null, null, 'Speech', 'resumeSpeaking', []);
|
||||
},
|
||||
|
||||
stopSpeak: function() {
|
||||
exec(null, null, 'Speech', 'stopSpeaking', []);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports = new Speech();
|
26
www/cordova-plugin-xunfeiListenSpeaking.js
vendored
Normal file
26
www/cordova-plugin-xunfeiListenSpeaking.js
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
var exec = require('cordova/exec');
|
||||
|
||||
var xunfeiListenSpeaking = {
|
||||
startListen:function (success,error,isShowDialog,isShowPunc){
|
||||
exec(success,error,"XunfeiListenSpeaking","startListen",[isShowDialog,isShowPunc]);
|
||||
},
|
||||
stopListen:function(){
|
||||
exec(null,null,"XunfeiListenSpeaking","stopListen",[]);
|
||||
},
|
||||
startSpeak:function(success,error,speakMessage){
|
||||
exec(success,error,"XunfeiListenSpeaking","startSpeak",[speakMessage]);
|
||||
},
|
||||
stopSpeak:function(){
|
||||
exec(null,null,"XunfeiListenSpeaking","stopSpeak",[]);
|
||||
},
|
||||
pauseSpeaking: function() {
|
||||
exec(null, null, 'XunfeiListenSpeaking', 'pauseSpeaking', []);
|
||||
},
|
||||
|
||||
resumeSpeaking: function() {
|
||||
exec(null, null, 'XunfeiListenSpeaking', 'resumeSpeaking', []);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports = xunfeiListenSpeaking;
|
Loading…
x
Reference in New Issue
Block a user