Merge branch 'wd' into master

This commit is contained in:
shuto-fandd
2020-10-19 18:26:17 +08:00
committed by GitHub
53 changed files with 824 additions and 1510 deletions
+42 -43
View File
@@ -1,43 +1,42 @@
# 科大讯飞的语音听说读写的cordova插件 # 科大讯飞的语音听说读写的cordova插件
## 安装方法 ## 安装方法
APP_KEY参数值为您在科大讯飞申请的appid APP_KEY参数值为您在科大讯飞申请的appid
运行cordova plugin add https://gitee.com/shuto/cordova-plugin-IFlyspeech-master.git --variable APP_KEY=${APP_KEY}
运行cordova plugin add https://gitee.com/shuto/cordova-plugin-IFlyspeech-master.git --variable APP_KEY=${APP_KEY}
## 调用方法
## 调用方法
/** 开始录音 最大持续时间40秒
/** 开始录音 最大持续时间40秒 * @Param 成功callback
* @Param 成功callback * @Param 失败callback
* @Param 失败callback * @Param 是否显示录音画面
* @Param 是否显示录音画面 * @Param 是否显示标点
* @Param 是否显示标点 *
* */
*/ xunfeiListenSpeaking.startListen(success, error, isShowDialog, isShowPunc);
xunfeiListenSpeaking.startListen(success, error, isShowDialog, isShowPunc);
// 停止录音
// 停止录音 xunfeiListenSpeaking.stopListen();
xunfeiListenSpeaking.stopListen();
/**
/** * 开始说话
* 开始说话 * @Param 成功callback
* @Param 成功callback * @Param 失败callback
* @Param 失败callback * @Param 需要说出的信息
* @Param 需要说出的信息 */
*/ xunfeiListenSpeaking.startSpeak(success, error, message);
xunfeiListenSpeaking.startSpeak(success, error, message);
// 停止说话
// 停止说话 xunfeiListenSpeaking.stopSpeak();
xunfeiListenSpeaking.stopSpeak();
// 暂停说话
// 暂停说话 xunfeiListenSpeaking.pauseSpeaking();
xunfeiListenSpeaking.pauseSpeaking();
// 恢复说话
// 恢复说话 xunfeiListenSpeaking.resumeSpeaking();
xunfeiListenSpeaking.resumeSpeaking();
+100 -265
View File
@@ -1,278 +1,113 @@
<?xml version='1.0' encoding='utf-8'?> <?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"> <plugin id="cordova-plugin-xunfeiListenSpeaking" version="0.0.1"
<name>cordova-plugin-xunfeiListenSpeaking</name> xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<name>cordova-plugin-xunfeiListenSpeaking</name>
<preference name="APP_KEY" /> <preference name="APP_KEY" />
<preference name="CHANNEL" default="developer-default" /> <preference name="CHANNEL" default="developer-default" />
<platform name = "android"> <engines>
<js-module name="xunfeiListenSpeaking" src="www/cordova-plugin-xunfeiListenSpeaking.js"> <engine name="cordova" version=">=3.0" />
<clobbers target="xunfeiListenSpeaking" /> </engines>
</js-module> <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="/*"> <config-file target="res/xml/config.xml" parent="/*">
<feature name="XunfeiListenSpeaking" > <feature name="XunfeiListenSpeaking">
<param name="android-package" value="com.thomas.xunfeilistenspeaking.XunfeiListenSpeaking"/> <param name="android-package" value="com.thomas.xunfeilistenspeaking.XunfeiListenSpeaking" />
</feature> <param name="onload" value="true" />
</config-file> </feature>
<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="$APP_KEY" />
<meta-data
android:name="IFLYTEK_CHANNEL"
android:value="$CHANNEL" />
</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> </config-file>
<!--assets--> <config-file target="AndroidManifest.xml" parent="/manifest">
<source-file src="src/android/assets/iattest.wav" target-dir="assets"/> <!-- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> -->
<source-file src="src/android/assets/call.bnf" target-dir="assets"/> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<source-file src="src/android/assets/grammar_sample.abnf" target-dir="assets"/> <uses-permission android:name="android.permission.INTERNET" />
<source-file src="src/android/assets/keys" target-dir="assets"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<source-file src="src/android/assets/userwords" target-dir="assets"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<source-file src="src/android/assets/iflytek/voice_bg.9.png" target-dir="assets/iflytek"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<source-file src="src/android/assets/iflytek/voice_empty.png" target-dir="assets/iflytek"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<source-file src="src/android/assets/iflytek/voice_full.png" target-dir="assets/iflytek"/> <!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> -->
<source-file src="src/android/assets/iflytek/waiting.png" target-dir="assets/iflytek"/> <!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> -->
<source-file src="src/android/assets/iflytek/warning.png" target-dir="assets/iflytek"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<source-file src="src/android/assets/iflytek/recognize.xml" target-dir="assets/iflytek"/> <!-- <uses-permission android:name="android.permission.WRITE_SETTINGS" /> -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</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 -->
<resource-file src="src/android/assets/iflytek/voice_bg.9.png" target="assets/iflytek/voice_bg.9.png" />
<resource-file src="src/android/assets/iflytek/voice_empty.png" target="assets/iflytek/voice_empty.png" />
<resource-file src="src/android/assets/iflytek/voice_full.png" target="assets/iflytek/voice_full.png" />
<resource-file src="src/android/assets/iflytek/waiting.png" target="assets/iflytek/waiting.png" />
<resource-file src="src/android/assets/iflytek/warning.png" target="assets/iflytek/warning.png" />
<resource-file src="src/android/assets/iflytek/recognize.xml" target="assets/iflytek/recognize.xml" />
<!-- lib -->
<lib-file src="src/android/libs/Msc.jar" />
<lib-file src="src/android/libs/Sunflower.jar" />
<!-- <lib-file src="src/android/libs/armeabi" />
<lib-file src="src/android/libs/armeabi-v7a" />
<lib-file src="src/android/libs/arm64-v8a" /> -->
<resource-file src="src/android/libs/armeabi/libmsc.so" target="jniLibs/armeabi/libmsc.so" />
<resource-file src="src/android/libs/armeabi-v7a/libmsc.so" target="jniLibs/armeabi-v7a/libmsc.so" />
<resource-file src="src/android/libs/arm64-v8a/libmsc.so" target="jniLibs/arm64-v8a/libmsc.so" />
<resource-file src="src/android/libs/x86/libmsc.so" target="jniLibs/x86/libmsc.so" />
<resource-file src="src/android/libs/x86_64/libmsc.so" target="jniLibs/x86_64/libmsc.so" />
<resource-file src="src/android/libs/mips/libmsc.so" target="jniLibs/mips/libmsc.so" />
<resource-file src="src/android/libs/mips64/libmsc.so" target="jniLibs/mips64/libmsc.so" />
<!-- layout -->
<resource-file src="src/android/res/layout/ifly_layout_mnotice_image.xml" target="res/layout/ifly_layout_mnotice_image.xml" />
<!-- src -->
<!--lib--> <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/XunfeiListenSpeaking.java" target-dir="src/com/thomas/xunfeilistenspeaking" />
<source-file src="src/android/libs/Msc.jar" target-dir="libs"/> <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/IatSettings.java" target-dir="src/com/thomas/xunfeilistenspeaking" />
<source-file src="src/android/libs/Sunflower.jar" target-dir="libs"/> <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/JsonParser.java" target-dir="src/com/thomas/xunfeilistenspeaking" />
<source-file src="src/android/libs/armeabi/libmsc.so" target-dir="libs/armeabi"/> <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/SettingTextWatcher.java" target-dir="src/com/thomas/xunfeilistenspeaking" />
<source-file src="src/android/libs/arm64-v8a/libmsc.so" target-dir="libs/arm64-v8a"/> <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/XunfeiDialogActivity.java" target-dir="src/com/thomas/xunfeilistenspeaking" />
<source-file src="src/android/libs/armeabi-v7a/libmsc.so" target-dir="libs/armeabi-v7a"/> <!-- res -->
<!--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"> <config-file target="res/values/strings.xml" parent="/resources">
<!--<string name="app_name">讯飞语音示例</string>--> <string name="app_id">$APP_KEY</string>
<!-- 请替换成在语音云官网申请的appid --> <string name="xunfei_cancel_listen">取消语音</string>
<string name="app_id">$APP_KEY</string> </config-file>
<string name="example_explain">本示例为讯飞语音Android平台开发者提供语音听写、语法识别、语义理解和语音合成等代码样例,旨在让用户能够依据该示例快速开发出基于语音接口的应用程序。</string> </platform>
<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> <platform name="ios">
<!-- 合成 --> <js-module name="speech" src="www/Speech.js">
<string-array name="engine_entries"> <!-- <clobbers target="navigator.speech" /> -->
<item>本地合成</item> <clobbers target="xunfeiListenSpeaking" />
<item>在线合成</item> </js-module>
</string-array> <config-file parent="/*" target="config.xml">
<string-array name="engine_values"> <feature name="Speech">
<item>local</item> <param name="ios-package" value="CDVSpeech" />
<item>cloud</item> </feature>
</string-array> </config-file>
<string-array name="voicer_cloud_entries">
<item>小燕—女青、中英、普通话</item> <config-file target="*-Info.plist" parent="NSMicrophoneUsageDescription">
<item>小宇—男青、中英、普通话</item> <string></string>
<item>凯瑟琳—女青、英</item> </config-file>
<item>亨利—男青、英</item>
<item>玛丽—女青、英</item> <header-file src="src/ios/CDVSpeech.h" />
<item>小研—女青、中英、普通话</item> <source-file src="src/ios/CDVSpeech.m" />
<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>
<resource-file src="src/ios/IFlySpeechConfig.plist" /> <resource-file src="src/ios/IFlySpeechConfig.plist" />
<config-file target="*-Info.plist" parent="NSMicrophoneUsageDescription">
<string></string> <framework src="AVFoundation.framework" />
</config-file> <framework src="AddressBook.framework" />
<framework src="AudioToolbox.framework" />
<header-file src="src/ios/CDVSpeech.h" /> <framework src="SystemConfiguration.framework" />
<source-file src="src/ios/CDVSpeech.m" /> <framework src="QuartzCore.framework" />
<framework src="AVFoundation.framework" /> <framework src="libz.tbd" />
<framework src="AddressBook.framework" /> <framework src="libc++.tbd" />
<framework src="AudioToolbox.framework" /> <framework src="UIKit.framework" />
<framework src="SystemConfiguration.framework" /> <framework src="CoreGraphics.framework" />
<framework src="QuartzCore.framework" /> <framework src="Foundation.framework" />
<framework src="CoreTelephony.framework" />
<framework src="libz.tbd" /> <framework src="CoreLocation.framework" />
<framework src="libc++.tbd" /> <framework src="Contacts.framework" />
<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" /> <framework src="src/ios/iflyMSC.framework" custom="true" />
<config-file target="*IFlySpeechConfig.plist" parent="AppKey"> <config-file target="*IFlySpeechConfig.plist" parent="AppKey">
<string>$APP_KEY</string> <string>$APP_KEY</string>
</config-file> </config-file>
</platform> </platform>
</plugin> </plugin>
-12
View File
@@ -1,12 +0,0 @@
#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
View File
@@ -1,8 +0,0 @@
#ABNF 1.0 UTF-8;
language zh-CN;
mode voice;
root $main;
$main = $place1 到 $place2;
$place1 = 北京|武汉|南京|天津|东京;
$place2 = 上海|合肥;
Binary file not shown.
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
{"userword":[{"name":"我的常用词","words":["佳晨实业","蜀南庭苑","高兰路","复联二"]},{"name":"我的好友","words":["李馨琪","鹿晓雷","张集栋","周家莉","叶震珂","熊泽萌"]}]}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,7 +0,0 @@
<?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>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<ImageView
android:id="@+id/ifly_mnotice_image_container"
android:layout_width="match_parent"
android:scaleType="fitXY"
android:layout_height="match_parent"/>
</RelativeLayout>
-155
View File
@@ -1,155 +0,0 @@
<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
View File
@@ -1,40 +0,0 @@
<?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
View File
@@ -1,47 +0,0 @@
<?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
View File
@@ -1,29 +0,0 @@
<?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>
@@ -1,40 +0,0 @@
<?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>
@@ -12,6 +12,7 @@ import android.widget.Toast;
import com.iflytek.cloud.*; import com.iflytek.cloud.*;
import com.iflytek.cloud.ui.RecognizerDialog; import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener; import com.iflytek.cloud.ui.RecognizerDialogListener;
import com.iflytek.cloud.util.ResourceUtil;
import com.iflytek.sunflower.FlowerCollector; import com.iflytek.sunflower.FlowerCollector;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@@ -46,7 +47,7 @@ public class XunfeiDialogActivity extends Activity{
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(getResources().getIdentifier("activity_xunfei_dialog","layout",getPackageName())); setContentView(getResources().getIdentifier("ifly_layout_mnotice_image","layout",getPackageName()));
isShowDialog = getIntent().getBooleanExtra("isShowDialog",false); isShowDialog = getIntent().getBooleanExtra("isShowDialog",false);
punc = getIntent().getStringExtra("punc"); punc = getIntent().getStringExtra("punc");
@@ -252,6 +253,10 @@ public class XunfeiDialogActivity extends Activity{
// 设置听写引擎 // 设置听写引擎
mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType); mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
if (mEngineType.equals(SpeechConstant.TYPE_LOCAL)) {
// 设置本地识别资源
mIat.setParameter(ResourceUtil.ASR_RES_PATH, getResourcePath());
}
// 设置返回结果格式 // 设置返回结果格式
mIat.setParameter(SpeechConstant.RESULT_TYPE, "json"); mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
@@ -288,6 +293,15 @@ public class XunfeiDialogActivity extends Activity{
mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav"); mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");
} }
private String getResourcePath(){
StringBuffer tempBuffer = new StringBuffer();
//识别通用资源
tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, "iat/common.jet"));
tempBuffer.append(";");
tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, "iat/sms_16k.jet"));
//识别8k资源-使用8k的时候请解开注释
return tempBuffer.toString();
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
@@ -1,9 +1,12 @@
package com.thomas.xunfeilistenspeaking; package com.thomas.xunfeilistenspeaking;
import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
@@ -13,18 +16,25 @@ import com.iflytek.cloud.*;
import com.iflytek.sunflower.FlowerCollector; import com.iflytek.sunflower.FlowerCollector;
import org.apache.cordova.CallbackContext; import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PermissionHelper;
import org.apache.cordova.PluginResult;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List;
/** /**
* Created by Thomas.Wang on 17/2/9. * Created by Thomas.Wang on 17/2/9.
*/ */
public class XunfeiListenSpeaking extends CordovaPlugin{ public class XunfeiListenSpeaking extends CordovaPlugin{
private static String TAG = XunfeiListenSpeaking.class.getSimpleName(); private static String TAG = XunfeiListenSpeaking.class.getSimpleName();
public static final int PERMISSION_DENIED_ERROR = 20;
private Context context; private Context context;
private CallbackContext callbackContext; private CallbackContext callbackContext;
private Toast mToast; private Toast mToast;
@@ -40,18 +50,24 @@ public class XunfeiListenSpeaking extends CordovaPlugin{
private String mEngineType = SpeechConstant.TYPE_CLOUD; private String mEngineType = SpeechConstant.TYPE_CLOUD;
// 用HashMap存储听写结果 // 用HashMap存储听写结果
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>(); private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
private boolean isShowDialog;
private String punc;
@Override @Override
protected void pluginInitialize() { protected void pluginInitialize() {
super.pluginInitialize(); super.pluginInitialize();
context = cordova.getActivity(); context = cordova.getActivity();
// SpeechUtility.createUtility(context, SpeechConstant.APPID +"=584e7225"); // SpeechUtility.createUtility(context, SpeechConstant.APPID +"=584e7225");
SpeechUtility.createUtility(context, SpeechConstant.APPID +"="+context.getString(getId("app_id","string"))); String appid = context.getString(getId("app_id","string"));
SpeechUtility.createUtility(context, SpeechConstant.APPID +"="+appid);
} }
private int getId(String idName,String type){ private int getId(String idName,String type){
return context.getResources().getIdentifier(idName, type,context.getPackageName()); return context.getResources().getIdentifier(idName, type,context.getPackageName());
} }
private static final int DIALOG_ACTIVIT_CODE = 0; private static final int DIALOG_ACTIVIT_CODE = 0;
@Override @Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
@@ -61,28 +77,38 @@ public class XunfeiListenSpeaking extends CordovaPlugin{
// boolean isShowDialog = args.getBoolean(0); // boolean isShowDialog = args.getBoolean(0);
// String punc = args.getBoolean(1)?"1":"0"; // String punc = args.getBoolean(1)?"1":"0";
boolean isShowDialog ; // boolean isShowDialog ;
try { try {
isShowDialog = args.getBoolean(0); isShowDialog = args.getBoolean(0);
}catch (Exception e){ }catch (Exception e){
isShowDialog = true; isShowDialog = true;
} }
String punc; // String punc;
try{ try{
punc = args.getBoolean(1)?"1":"0"; punc = args.getBoolean(1)?"1":"0";
}catch (Exception e){ }catch (Exception e){
punc = "1"; punc = "1";
} }
if (isShowDialog){ boolean hasRecordAudioPermission = PermissionHelper.hasPermission(this, Manifest.permission.RECORD_AUDIO);
Intent intent = new Intent(); boolean hasReadExternalStoragePermission = PermissionHelper.hasPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
intent.setClass(context, XunfeiDialogActivity.class); boolean hasWriteExternalStoragePermission = PermissionHelper.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
intent.putExtra("isShowDialog",isShowDialog);
intent.putExtra("punc",punc);
cordova.startActivityForResult( this,intent, DIALOG_ACTIVIT_CODE);
}else {
startListenWidthNotDialog(punc);
}
if(hasRecordAudioPermission && hasReadExternalStoragePermission && hasWriteExternalStoragePermission) {
this.startListen();
}
else {
List<String> permissions = new ArrayList<String>(3);
if (!hasRecordAudioPermission) {
permissions.add(Manifest.permission.RECORD_AUDIO);
}
if (!hasReadExternalStoragePermission) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (!hasWriteExternalStoragePermission) {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
PermissionHelper.requestPermissions(this, 0, permissions.toArray(new String[0]));
}
return true; return true;
} }
@@ -121,6 +147,17 @@ public class XunfeiListenSpeaking extends CordovaPlugin{
return false; return false;
} }
private void startListen() {
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);
}
}
private void stopListen(){ private void stopListen(){
if (mIat!=null&&mIat.isListening()) { if (mIat!=null&&mIat.isListening()) {
@@ -395,5 +432,17 @@ public class XunfeiListenSpeaking extends CordovaPlugin{
}); });
} }
public void onRequestPermissionResult(int requestCode, String[] permissions,
int[] grantResults) throws JSONException {
for (int r : grantResults) {
if (r == PackageManager.PERMISSION_DENIED) {
this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, PERMISSION_DENIED_ERROR));
return;
}
}
startListen();
}
} }
-2
View File
@@ -16,8 +16,6 @@
#define STR_RESULTS @"results" #define STR_RESULTS @"results"
#define STR_PROGRESS @"progress" #define STR_PROGRESS @"progress"
// always replace the appid and the SDK with what you get from voicecloud.cn
// static SPEECH_APP_ID;
@interface CDVSpeech() @interface CDVSpeech()
@@ -0,0 +1,35 @@
//
// IFlyAudioSession.h
// MSCDemo
//
// Created by AlexHHC on 1/9/14.
//
//
#import <Foundation/Foundation.h>
/**
* 音频环境初始化,设置AVAudioSession的Category属性。
*/
@interface IFlyAudioSession : NSObject
/**
* 初始化播音环境,主要用于合成播放器。
*
* 此接口主要根据原来的音频环境,重新优化设置AVAudioSession的Category属性值。<br>
* 若原来的Category属性值为AVAudioSessionCategoryPlayAndRecord,则添加AVAudioSessionCategoryOptionDefaultToSpeakerAVAudioSessionCategoryOptionAllowBluetooth选项;若为其他Category属性值且isMPCenter为NO,则设置Category属性值为AVAudioSessionCategoryPlayback,选项为AVAudioSessionCategoryOptionMixWithOthers;若为其他Category属性值且isMPCenter为YES,则保持原来的设置,不做任何更改。
*
* @param isMPCenter 是否初始化MPPlayerCenter:0不初始化,1初始化。此参数只在AVAudioSession的Category属性值不为AVAudioSessionCategoryPlayAndRecord时设置有效。
*/
+(void) initPlayingAudioSession:(BOOL)isMPCenter;
/**
* 初始化录音环境,主要用于识别录音器。
*
* 设置AVAudioSession的Category属性值为AVAudioSessionCategoryPlayAndRecord,选项为AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth。
*
* @return 成功返回YES,失败返回NO
*/
+(BOOL) initRecordingAudioSession;
@end
@@ -1,27 +0,0 @@
//
// 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
@@ -12,7 +12,7 @@
@class IFlySpeechError; @class IFlySpeechError;
/*! /*!
* 数据上传类 * 数据上传类,主要用于上传语法文件或上传联系人、词表等个性化数据。
*/ */
@interface IFlyDataUploader : NSObject @interface IFlyDataUploader : NSObject
@@ -11,33 +11,33 @@
@class IFlySpeechError; @class IFlySpeechError;
/** /*!
* 声纹回调协议 * 声纹回调协议
*/ */
@protocol IFlyISVDelegate @protocol IFlyISVDelegate
/** /*!
* 声纹结果回调 * 声纹结果回调
* *
* @param dic 结果 * @param dic 结果
*/ */
-(void) onResult:(NSDictionary *)dic; -(void) onResult:(NSDictionary *)dic;
/** /*!
* 错误码回调 * 错误码回调
* *
* @param errorCode 错误码 * @param errorCode 错误码
*/ */
-(void) onError:(IFlySpeechError *) errorCode; -(void) onCompleted:(IFlySpeechError *) errorCode;
@optional @optional
/** /*!
* 等待结果 * 等待结果
*/ */
-(void) onRecognition; -(void) onRecognition;
/** /*!
* 音量改变回调 * 音量改变回调
* *
* @param volume 音量值 * @param volume 音量值
@@ -17,113 +17,111 @@
{ {
} }
/*!
* The delegate of FlyISVRecognizer responsing to IFlyISVDelegate.
*/
@property (assign) id<IFlyISVDelegate> delegate; @property (assign) id<IFlyISVDelegate> delegate;
/*!
/* * FlyISVRecognizer is a kind of Singleton calss.The function can be used as below:<br>
* FlyISVRecognizer is a kind of Singleton calss * IFLyISVRecognizer *recognizer=[IFlyISVRecognizer creteRecognizer: self];
* the function can be used as below:
IFLyISVRecognizer *recognizer=[IFlyISVRecognizer creteRecognizer: self];
*/ */
+(instancetype) sharedInstance; +(instancetype) sharedInstance;
/* /*!
* genrerate a serial number password * Genrerate a serial number password<br>
* princeple: * Princeple:<br>
1.number serial has no 1 in itself; * 1.Number serial has no 1 in itself;<br>
2.the nuber serial has no same number("98765432"is right while "99876543" is wrong) * 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 * @param length the serial number's length,length of "98765432" is 8,generally length is 8 and other value is forbidden
*/ */
-(NSString*) generatePassword:(int)length; -(NSString*) generatePassword:(int)length;
/* /*!
* Used to get password from server * Used to get password from server
* @pwdt: *
when pwdt is 1,the function will return chinese text; * @param pwdt when pwdt is 1,the function will return chinese text;while pwdt is 2, the funciton will return number serial
while pwdt is 2, the funciton will return number serial
*/ */
-(NSArray*) getPasswordList:(int)pwdt; -(NSArray*) getPasswordList:(int)pwdt;
/* /*!
* Used to judge if the engine is running in listenning * Used to judge if the engine is running in listenning
* return value: *
YES: the engine is listenning; * @return YES: the engine is listenning;<br>No : the engine is not listenning
No : the engine is not listenning
*/ */
-(BOOL) isListening; -(BOOL) isListening;
/* /*!
* Used to query or delete the voiceprint model in server * Used to query or delete the voiceprint model in server
* @cmd: *
"del": delete model * @param cmd "del": delete model;<br>"que": query model;
"que": query model * @param authid: user id ,can be @"tianxia" or other;
* @authid: user id ,can be @"tianxia" or other; * @param pwdt voiceprint type<br>
* @pwdt: voiceprint type * 1: fixed txt voiceprint code ,like @"我的地盘我做主";<br>
1: fixed txt voiceprint code ,like @"我的地盘我做主" * 2: free voiceprint code , user can speek anything,but 5 times trainning the speech shall be same;<br>
2: free voiceprint code , user can speek anything,but 5 times * 3: number serial voiceprint code ,like @"98765432" and so on.
trainning the speech shall be same * @param ptxt voiceprint txt,only fixed voiceprint and number serial have this,in free voiceprint model this param shall be set nil.
3: number serial voiceprint code ,like @"98765432" and so on * @param vid another voiceprint type model,user can use this to query or delete model in server can be @"jakillasdfasdjjjlajlsdfhdfdsadff",totally 32 bits;<br>
* @ptxt: voiceprint txt,only fixed voiceprint and number serial have this, * NOTES:<br>
in free voiceprint model this param shall be set nil * 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.
* @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; -(BOOL) sendRequest:(NSString*)cmd authid:(NSString *)auth_id pwdt:(int)pwdt ptxt:(NSString *)ptxt vid:(NSString *)vid err:(int *)err;
/* /*!
* set the voiceprint params * Set the voiceprint params
* @"sst" : @"train" or @"verify" *
* @"auth_id" : @"tianxia" or ther * | key | value |
* @"sub" : @"ivp" * |:---------------:|:-------------------------------------------------:|
* @"ptxt" : * | sst | @"train" or @"verify" |
* @"rgn" : @"5" * | auth_id | @"tianxia" or other |
* @"pwdt" : @"1",or @"2", or @"3" * | sub | @"ivp" |
* @"auf" : @"audio/L16;rate=16000" or @"audio/L16;rate=8000" * | ptxt | |
* @"vad_enable : @"1" or @"0" * | rgn | @"5" |
* @"vad_timeout" : @"3000" * | pwdt | @"1",or @"2", or @"3" |
* @"vad_speech_tail": @"100" * | auf | @"audio/L16;rate=16000" or @"audio/L16;rate=8000" |
* | vad_enable | @"1" or @"0" |
* | vad_timeout | @"3000" |
* | vad_speech_tail | @"100" |
*
* @param value 参数值
* @param key 参数类型
*
* @return 设置成功返回YES,失败返回NO
*/ */
-(BOOL) setParameter:(NSString *)value forKey:(NSString *)key; -(BOOL) setParameter:(NSString *)value forKey:(NSString *)key;
/* /*!
* get the voiceprint params * Get the voiceprint params used the same as function of setParameter
* used the same as function of setParameter
*/ */
-(NSString*) getParameter:(NSString *)key; -(NSString*) getParameter:(NSString *)key;
/* /*!
* start recording * Start recording
*/ */
-(void) startListening; -(void) startListening;
/* /*!
* stop recording * Stop recording
*/ */
-(void) stopListening; -(void) stopListening;
/* /*!
* cancel recording,like function stopListening * Cancel recording,like function stopListening
*/ */
-(void) cancel; /* cancel recognization */ -(void) cancel; /* cancel recognization */
+2 -6
View File
@@ -9,7 +9,7 @@
#ifndef MSC_IFlyMSC_h #ifndef MSC_IFlyMSC_h
#define MSC_IFlyMSC_h #define MSC_IFlyMSC_h
#import "IFlyContact.h" #import "IFlyAudioSession.h"
#import "IFlyDataUploader.h" #import "IFlyDataUploader.h"
#import "IFlyDebugLog.h" #import "IFlyDebugLog.h"
#import "IFlyISVDelegate.h" #import "IFlyISVDelegate.h"
@@ -27,16 +27,12 @@
#import "IFlySpeechRecognizerDelegate.h" #import "IFlySpeechRecognizerDelegate.h"
#import "IFlySpeechSynthesizer.h" #import "IFlySpeechSynthesizer.h"
#import "IFlySpeechSynthesizerDelegate.h" #import "IFlySpeechSynthesizerDelegate.h"
#import "IFlySpeechUnderstander.h"
#import "IFlySpeechUtility.h" #import "IFlySpeechUtility.h"
#import "IFlyTextUnderstander.h"
#import "IFlyUserWords.h" #import "IFlyUserWords.h"
#import "IFlyPcmRecorder.h" #import "IFlyPcmRecorder.h"
#import "IFlySpeechEvaluator.h"
#import "IFlySpeechEvaluatorDelegate.h"
#import "IFlyVoiceWakeuper.h" #import "IFlyVoiceWakeuper.h"
#import "IFlyVoiceWakeuperDelegate.h" #import "IFlyVoiceWakeuperDelegate.h"
#endif #endif
@@ -14,17 +14,17 @@
#import <AudioToolbox/AudioFile.h> #import <AudioToolbox/AudioFile.h>
#import <AudioToolbox/AudioServices.h> #import <AudioToolbox/AudioServices.h>
#import <AudioToolbox/AudioConverter.h> #import <AudioToolbox/AudioConverter.h>
#import <AVFoundation/AVAudioSession.h> #import <AVFoundation/AVFoundation.h>
@class IFlyPcmRecorder; @class IFlyPcmRecorder;
/** /*!
* 录音协议 * 录音协议
*/ */
@protocol IFlyPcmRecorderDelegate<NSObject> @protocol IFlyPcmRecorderDelegate<NSObject>
/** /*!
* 回调音频数据 * 回调音频数据
* *
* @param buffer 音频数据 * @param buffer 音频数据
@@ -32,7 +32,7 @@
*/ */
- (void) onIFlyRecorderBuffer: (const void *)buffer bufferSize:(int)size; - (void) onIFlyRecorderBuffer: (const void *)buffer bufferSize:(int)size;
/** /*!
* 回调音频的错误码 * 回调音频的错误码
* *
* @param recoder 录音器 * @param recoder 录音器
@@ -42,7 +42,7 @@
@optional @optional
/** /*!
* 回调录音音量 * 回调录音音量
* *
* @param power 音量值 * @param power 音量值
@@ -52,53 +52,65 @@
@end @end
/** /*!
* 录音封装 * 录音器控件
*/ */
@interface IFlyPcmRecorder : NSObject<AVAudioSessionDelegate> @interface IFlyPcmRecorder : NSObject<AVAudioSessionDelegate>
/** /*!
* 录音委托对象 * 录音委托对象
*/ */
@property (assign) id<IFlyPcmRecorderDelegate> delegate; @property (nonatomic,assign) id<IFlyPcmRecorderDelegate> delegate;
/** /*!
* 用于设置是否在录音结束后发送Deactive通知,默认是YES:发送
*/
@property (nonatomic,assign) BOOL isNeedDeActive;
/*!
* 单例模式 * 单例模式
* *
* @return 返回录音对象单例 * @return 返回录音对象单例
*/ */
+ (instancetype) sharedInstance; + (instancetype) sharedInstance;
/** /*!
* 开始录音 * 开始录音
* *
* @return 开启录音成功返回YES,否则返回NO * @return 开启录音成功返回YES,否则返回NO
*/ */
- (BOOL) start; - (BOOL) start;
/** /*!
* 停止录音 * 停止录音
*/ */
- (void) stop; - (void) stop;
/** /*!
* 设置音频采样率 * 设置音频采样率
* *
* @param rate -[in] 采样率,8k/16k * @param rate -[in] 采样率,8k/16k
*/ */
- (void) setSample:(NSString *) rate; - (void) setSample:(NSString *) rate;
/* /*!
* 设置录音时间间隔参数 * 设置录音音量回调时间间隔参数
*/ */
- (void) setPowerCycle:(float) cycle; - (void) setPowerCycle:(float) cycle;
/** /*!
* 保存录音 * 保存录音
* *
* @param savePath 音频保存路径 * @param savePath 音频保存路径
*/ */
-(void) setSaveAudioPath:(NSString *)savePath; -(void) setSaveAudioPath:(NSString *)savePath;
/*!
* 录音器是否完成
*
* @return 录音器完全结束返回YES,否则返回NO
*/
-(BOOL) isCompleted;
@end @end
@@ -12,8 +12,8 @@
@protocol IFlyRecognizerViewDelegate ; @protocol IFlyRecognizerViewDelegate ;
/*! /*!
* 语音识别控件 * 语音识别控件<br>
* 录音时触摸控件结束录音,开始识别(相当于旧版的停止);触摸其他位置,取消录音,结束会话(取消) * 录音时触摸控件结束录音,开始识别(相当于旧版的停止);触摸其他位置,取消录音,结束会话(取消)<br>
* 出错时触摸控件,重新开启会话(相当于旧版的再说一次);触摸其他位置,取消录音,结束会话(取消) * 出错时触摸控件,重新开启会话(相当于旧版的再说一次);触摸其他位置,取消录音,结束会话(取消)
* *
*/ */
@@ -87,24 +87,21 @@
/*! /*!
* 设置识别引擎的参数 * 设置识别引擎的参数
* 识别的引擎参数(key)取值如下: *
* <table> * 识别的引擎参数(key)取值如下:<br>
* <thead> *
* <tr><th>*参数</th><th><em>描述</em></th> * | 参数 | 描述 |
* </tr> * |-----------------|-------------------------------------------------------|
* </thead> * | domain | 应用的领域: 取值为:iat、search、video、poi、music、asr<br>iat:普通文本听写;<br>search:热词搜索;<br>video:视频音乐搜索;<br>asr:关键词识别;|
* <tbody> * | vad_bos | 前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br>engine指定iat识别默认值为5000<br>其他情况默认值为 4000,范围 0-10000。|
* <tr><td>domain</td><td>应用的领域: 取值为:iat、search、video、poi、music、asr<br/>iat:普通文本听写;<br/>search:热词搜索;<br/>video:视频音乐搜索;<br/>video:视频音乐搜索;<br/>asr:关键词识别;</td></tr> * | vad_eos | 后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,自动停止录音;单位:ms;<br>sms 识别默认值为 1800;<br>其他默认值为 700,范围 0-10000。|
* <tr><td>vad_bos</td><td>前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br/>engine指定iat识别默认值为5000<br/>其他情况默认值为 4000,范围 0-10000。</td></tr> * | sample_rate | 采样率:目前支持的采样率设置有 16000 和 8000。|
* <tr><td>vad_eos</td><td>后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,<br/>自动停止录音;单位:ms;<br/>sms 识别默认为 1800;<br/>其他默认值为 700,范围 0-10000。</td></tr> * | asr_ptt | 标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。|
* <tr><td>sample_rate</td><td>采样率:目前支持的采样率设置有 16000 和 8000。</td></tr> * | result_type | 返回结果的数据格式: 可设置为json,xmlplain,默认为json。|
* <tr><td>asr_ptt</td><td>标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。</td></tr> * | grammarID | 识别的语法id: 只针对 domain 设置为”asr”的应用。|
* <tr><td>result_type</td><td>返回结果的数据格式: 设置为jsonxmlplain,默认为json。</td></tr> * | asr_audio_path | 音频文件名: 设置此参数后,将会自动保存识别的录音文件。<br>路径为Documents/(指定值)。<br>不设置或者设置为nil,则不保存音频。|
* <tr><td>grammarID</td><td>识别的语法id: 只针对 domain 设置为”asr”的应用。</td></tr> * | params | 扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。|
* <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 value 参数对应的取值
* @param key 识别引擎参数 * @param key 识别引擎参数
* *
@@ -29,7 +29,7 @@
* *
* @param error 识别结束错误码 * @param error 识别结束错误码
*/ */
- (void)onError: (IFlySpeechError *) error; - (void)onCompleted: (IFlySpeechError *) error;
@optional @optional
+12 -17
View File
@@ -35,7 +35,7 @@ typedef NS_OPTIONS(NSInteger, LOG_LEVEL){
}; };
/*! /*!
* 此接口为iflyMSC sdk 配置接口。 * 此接口为iflyMSC sdk 配置接口。<br>
* 可以获取版本号,设置日志打印等级等 * 可以获取版本号,设置日志打印等级等
*/ */
@interface IFlySetting : NSObject @interface IFlySetting : NSObject
@@ -55,8 +55,8 @@ typedef NS_OPTIONS(NSInteger, LOG_LEVEL){
+ (LOG_LEVEL) logLvl; + (LOG_LEVEL) logLvl;
/*! /*!
* 是否打印控制台log * 是否打印控制台log<br>
* 在软件发布时,建议关闭此log。 * 在软件发布时,建议关闭此log。
* *
* @param showLog -[in] YES,打印log;NO,不打印 * @param showLog -[in] YES,打印log;NO,不打印
*/ */
@@ -64,26 +64,21 @@ typedef NS_OPTIONS(NSInteger, LOG_LEVEL){
/*! /*!
* 设置日志msc.log生成路径以及日志等级 * 设置日志msc.log生成路径以及日志等级
* <table> *
* <thead> * | 日志打印等级 | 描述 |
* <tr><th>*日志打印等级</th><th><em>描述</em></th> * |------------------------|-----------------------------------|
* </tr> * | LVL_ALL | 全部打印 |
* </thead> * | LVL_DETAIL | 高,异常分析需要的级别 |
* <tbody> * | LVL_NORMAL | 中,打印基本日志信息 |
* <tr><td>LVL_ALL</td><td>全部打印</td></tr> * | LVL_LOW | 低,只打印主要日志信息 |
* <tr><td>LVL_DETAIL</td><td>高,异常分析需要的级别</td></tr> * | LVL_NONE | 不打印 |
* <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] 日志打印等级 * @param level -[in] 日志打印等级
*/ */
+ (void) setLogFile:(LOG_LEVEL) level; + (void) setLogFile:(LOG_LEVEL) level;
/*! /*!
* 设置日志文件的路径 * 设置日志文件的路径<br>
* 日志文件默认存放在Documents目录。 * 日志文件默认存放在Documents目录。
* *
* @param path -[in] 日志文件的全路径 * @param path -[in] 日志文件的全路径
@@ -9,7 +9,7 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
/*! /*!
* 公共常量类 * 公共常量类<br>
* 主要定义参数的key value值 * 主要定义参数的key value值
*/ */
@interface IFlySpeechConstant : NSObject @interface IFlySpeechConstant : NSObject
@@ -18,7 +18,7 @@
#pragma mark - 通用参数key #pragma mark - 通用参数key
/*! /*!
* 语音应用ID * 语音应用ID<br>
* 通过开发者网站申请 * 通过开发者网站申请
* *
* @return 语音应用IDkey * @return 语音应用IDkey
@@ -47,6 +47,13 @@
*/ */
+(NSString*)ACCENT_HENANESE; +(NSString*)ACCENT_HENANESE;
/*!
* 语言区域。
*
* @return 四川话value。
*/
+(NSString*)ACCENT_SICHUANESE;
/*! /*!
* 语言区域。 * 语言区域。
* *
@@ -55,7 +62,7 @@
+(NSString*)ACCENT_CANTONESE; +(NSString*)ACCENT_CANTONESE;
/*! /*!
* 语言 * 语言<br>
* 支持:zh_cnzh_twen_us<br> * 支持:zh_cnzh_twen_us<br>
* *
* @return 语言key * @return 语言key
@@ -85,8 +92,7 @@
+(NSString*)LANGUAGE_ENGLISH; +(NSString*)LANGUAGE_ENGLISH;
/*! /*!
* 返回结果的数据格式, * 返回结果的数据格式,可设置为jsonxmlplain,默认为json。
* 可设置为jsonxmlplain,默认为json。
* *
* @return 返回结果的数据格式key * @return 返回结果的数据格式key
*/ */
@@ -107,15 +113,15 @@
+(NSString*)DATA_TYPE; +(NSString*)DATA_TYPE;
/*! /*!
* 语音输入超时时间 * 语音输入超时时间<br>
* 单位:ms,默认30000 * 单位:ms,默认30000
* *
* @return 语音输入超时时间key * @return 语音输入超时时间key
*/ */
+(NSString*)SPEECH_TIMEOUT; +(NSString*)SPEECH_TIMEOUT;
/*! /*!
* 网络连接超时时间 * 网络连接超时时间<br>
* 单位:ms,默认20000 * 单位:ms,默认20000
* *
* @return 网络连接超时时间key * @return 网络连接超时时间key
@@ -136,17 +142,17 @@
*/ */
+(NSString*)PARAMS; +(NSString*)PARAMS;
/** /*!
* 加密参数 * 加密参数
* *
* 支持类型:ssl 加密 tcp 非加密 默认:tcp * 支持类型:ssl 加密 tcp 非加密 默认:tcp<br>
* 建议对安全性要求较高时使用ssl。 * 建议对安全性要求较高时使用ssl。
* *
* @return 加密参数key * @return 加密参数key
*/ */
+(NSString*)PROT_TYPE; +(NSString*)PROT_TYPE;
/** /*!
* ssl证书内容 * ssl证书内容
* *
* @return ssl证书内容key * @return ssl证书内容key
@@ -168,7 +174,7 @@
+(NSString*)SAMPLE_RATE; +(NSString*)SAMPLE_RATE;
/*! /*!
* 合成、识别、唤醒、评测、声纹等业务采样率。 * 合成、识别、唤醒、声纹等业务采样率。
* *
* @return 合成及识别采样率8K Value。 * @return 合成及识别采样率8K Value。
*/ */
@@ -182,8 +188,8 @@
+(NSString*)SAMPLE_RATE_16K; +(NSString*)SAMPLE_RATE_16K;
/*! /*!
* 引擎类型。 * 引擎类型。<br>
* 可选:localcloudauto * 可选:localcloudauto<br>
* 默认:auto * 默认:auto
* *
* @return 引擎类型key。 * @return 引擎类型key。
@@ -232,25 +238,46 @@
*/ */
+(NSString*)RESULT_ENCODING; +(NSString*)RESULT_ENCODING;
/** /*!
* 是否初始化播放器 * 是否初始化播放器<br>
* SDK内部播放器采用音频队列实现,有部分外部需求需要自定义音频队列,可以通过此开关控制 * SDK内部播放器采用音频队列实现,有部分外部需求需要自定义音频队列,可以通过此开关控制<br>
* 0:不初始化,非0或者参数为空:初始化,默认初始化 * 0:不初始化,非0或者参数为空:初始化,默认初始化
* @return 是否初始化播放器 参数key *
* @return 是否初始化播放器参数key
*/ */
+(NSString*)PLAYER_INIT; +(NSString*)PLAYER_INIT;
/*!
* 是否播放器结束后发送deactive系统通知<br>
* SDK内部播放器结束后可通过此开关发送deactive系统通知,使其他被中断的音频应用解除中断<br>
* 0:不发送,非0或者参数为空:发送,默认发送
*
* @return 是否播放器结束后发送deactive系统通知参数key
*/
+(NSString*)PLAYER_DEACTIVE;
/** /**
* 是否初始化录音器 * 是否初始化录音器<br>
* SDK内部录音器采用音频队列实现,有部分外部需求需要自定义音频队列,可以通过此开关控制 * SDK内部录音器采用音频队列实现,有部分外部需求需要自定义音频队列,可以通过此开关控制<br>
* 0:不初始化,非0或者参数为空:初始化,默认初始化 * 0:不初始化,非0或者参数为空:初始化,默认初始化
* @return 是否初始化录音器 参数key *
* @return 是否初始化录音器参数key
*/ */
+(NSString*)RECORDER_INIT; +(NSString*)RECORDER_INIT;
/**
* 是否录音器结束后发送deactive系统通知<br>
* SDK内部录音器结束后可通过此开关发送deactive系统通知,使其他被中断的音频应用解除中断<br>
* 0:不发送,非0或者参数为空:发送,默认发送
*
* @return 是否录音器结束后发送deactive系统通知参数key
*/
+(NSString*)RECORDER_DEACTIVE;
#pragma mark - 合成相关设置key #pragma mark - 合成相关设置key
/*! /*!
* 语速 * 语速<br>
* 范围 0~100 默认值:50 * 范围 0~100 默认值:50
* *
* @return 语速key * @return 语速key
@@ -258,7 +285,7 @@
+(NSString*)SPEED; +(NSString*)SPEED;
/*! /*!
* 音调 * 音调<br>
* 范围(0~100)默认值:50 * 范围(0~100)默认值:50
* *
* @return 音调key * @return 音调key
@@ -268,8 +295,9 @@
/*! /*!
* 合成录音保存路径 * 合成录音保存路径
* *
* 注意:只需要设置文件名则可,会自动拼接到[IFlySetting setLogFilePath]接口设置的目录后
*
* @return 合成录音保存路径key * @return 合成录音保存路径key
* @注意 只需要设置文件名则可,会自动拼接到IFlySetting setLogFilePath接口设置的目录后
*/ */
+(NSString*)TTS_AUDIO_PATH; +(NSString*)TTS_AUDIO_PATH;
@@ -281,7 +309,7 @@
+(NSString*)VAD_ENABLE; +(NSString*)VAD_ENABLE;
/*! /*!
* VAD前端点超时 * VAD前端点超时<br>
* 范围:0-10000(单位ms) * 范围:0-10000(单位ms)
* *
* @return VAD前端点超时key * @return VAD前端点超时key
@@ -289,7 +317,7 @@
+(NSString*)VAD_BOS; +(NSString*)VAD_BOS;
/*! /*!
* VAD后端点超时 * VAD后端点超时。<br>
* 可选范围:0-10000(单位ms) * 可选范围:0-10000(单位ms)
* *
* @return VAD后端点超时key * @return VAD后端点超时key
@@ -344,32 +372,30 @@
/*! /*!
* 发音人 * 发音人
* <table> *
* <thead> * 云端支持如下发音人:<br>
* <tr><th>*云端发音人名称</th><th><em>参数</em></th> * 对于网络TTS的发音人角色,不同引擎类型支持的发音人不同,使用中请注意选择。<br>
* </tr> *
* </thead> * | 发音人 | 参数 |
* <tbody> * |:--------:|:----------------:|
* <tr><td>小燕</td><td>xiaoyan</td></tr> * | 小燕 | xiaoyan |
* <tr><td>小宇</td><td>xiaoyu</td></tr> * | 小宇 | xiaoyu |
* <tr><td>凯瑟琳</td><td>catherine</td></tr> * | 凯瑟琳 | catherine |
* <tr><td>亨利</td><td>henry</td></tr> * | 亨利 | henry |
* <tr><td>玛丽</td><td>vimary</td></tr> * | 玛丽 | vimary |
* <tr><td>小研</td><td>vixy</td></tr> * | 小研 | vixy |
* <tr><td>小琪</td><td>vixq</td></tr> * | 小琪 | vixq |
* <tr><td>小峰</td><td>vixf</td></tr> * | 小峰 | vixf |
* <tr><td>小梅</td><td>vixl</td></tr> * | 小梅 | vixl |
* <tr><td>小莉</td><td>vixq</td></tr> * | 小莉 | vixq |
* <tr><td>小蓉(四川话)</td><td>vixr</td></tr> * | 小蓉 | vixr |
* <tr><td>小芸</td><td>vixyun</td></tr> * | 小芸 | vixyun |
* <tr><td>小坤</td><td>vixk</td></tr> * | 小坤 | vixk |
* <tr><td>小强</td><td>vixqa</td></tr> * | 小强 | vixqa |
* <tr><td>小莹</td><td>vixying</td></tr> * | 小莹 | vixyin |
* <tr><td>小新</td><td>vixx</td></tr> * | 小新 | vixx |
* <tr><td>楠楠</td><td>vinn</td></tr> * | 楠楠 | vinn |
* <tr><td>老孙</td><td>vils</td></tr> * | 老孙 | vils |
* </tbody>
* </table>
* *
* @return 发音人key * @return 发音人key
*/ */
@@ -377,19 +403,22 @@
/*! /*!
* 发音人ID key。 * 发音人ID key。
*
* @return 发音人ID key * @return 发音人ID key
*/ */
+(NSString*)VOICE_ID; +(NSString*)VOICE_ID;
/*! /*!
* 发音人语种 key。 * 发音人语种 key。
*
* 参数值:0:Auto 1:中文 2英文 ,默认 0. * 参数值:0:Auto 1:中文 2英文 ,默认 0.
*
* @return 发音人ID key * @return 发音人ID key
*/ */
+(NSString*)VOICE_LANG; +(NSString*)VOICE_LANG;
/*! /*!
* 音量 * 音量<br>
* 范围(0~100 默认值:50 * 范围(0~100 默认值:50
* *
* @return 音量key * @return 音量key
@@ -397,35 +426,34 @@
+(NSString*)VOLUME ; +(NSString*)VOLUME ;
/*! /*!
* 合成音频播放缓冲时间 * 合成音频播放缓冲时间<br>
* 即缓冲多少秒音频后开始播放,如tts_buffer_time=1000; * 即缓冲多少秒音频后开始播放,如tts_buffer_time=1000;<br>
* 默认缓冲1000ms毫秒后播放。 * 默认缓冲1000ms毫秒后播放。
* *
* @return 合成音频播放缓冲时间缓冲时间key * @return 合成音频播放缓冲时间缓冲时间key
*/ */
+(NSString*)TTS_BUFFER_TIME ; +(NSString*)TTS_BUFFER_TIME ;
/** 合成数据即时返回
*/
/** /*!
* 合成数据是否即时返回 * 合成数据是否即时返回
* 是否需要数据回调,为1时,当合成一段音频会通过onEvent回调返回,直接合成结束; *
* 是否需要数据回调,为1时,当合成一段音频会通过onEvent回调返回,直接合成结束;<br>
* 设置为1为即时返回;0为非即时返回;默认值为0; * 设置为1为即时返回;0为非即时返回;默认值为0;
* *
* @return 成数据即时返回key * @return 成数据即时返回key
*/ */
+(NSString*)TTS_DATA_NOTIFY; +(NSString*)TTS_DATA_NOTIFY;
/** /*!
* 预合成文本 * 预合成文本
* *
* @return 预合成文本参数key * @return 预合成文本参数key
*/ */
+(NSString*)NEXT_TEXT; +(NSString*)NEXT_TEXT;
/** /*!
* 是否需要打开MPPlayingInfocenter * 是否需要打开MPPlayingInfocenter<br>
* 是否需要初始化MPPlayerCenter的属性;0:需要初始化,1:不初始化 * 是否需要初始化MPPlayerCenter的属性;0:需要初始化,1:不初始化
* *
* @return 是否需要打开MPPlayingInfocenter 参数key * @return 是否需要打开MPPlayingInfocenter 参数key
@@ -435,8 +463,8 @@
#pragma mark - 识别、听写、语义相关设置key #pragma mark - 识别、听写、语义相关设置key
/*! /*!
* 录音源 * 录音源<br>
* 录音时的录音方式,默认为麦克风,设置为1; * 录音时的录音方式,默认为麦克风,设置为1;<br>
* 如果需要外部送入音频,设置为-1,通过WriteAudio接口送入音频。 * 如果需要外部送入音频,设置为-1,通过WriteAudio接口送入音频。
* *
* @return 录音源key * @return 录音源key
@@ -479,15 +507,15 @@
+(NSString*)ASR_PTT_NODOT; +(NSString*)ASR_PTT_NODOT;
/*! /*!
* 本地语法名称。 * 本地语法名称。<br>
* 本地语法名称,对应云端的有CLOUD_GRAMMAR * 本地语法名称,对应云端的有CLOUD_GRAMMAR
* *
* @return 本地语法名称key。 * @return 本地语法名称key。
*/ */
+(NSString*)LOCAL_GRAMMAR; +(NSString*)LOCAL_GRAMMAR;
/*! /*!
* 云端语法ID。 * 云端语法ID。<br>
* 云端编译语法返回的表示,早期版本使用GRAMMAR_ID,仍然兼容,但建议使用新的。 * 云端编译语法返回的表示,早期版本使用GRAMMAR_ID,仍然兼容,但建议使用新的。
* *
* @return 云端语法ID key。 * @return 云端语法ID key。
@@ -530,7 +558,7 @@
+(NSString*)GRAMMAR_LIST; +(NSString*)GRAMMAR_LIST;
/*! /*!
* 开放语义协议版本号。 * 开放语义协议版本号。<br>
* 如需使用请在http://osp.voicecloud.cn/上进行业务配置 * 如需使用请在http://osp.voicecloud.cn/上进行业务配置
* *
* @return 开放语义协议版本号key。 * @return 开放语义协议版本号key。
@@ -560,17 +588,24 @@
+(NSString*)IVW_ONESHOT; +(NSString*)IVW_ONESHOT;
/*! /*!
* 唤醒工作方式 * 唤醒工作方式<br>
* 1:表示唤醒成功后继续录音,0:表示唤醒成功后停止录音。 * 1:表示唤醒成功后继续录音,0:表示唤醒成功后停止录音。
* *
* @return 唤醒工作方式key * @return 唤醒工作方式key
*/ */
+(NSString*)KEEP_ALIVE; +(NSString*)KEEP_ALIVE;
/*!
* 唤醒录音保存路径
*
* @return 唤醒录音保存路径key
*/
+(NSString*) IVW_AUDIO_PATH;
#pragma mark - 评测相关设置key #pragma mark - 评测相关设置key
/*! /*!
* 评测类型<br> * 评测类型<br>
* 可选值:read_syllable(英文评测不支持):单字;read_word:词语;read_sentence:句子;read_chapter(待开放):篇章。 * 可选值:read_syllable(英文评测不支持):单字;read_word:词语;read_sentence:句子;read_chapter(待开放):篇章。
* *
* @return 评测类型 key * @return 评测类型 key
*/ */
@@ -578,15 +613,15 @@
/*! /*!
* 评测结果等级<br> * 评测结果等级<br>
* 可选值:complete:完整 plain:简单 * 可选值:complete:完整 plain:简单
* *
* @return 评测结果等级 key * @return 评测结果等级 key
*/ */
+(NSString*)ISE_RESULT_LEVEL; +(NSString*)ISE_RESULT_LEVEL;
/*! /*!
* 评测结果格式 * 评测结果格式<br>
* 可选值:xml;plain * 可选值:xml;plain
* *
* @return 评测结果格式 key * @return 评测结果格式 key
*/ */
@@ -602,7 +637,7 @@
/*! /*!
* 朗读跟踪,只对句子和篇章有效<br> * 朗读跟踪,只对句子和篇章有效<br>
* 可选值:enable:开启;disable:关闭。 * 可选值:enable:开启;disable:关闭。
* *
* @return 朗读跟踪 key * @return 朗读跟踪 key
*/ */
@@ -617,28 +652,28 @@
+(NSString*)ISE_TRACK_TYPE; +(NSString*)ISE_TRACK_TYPE;
#pragma mark - 语记SDK业务key #pragma mark - 语记SDK业务key
/** /*!
* 本地所有资源 * 本地所有资源
* *
* @return 本地所有资源key * @return 本地所有资源key
*/ */
+ (NSString *)PLUS_LOCAL_ALL; + (NSString *)PLUS_LOCAL_ALL;
/** /*!
* 本地合成资源 * 本地合成资源
* *
* @return 本地合成资源key * @return 本地合成资源key
*/ */
+ (NSString *)PLUS_LOCAL_TTS; + (NSString *)PLUS_LOCAL_TTS;
/** /*!
* 本地识别资源 * 本地识别资源
* *
* @return 本地识别资源key * @return 本地识别资源key
*/ */
+ (NSString *)PLUS_LOCAL_ASR; + (NSString *)PLUS_LOCAL_ASR;
/** /*!
* 本地唤醒资源 * 本地唤醒资源
* *
* @return 本地唤醒资源key * @return 本地唤醒资源key
@@ -647,110 +682,110 @@
#pragma mark - 身份验证业务key #pragma mark - 身份验证业务key
/** /*!
* auth_id * auth_id<br>
* 用于用户注册和登录、查询、删除等业务时标识用户身份 * 用于用户注册和登录、查询、删除等业务时标识用户身份
* *
* @return 用户标识 * @return 用户标识
*/ */
+ (NSString*)MFV_AUTH_ID; + (NSString*)MFV_AUTH_ID;
/** /*!
* 请求业务类型,可选值:mfv(默认,融合验证),ivp(声纹),ifr(人脸) * 请求业务类型,可选值:mfv(默认,融合验证),ivp(声纹),ifr(人脸)
* *
* @return 请求业务类型key * @return 请求业务类型key
*/ */
+ (NSString*)MFV_SUB; + (NSString*)MFV_SUB;
/** /*!
* 会话类型,不同sub有不同的sst取值。 * 会话类型,不同sub有不同的sst取值。<br>
* ifrenrollverifyidentifyreenrollquerydelete * ifrenrollverifyidentifyreenrollquerydelete<br>
* ivpenrolltrain),verifyreenrollquerydeletedownload * ivpenrolltrain),verifyreenrollquerydeletedownload
* *
* @return 会话类型key * @return 会话类型key
*/ */
+ (NSString*)MFV_SST; + (NSString*)MFV_SST;
/** /*!
* 融合验证模式,仅在融合验证场景下使用。可选值:sin(单一生物特征数据验证),mix(混合生物特征数据验证),agi(灵活生物特征数据验证) * 融合验证模式,仅在融合验证场景下使用。可选值:sin(单一生物特征数据验证),mix(混合生物特征数据验证),agi(灵活生物特征数据验证)
* *
* @return 融合验证模式key * @return 融合验证模式key
*/ */
+ (NSString*)MFV_VCM; + (NSString*)MFV_VCM;
/** /*!
* 特征场景,用来说明本次验证将涉及的业务。可选值:ivp,ifr,ivp|ifr * 特征场景,用来说明本次验证将涉及的业务。可选值:ivp,ifr,ivp|ifr
* *
* @return 特征场景 key * @return 特征场景 key
*/ */
+ (NSString*)MFV_SCENES; + (NSString*)MFV_SCENES;
/** /*!
* 确认周期(affirmance cycle,单位:s),用户设置的确认超时时间(生命周期),仅在灵活融合验证场景下使用 * 确认周期(affirmance cycle,单位:s),用户设置的确认超时时间(生命周期),仅在灵活融合验证场景下使用
* *
* @return 确认周期key * @return 确认周期key
*/ */
+ (NSString*)MFV_AFC; + (NSString*)MFV_AFC;
/** /*!
* 数据保存路径 * 数据保存路径
* *
* @return 数据保存路径key * @return 数据保存路径key
*/ */
+ (NSString*)MFV_DATA_PATH; + (NSString*)MFV_DATA_PATH;
/** /*!
* 训练次数:取值2~9.无默认值,必须明确指定。 * 训练次数:取值2~9.无默认值,必须明确指定。
* *
* @return 训练次数key * @return 训练次数key
*/ */
+ (NSString*)MFV_RGN; + (NSString*)MFV_RGN;
/** /*!
* 声纹确认门限值,验证得分>=tsd验证通过,否则验证失败(该参数目前不支持,作为保留参数。)却只范围:0~100. * 声纹确认门限值,验证得分>=tsd验证通过,否则验证失败(该参数目前不支持,作为保留参数。)却只范围:0~100.
* *
* @return 声纹确认门限值key * @return 声纹确认门限值key
*/ */
+ (NSString*)MFV_TSD; + (NSString*)MFV_TSD;
/** /*!
* 密码文本。从服务端下载,比如数字密码所需要的数字串。 * 密码文本。从服务端下载,比如数字密码所需要的数字串。
* *
* @return 密码文本key * @return 密码文本key
*/ */
+ (NSString*)MFV_PTXT; + (NSString*)MFV_PTXT;
/** /*!
* 密码类型。取值:1(文本密码),2(自由说),3(数字密码). * 密码类型。取值:1(文本密码),2(自由说),3(数字密码).
* *
* @return 密码类型key * @return 密码类型key
*/ */
+ (NSString*)MFV_PWDT; + (NSString*)MFV_PWDT;
/** /*!
* 取消注册。取值:0(不取消,即不生效),1(取消本次注册). * 取消注册。取值:0(不取消,即不生效),1(取消本次注册).
* *
* @return 取消注册key * @return 取消注册key
*/ */
+ (NSString*)MFV_FIN; + (NSString*)MFV_FIN;
/** /*!
* 等待超时时间:描述客户端等待结果的超时时间 * 等待超时时间:描述客户端等待结果的超时时间
* *
* @return 等待超时时间:key * @return 等待超时时间:key
*/ */
+ (NSString*)MFV_WTT; + (NSString*)MFV_WTT;
/** /*!
* 数据格式 * 数据格式<br>
* 声纹为音频采样率支持:16000和8000;人脸为图片格式,支持jpg和gif * 声纹为音频采样率支持:16000和8000;人脸为图片格式,支持jpg和gif
* *
* @return 数据格式key * @return 数据格式key
*/ */
+ (NSString*)MFV_DATA_FORMAT; + (NSString*)MFV_DATA_FORMAT;
/** /*!
* 数据压缩编码 * 数据压缩编码<br>
* 声纹为;人脸支持raw,不对图片压缩 * 声纹为;人脸支持raw,不对图片压缩
* *
* @return 数据压缩编码key * @return 数据压缩编码key
@@ -772,78 +807,95 @@
//7. appid 取值:用户申请的appid 用途: 验证用户 //7. appid 取值:用户申请的appid 用途: 验证用户
/** sub 默认值:wfr /*!
* sub 默认值:wfr<br>
* 用于区分业务类型,web访问方式中,nginx配置不用使用,但是在结构化日志和染色日志记录中使用。 * 用于区分业务类型,web访问方式中,nginx配置不用使用,但是在结构化日志和染色日志记录中使用。
*/ */
+ (NSString*) FACE_SUB; + (NSString*) FACE_SUB;
/** WFR /*!
* WFR<br>
* sub参数的默认值 * sub参数的默认值
*/ */
+ (NSString*) FACE_WFR; + (NSString*) FACE_WFR;
/** sst /*!
* sst<br>
* 指定本路会话是属于何种性质 * 指定本路会话是属于何种性质
*/ */
+ (NSString*) FACE_SST; + (NSString*) FACE_SST;
/** REG /*!
* REG<br>
* 人脸图像注册(reg):上传图像,验证图像的有效性,然后存储起来,作为数据源。 * 人脸图像注册(reg):上传图像,验证图像的有效性,然后存储起来,作为数据源。
*/ */
+ (NSString*) FACE_REG; + (NSString*) FACE_REG;
/** VERIFY
/*!
* VERIFY<br>
* 人脸图像验证(verify):通过与指定源图像比较,验证人脸相似性。 * 人脸图像验证(verify):通过与指定源图像比较,验证人脸相似性。
*/ */
+ (NSString*) FACE_VERIFY; + (NSString*) FACE_VERIFY;
/** DETECT
/*!
* DETECT<br>
* 人脸图像检测(detect):能够检测出不同姿态方位的人脸在图中的位置。 * 人脸图像检测(detect):能够检测出不同姿态方位的人脸在图中的位置。
*/ */
+ (NSString*) FACE_DETECT; + (NSString*) FACE_DETECT;
/** ALIGN
/*!
* ALIGN<br>
* 人脸图像聚焦(align):在给定人脸框下自动标定出两眼、鼻尖、嘴角的坐标。 * 人脸图像聚焦(align):在给定人脸框下自动标定出两眼、鼻尖、嘴角的坐标。
*/ */
+ (NSString*) FACE_ALIGN; + (NSString*) FACE_ALIGN;
/** ATTR /*!
* ATTR<br>
* 面部属性识别(attr):对面部属性进行识别:例如秃顶、刘海、大嘴、模糊、眼镜等。 * 面部属性识别(attr):对面部属性进行识别:例如秃顶、刘海、大嘴、模糊、眼镜等。
*/ */
+ (NSString*) FACE_ATTR; + (NSString*) FACE_ATTR;
/** AUE /*!
* AUE<br>
* 图像压缩格式,现在引擎不支持图像压缩,aue只能取值raw * 图像压缩格式,现在引擎不支持图像压缩,aue只能取值raw
*/ */
+ (NSString*) FACE_AUE; + (NSString*) FACE_AUE;
/** RAW /*!
* RAW<br>
* AUE参数的值 * AUE参数的值
*/ */
+ (NSString*) FACE_RAW; + (NSString*) FACE_RAW;
/** PSET /*!
* PSET<br>
* 人脸识别验证阈值,取值可以是负数也可以是整数。 * 人脸识别验证阈值,取值可以是负数也可以是整数。
*/ */
+ (NSString*) FACE_PSET; + (NSString*) FACE_PSET;
/** SKIP /*!
* SKIP<br>
* 后台图片处理是否进行过滤。true表示不过滤,false表示过滤,传入字符串@“true”或@“false” * 后台图片处理是否进行过滤。true表示不过滤,false表示过滤,传入字符串@“true”或@“false”
*/ */
+ (NSString*) FACE_SKIP; + (NSString*) FACE_SKIP;
/** GID /*!
* GID<br>
* 图像模型id,如:4a6c124ed6b78436ee5aac4563f13eb5 * 图像模型id,如:4a6c124ed6b78436ee5aac4563f13eb5
*/ */
+ (NSString*) FACE_GID; + (NSString*) FACE_GID;
/** /*!
* auth_id * auth_id<br>
* 用于用户注册和登录、查询、删除等业务时标识用户身份 * 用于用户注册和登录、查询、删除等业务时标识用户身份
* *
* @return 用户标识 * @return 用户标识
*/ */
+ (NSString*)FACE_AUTH_ID; + (NSString*)FACE_AUTH_ID;
/** DVC /*!
* DVC<br>
* 用户设备编号,用于验证用户 * 用户设备编号,用于验证用户
*/ */
+ (NSString*) FACE_DVC; + (NSString*) FACE_DVC;
@@ -22,7 +22,7 @@
@property(nonatomic,assign) int errorCode; @property(nonatomic,assign) int errorCode;
/*! /*!
* 错误码类 * 错误码类
*/ */
@property(nonatomic,assign) int errorType; @property(nonatomic,assign) int errorType;
@@ -55,4 +55,4 @@
- (NSString *) errorDesc; - (NSString *) errorDesc;
@end @end
#endif #endif
@@ -10,6 +10,9 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "IFlySpeechEvaluatorDelegate.h" #import "IFlySpeechEvaluatorDelegate.h"
#define IFLY_AUDIO_SOURCE_MIC @"1"
#define IFLY_AUDIO_SOURCE_STREAM @"-1"
/*! /*!
* 语音评测类 * 语音评测类
*/ */
@@ -55,17 +58,18 @@
- (NSString*)parameterForKey:(NSString *)key; - (NSString*)parameterForKey:(NSString *)key;
/*! /*!
* 开始评测 * 开始评测<br>
* 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错 * 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错
* *
* @param data 评测的试题 * @param data 评测的试题
* @param params 评测的参数 * @param params 评测的参数
* @return 成功返回YES,失败返回NO
*/ */
- (void)startListening:(NSData *)data params:(NSString *)params; - (BOOL)startListening:(NSData *)data params:(NSString *)params;
/*! /*!
* 停止录音 * 停止录音<br>
* 调用此函数会停止录音,并开始进行语音识别 * 调用此函数会停止录音,并开始进行语音识别
*/ */
- (void)stopListening; - (void)stopListening;
@@ -76,3 +80,22 @@
@end @end
/*!
* 音频流评测<br>
* 音频流评测可以将文件分段写入
*/
@interface IFlySpeechEvaluator(IFlyStreamISERecognizer)
/*!
* 写入音频流
*
* @param audioData 音频数据
*
* @return 写入成功返回YES,写入失败返回NO
*/
- (BOOL) writeAudio:(NSData *) audioData;
@end
@@ -25,15 +25,15 @@
- (void)onVolumeChanged:(int)volume buffer:(NSData *)buffer; - (void)onVolumeChanged:(int)volume buffer:(NSData *)buffer;
/*! /*!
* 开始录音回调 * 开始录音回调<br>
* 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。如果发生错误则回调onError:函数 * 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。如果发生错误则回调onCompleted:函数
*/ */
- (void)onBeginOfSpeech; - (void)onBeginOfSpeech;
/*! /*!
* 停止录音回调 * 停止录音回调<br>
* 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。 * 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。<br>
* 如果发生错误则回调onError:函数 * 如果发生错误则回调onCompleted:函数
*/ */
- (void)onEndOfSpeech; - (void)onEndOfSpeech;
@@ -44,18 +44,16 @@
/*! /*!
* 评测错误回调 * 评测错误回调
* 在进行语音评测过程中的任何时刻都有可能回调此函数,你可以根据errorCode进行相应的处理. *
* 当errorCode没有错误时,表示此次会话正常结束,否则,表示此次会话有错误发生。特别的当调用 * 在进行语音评测过程中的任何时刻都有可能回调此函数,你可以根据errorCode进行相应的处理.当errorCode没有错误时,表示此次会话正常结束,否则,表示此次会话有错误发生。特别的当调用`cancel`函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函数之前如果重新调用了`startListenging`函数则会报错误。
* `cancel`函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函
* 数之前如果重新调用了`startListenging`函数则会报错误。
* *
* @param errorCode 错误描述类 * @param errorCode 错误描述类
*/ */
- (void)onError:(IFlySpeechError *)errorCode; - (void)onCompleted:(IFlySpeechError *)errorCode;
/*! /*!
* 评测结果回调 * 评测结果回调<br>
* 在评测过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。 * 在评测过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。
* *
* @param results -[out] 评测结果。 * @param results -[out] 评测结果。
* @param isLast -[out] 是否最后一条结果 * @param isLast -[out] 是否最后一条结果
@@ -13,92 +13,75 @@
*/ */
typedef NS_ENUM(NSUInteger,IFlySpeechEventType){ typedef NS_ENUM(NSUInteger,IFlySpeechEventType){
/*! /*!
* 网络状态消息 * 网络状态消息<br>
* 在消息到达时,可通过onEvent的第2个参数arg1,获取当前网络连接状态值 * 在消息到达时,可通过onEvent的第2个参数arg1,获取当前网络连接状态值
*/ */
IFlySpeechEventTypeNetPref = 10001, IFlySpeechEventTypeNetPref = 10001,
/** /*!
* 转写音频文件消息 * 转写音频文件消息<br>
* 在录音模式下,成功创建音频文件时返回。可通过onEvent * 在录音模式下,成功创建音频文件时返回。可通过onEvent第4个参数data,指定Key为[IFlySpeechConstant IST_AUDIO_PATH],获取音频文件绝对路径.或通过[IFlySpeechTranscripter getParameter:[IFlySpeechConstant IST_AUDIO_PATH]],获取音频文件绝对路径.
* 第4个参数data 指定Key为[IFlySpeechConstant IST_AUDIO_PATH],获取音频文件绝对路径.
* 或通过[IFlySpeechTranscripter getParameter:[IFlySpeechConstant IST_AUDIO_PATH]],
* 获取音频文件绝对路径.
*/ */
IFlySpeechEventTypeISTAudioFile = 10004, IFlySpeechEventTypeISTAudioFile = 10004,
/** /*!
* 转写已上传字节消息 * 转写已上传字节消息<br>
* 在消息到达时,通过onEvent * 在消息到达时,通过onEvent的第二个参数arg1,获取已确认上传到服务器的字节数.若当前音频源为非写音频模式,还可通过onEvent
* 的第个参数arg1,获取已确认上传到服务器的字节数. * 的第个参数arg2,获取当前所有音频的字节大小.录音模式时,由于所有音频字节大小会变。当停止音频输入后(等待录音时间超时[IFlySpeechConstant SPEECH_TIMEOUT],或调用[IFlySpeechTranscripter stopTranscripting]),且服务器收到所有音频时,第四个参数data,将包含完成标记的布尔值(true),可通过data调用指定KEY为KCIFlySpeechEventKeyISTUploadComplete获取。此消息可能多次返回.
* 若当前音频源为非写音频模式,还可通过onEvent
* 的第三个参数arg2,获取当前所有音频的字节大小.录音模式时,由于所有音频字节大小会变。
* 当停止音频输入后(等待录音时间超时
* [IFlySpeechConstant SPEECH_TIMEOUT]
* ,或调用[IFlySpeechTranscripter stopTranscripting]),
* 且服务器收到所有音频时,第四个参数data,将包含完成标记的布尔值(true),可通过data调用
* 指定KEY为KCIFlySpeechEventKeyISTUploadComplete获取。
* 此消息可能多次返回.
*/ */
IFlySpeechEventTypeISTUploadBytes = 10006, IFlySpeechEventTypeISTUploadBytes = 10006,
/** /*!
* 转写缓存剩余 * 转写缓存剩余<br>
* 此消息仅在音频源为-1时需要关注 * 此消息仅在音频源为-1时需要关注,在调用[IFlySpeechTranscripter writeAudio]写音频时,应该关注此事件。<br>
* 在调用[IFlySpeechTranscripter writeAudio]写音频时,应该关注此事件 * 此事件在调用写音频接口、及音频最后被写入底库库时分别回调一次。当事件回调时,通过onEvent的第二个参数arg1,获取当前剩余的缓存大小,当缓存小于要写入的音频时,应该先暂停写音频数据,直到下次缓存大小大于要写入的音频时.最大缓存为128KByte
* 此事件在调用写音频接口、及音频最后被写入底库库时分别回调一次。当事件回调时,通过onEvent
* 的第二个参数arg1,获取当前剩余的缓存大小,当缓存小于要写入的音频时,应该先暂停写音频数据,直到下次缓存大小大于要写入的音频时.
* 最大缓存为128KByte。
*/ */
IFlySpeechEventTypeISTCacheLeft = 10007, IFlySpeechEventTypeISTCacheLeft = 10007,
/** /*!
* 转写结果等待时间消息 * 转写结果等待时间消息<br>
* 在消息到达时,通过 onEvent * 在消息到达时,通过 onEvent的第二个参数arg1,获取当前结果需要的时间.<br>
* 的第二个参数arg1,获取当前结果需要的时间.
* 此消息可能多次返回,返回时间不定,且不一定会返回. * 此消息可能多次返回,返回时间不定,且不一定会返回.
*/ */
IFlySpeechEventTypeISTResultTime= 10008, IFlySpeechEventTypeISTResultTime= 10008,
/** /*!
* 转写转写音频同步ID消息 * 转写转写音频同步ID消息<br>
* 在消息到达时,通过 onEvent * 在消息到达时,通过 onEvent的第二个参数arg1,获取当前写音频同步ID.<br>
* 的第二个参数arg1,获取当前写音频同步ID.
* 此消息可能多次返回. * 此消息可能多次返回.
*/ */
IFlySpeechEventTypeISTSyncID= 10009, IFlySpeechEventTypeISTSyncID= 10009,
/** /*!
* 会话开始消息 * 会话开始消息<br>
* 在会话开始成功后返回 * 在会话开始成功后返回
*/ */
IFlySpeechEventTypeSessionBegin = 10010, IFlySpeechEventTypeSessionBegin = 10010,
/** /*!
* 会话结束消息 * 会话结束消息<br>
* 在会话结束前返回 * 在会话结束前返回
*/ */
IFlySpeechEventTypeSessionEnd = 10011, IFlySpeechEventTypeSessionEnd = 10011,
/** /*!
* 音量消息,在得到音量时抛出,暂时只有身份验证的声纹业务用到 * 音量消息,在得到音量时抛出,暂时只有身份验证的声纹业务用到
*/ */
IFlySpeechEventTypeVolume = 10012, IFlySpeechEventTypeVolume = 10012,
/** /*!
* VAD后端点消息,在检测到VAD后端点时抛出,暂时只有身份验证的声纹业务用到 * VAD后端点消息,在检测到VAD后端点时抛出,暂时只有身份验证的声纹业务用到
*/ */
IFlySpeechEventTypeVadEOS = 10013, IFlySpeechEventTypeVadEOS = 10013,
/*! /*!
* 服务端会话id * 服务端会话id<br>
* 在消息到达时,可通过onEvent的第4个参数data(字典类型) * 在消息到达时,可通过onEvent的第4个参数data(字典类型)指定key KCIFlySpeechEventKeySessionID,获取服务端会话id.
* 指定key KCIFlySpeechEventKeySessionID,获取服务端会话id.
*/ */
IFlySpeechEventTypeSessionID = 20001, IFlySpeechEventTypeSessionID = 20001,
/*! /*!
* TTS合成数据消息 * TTS合成数据消息<br>
* -(void)onEvent:(int)eventType arg0:(int)arg0 arg1:(int)arg1 data:(NSData *)eventData * -(void)onEvent:(int)eventType arg0:(int)arg0 arg1:(int)arg1 data:(NSData *)eventData<br>
* 其中eventData中包含数据 * 其中eventData中包含数据
* *
*/ */
IFlySpeechEventTypeTTSBuffer = 21001, IFlySpeechEventTypeTTSBuffer = 21001,
@@ -110,9 +93,9 @@ typedef NS_ENUM(NSUInteger,IFlySpeechEventType){
IFlySpeechEventTypeTTSCancel = 21002, IFlySpeechEventTypeTTSCancel = 21002,
/*! /*!
* IVW onshot 听写 or 识别结果 * IVW onshot 听写 or 识别结果<br>
* 在消息到达时,第2个参数arg1包含是否为最后一个结果:1为是,0为否; * 在消息到达时,第2个参数arg1包含是否为最后一个结果:1为是,0为否;<br>
* 第4个参数data中包含数据,通过指定KEY为KCIFlySpeechEventKeyIVWResult获取. * 第4个参数data中包含数据,通过指定KEY为KCIFlySpeechEventKeyIVWResult获取.
*/ */
IFlySpeechEventTypeIVWResult = 22001, IFlySpeechEventTypeIVWResult = 22001,
@@ -129,17 +112,14 @@ typedef NS_ENUM(NSUInteger,IFlySpeechEventType){
IFlySpeechEventTypeRecordStop= 22003, IFlySpeechEventTypeRecordStop= 22003,
/*! /*!
* 服务端音频url * 服务端音频url<br>
* 在消息到达时, * 在消息到达时,第4个参数data,包含数据,通过指定KEY为KCIFlySpeechEventKeyAudioUrl获取.
* 第4个参数data,包含数据,通过
* 指定KEY为KCIFlySpeechEventKeyAudioUrl获取.
*/ */
IFlySpeechEventTypeAudioUrl = 23001, IFlySpeechEventTypeAudioUrl = 23001,
/*! /*!
* 变声数据结果返回 * 变声数据结果返回<br>
* * 设置voice_change参数获取结果.
* 设置voice_change参数获取结果.
*/ */
IFlySpeechEventTypeVoiceChangeResult = 24001 IFlySpeechEventTypeVoiceChangeResult = 24001
@@ -14,12 +14,14 @@
#define IFLY_AUDIO_SOURCE_STREAM @"-1" #define IFLY_AUDIO_SOURCE_STREAM @"-1"
/*! /*!
* 语音识别类 * 语音识别类<br>
* 此类现在设计为单例,你在使用中只需要创建此对象,不能调用release/dealloc函数去释放此对象。所有关于语音识别的操作都在此类中。 * 此类现在设计为单例,你在使用中只需要创建此对象,不能调用release/dealloc函数去释放此对象。所有关于语音识别的操作都在此类中。
*/ */
@interface IFlySpeechRecognizer : NSObject<IFlySpeechRecognizerDelegate> @interface IFlySpeechRecognizer : NSObject<IFlySpeechRecognizerDelegate>
/** 设置委托对象 */ /*!
* 设置委托对象
*/
@property(nonatomic,assign) id<IFlySpeechRecognizerDelegate> delegate ; @property(nonatomic,assign) id<IFlySpeechRecognizerDelegate> delegate ;
/*! /*!
@@ -74,24 +76,21 @@
/*! /*!
* 设置识别引擎的参数 * 设置识别引擎的参数
* 识别的引擎参数(key)取值如下: *
* <table> * 识别的引擎参数(key)取值如下:
* <thead> *
* <tr><th>*参数</th><th><em>描述</em></th> * | 参数 | 描述 |
* </tr> * |-----------------|-------------------------------------------------------|
* </thead> * | domain | 应用的领域: 取值为:iat、search、video、poi、music、asr<br>iat:普通文本听写;<br>search:热词搜索;<br>video:视频音乐搜索;<br>asr:关键词识别;|
* <tbody> * | vad_bos | 前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br>engine指定iat识别默认值为5000<br>其他情况默认值为 4000,范围 0-10000。|
* <tr><td>domain</td><td>应用的领域: 取值为:iat、search、video、poi、music、asr<br/>iat:普通文本听写;<br/>search:热词搜索;<br/>video:视频音乐搜索;<br/>video:视频音乐搜索;<br/>asr:关键词识别;</td></tr> * | vad_eos | 后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,自动停止录音;单位:ms;<br>sms 识别默认值为 1800;<br>其他默认值为 700,范围 0-10000。|
* <tr><td>vad_bos</td><td>前端点检测: 静音超时时间,即用户多长时间不说话则当做超时处理; 单位:ms;<br/>engine指定iat识别默认值为5000<br/>其他情况默认值为 4000,范围 0-10000。</td></tr> * | sample_rate | 采样率:目前支持的采样率设置有 16000 和 8000。|
* <tr><td>vad_eos</td><td>后断点检测: 后端点静音检测时间,即用户停止说话多长时间内即认为不再输入,<br/>自动停止录音;单位:ms;<br/>sms 识别默认为 1800;<br/>其他默认值为 700,范围 0-10000。</td></tr> * | asr_ptt | 标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。|
* <tr><td>sample_rate</td><td>采样率:目前支持的采样率设置有 16000 和 8000。</td></tr> * | result_type | 返回结果的数据格式: 可设置为json,xmlplain,默认为json。|
* <tr><td>asr_ptt</td><td>标点符号设置: 默认为 1,当设置为 0 时,将返回无标点符号文本。</td></tr> * | grammarID | 识别的语法id: 只针对 domain 设置为”asr”的应用。|
* <tr><td>result_type</td><td>返回结果的数据格式: 设置为jsonxmlplain,默认为json。</td></tr> * | asr_audio_path | 音频文件名: 设置此参数后,将会自动保存识别的录音文件。<br>路径为Documents/(指定值)。<br>不设置或者设置为nil,则不保存音频。|
* <tr><td>grammarID</td><td>识别的语法id: 只针对 domain 设置为”asr”的应用。</td></tr> * | params | 扩展参数: 对于一些特殊的参数可在此设置,一般用于设置语义。|
* <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 value 参数对应的取值
* @param key 识别引擎参数 * @param key 识别引擎参数
* *
@@ -110,16 +109,16 @@
/*! /*!
* 开始识别 * 开始识别
* 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错。若有需要多次回话, *
* 请在onError回调返回后请求下一路回话。 * 同时只能进行一路会话,这次会话没有结束不能进行下一路会话,否则会报错。若有需要多次回话,请在onCompleted回调返回后请求下一路回话。
* *
* @return 成功返回YES;失败返回NO * @return 成功返回YES;失败返回NO
*/ */
- (BOOL) startListening; - (BOOL) startListening;
/*! /*!
* 停止录音 * 停止录音<br>
* 调用此函数会停止录音,并开始进行语音识别 * 调用此函数会停止录音,并开始进行语音识别
*/ */
- (void) stopListening; - (void) stopListening;
@@ -141,22 +140,24 @@
grammarType:(NSString *)grammarType grammarType:(NSString *)grammarType
grammarContent:(NSString *)grammarContent; grammarContent:(NSString *)grammarContent;
/** 是否正在识别 /*!
* 是否正在识别
*/ */
@property (nonatomic, readonly) BOOL isListening; @property (nonatomic, readonly) BOOL isListening;
@end @end
/*! /*!
* 音频流识别 * 音频流识别<br>
* 音频流识别可以将文件分段写入 * 音频流识别可以将文件分段写入
*/ */
@interface IFlySpeechRecognizer(IFlyStreamRecognizer) @interface IFlySpeechRecognizer(IFlyStreamRecognizer)
/*! /*!
* 写入音频流 * 写入音频流
* 此方法的使用示例如下: *
* <pre><code>[_iFlySpeechRecognizer setParameter:@"audio_source" value:@"-1"]; * 此方法的使用示例如下:
* <pre><code>[_iFlySpeechRecognizer setParameter:@"-1" value:@"audio_source"];
* [_iFlySpeechRecognizer startListening]; * [_iFlySpeechRecognizer startListening];
* [_iFlySpeechRecognizer writeAudio:audioData1]; * [_iFlySpeechRecognizer writeAudio:audioData1];
* [_iFlySpeechRecognizer writeAudio:audioData2]; * [_iFlySpeechRecognizer writeAudio:audioData2];
@@ -20,8 +20,8 @@ typedef void(^IFlyOnBuildFinishCompletionHandler)(NSString* grammarId,IFlySpeech
/*! /*!
* 语音识别协议 * 语音识别协议<br>
* 在使用语音识别时,需要实现这个协议中的方法. * 在使用语音识别时,需要实现这个协议中的方法.
*/ */
@protocol IFlySpeechRecognizerDelegate <NSObject> @protocol IFlySpeechRecognizerDelegate <NSObject>
@@ -29,18 +29,17 @@ typedef void(^IFlyOnBuildFinishCompletionHandler)(NSString* grammarId,IFlySpeech
/*! /*!
* 识别结果回调 * 识别结果回调
* 在进行语音识别过程中的任何时刻都有可能回调此函数,你可以根据errorCode进行相应的处理, *
* 当errorCode没有错误时,表示此次会话正常结束;否则,表示此次会话有错误发生。特别的当调用 * 在进行语音识别过程中的任何时刻都有可能回调此函数,你可以根据errorCode进行相应的处理,当errorCode没有错误时,表示此次会话正常结束;否则,表示此次会话有错误发生。特别的当调用`cancel`函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函数之前如果重新调用了`startListenging`函数则会报错误。
* `cancel`函数时,引擎不会自动结束,需要等到回调此函数,才表示此次会话结束。在没有回调此函数
* 之前如果重新调用了`startListenging`函数则会报错误。
* *
* @param errorCode 错误描述 * @param errorCode 错误描述
*/ */
- (void) onError:(IFlySpeechError *) errorCode; - (void) onCompleted:(IFlySpeechError *) errorCode;
/*! /*!
* 识别结果回调 * 识别结果回调
* 在识别过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。 *
* 在识别过程中可能会多次回调此函数,你最好不要在此回调函数中进行界面的更改等操作,只需要将回调的结果保存起来。<br>
* 使用results的示例如下: * 使用results的示例如下:
* <pre><code> * <pre><code>
* - (void) onResults:(NSArray *) results{ * - (void) onResults:(NSArray *) results{
@@ -60,36 +59,36 @@ typedef void(^IFlyOnBuildFinishCompletionHandler)(NSString* grammarId,IFlySpeech
@optional @optional
/*! /*!
* 音量变化回调 * 音量变化回调<br>
* 在录音过程中,回调音频的音量。 * 在录音过程中,回调音频的音量。
* *
* @param volume -[out] 音量,范围从0-30 * @param volume -[out] 音量,范围从0-30
*/ */
- (void) onVolumeChanged: (int)volume; - (void) onVolumeChanged: (int)volume;
/*! /*!
* 开始录音回调 * 开始录音回调<br>
* 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。 * 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。<br>
* 如果发生错误则回调onError:函数 * 如果发生错误则回调onCompleted:函数
*/ */
- (void) onBeginOfSpeech; - (void) onBeginOfSpeech;
/*! /*!
* 停止录音回调 * 停止录音回调<br>
* 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。 * 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。<br>
* 如果发生错误则回调onError:函数 * 如果发生错误则回调onCompleted:函数
*/ */
- (void) onEndOfSpeech; - (void) onEndOfSpeech;
/*! /*!
* 取消识别回调 * 取消识别回调<br>
* 当调用了`cancel`函数之后,会回调此函数,在调用了cancel函数和回调onError之前会有一个 * 当调用了`cancel`函数之后,会回调此函数,在调用了cancel函数和回调onCompleted之前会有一个<br>
* 短暂时间,您可以在此函数中实现对这段时间的界面显示。 * 短暂时间,您可以在此函数中实现对这段时间的界面显示。
*/ */
- (void) onCancel; - (void) onCancel;
#ifdef _EDUCATION_ #ifdef _EDUCATION_
/** /*!
* 返回音频Key * 返回音频Key
* *
* @param key 音频Key * @param key 音频Key
@@ -98,8 +97,8 @@ typedef void(^IFlyOnBuildFinishCompletionHandler)(NSString* grammarId,IFlySpeech
#endif #endif
/** /*!
* 扩展事件回调 * 扩展事件回调<br>
* 根据事件类型返回额外的数据 * 根据事件类型返回额外的数据
* *
* @param eventType 事件类型,具体参见IFlySpeechEventType的IFlySpeechEventTypeVoiceChangeResult枚举。 * @param eventType 事件类型,具体参见IFlySpeechEventType的IFlySpeechEventTypeVoiceChangeResult枚举。
@@ -56,20 +56,15 @@
/*! /*!
* 设置合成参数 * 设置合成参数
* <table> *
* <thead> * | 参数 | 描述 |
* <tr><th>参数</th><th><em>描述</em></th> * |-----------------|----------------------------------------------------|
* </tr> * | speed | 合成语速,取值范围 0~100 |
* </thead> * | volume | 合成的音量,取值范围 0~100 |
* <tbody> * | voice_name | 默认为”xiaoyan”;可以设置的参数列表可参考个性化发音人列表 |
* <tr><td>speed</td><td>合成语速,取值范围 0~100</td></tr> * | sample_rate | 采样率:目前支持的采样率设置有 16000 和 8000。 |
* <tr><td>volume</td><td>合成的音量,取值范围 0~100</td></tr> * | tts_audio_path | 音频文件名 设置此参数后,将会自动保存合成的音频文件。<br>路径为Documents/(指定值)。不设置或者设置为nil,则不保存音频。|
* <tr><td>voice_name</td><td>默认为”xiaoyan”;可以设置的参数列表可参考个性化发音人列表</td></tr> * | params | 扩展参数: 对于一些特殊的参数可在此设置。 |
* <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 value 参数取值
* @param key 合成参数 * @param key 合成参数
@@ -88,16 +83,16 @@
-(NSString*) parameterForKey:(NSString *)key; -(NSString*) parameterForKey:(NSString *)key;
/*! /*!
* 开始合成(播放) * 开始合成(播放)<br>
* 调用此函数进行合成,如果发生错误会回调错误`onCompleted` * 调用此函数进行合成,如果发生错误会回调错误`onCompleted`
* *
* @param text 合成的文本,最大的字节数为1k * @param text 合成的文本,最大的字节数为1k
*/ */
- (void) startSpeaking:(NSString *)text; - (void) startSpeaking:(NSString *)text;
/*! /*!
* 开始合成(不播放) * 开始合成(不播放)<br>
* 调用此函数进行合成,如果发生错误会回调错误`onCompleted` * 调用此函数进行合成,如果发生错误会回调错误`onCompleted`
* *
* @param text 合成的文本,最大的字节数为1k * @param text 合成的文本,最大的字节数为1k
* @param uri 合成后,保存再本地的音频路径 * @param uri 合成后,保存再本地的音频路径
@@ -105,8 +100,8 @@
-(void)synthesize:(NSString *)text toUri:(NSString*)uri; -(void)synthesize:(NSString *)text toUri:(NSString*)uri;
/*! /*!
* 暂停播放 * 暂停播放<br>
* 暂停播放之后,合成不会暂停,仍会继续,如果发生错误则会回调错误`onCompleted` * 暂停播放之后,合成不会暂停,仍会继续,如果发生错误则会回调错误`onCompleted`
*/ */
- (void) pauseSpeaking; - (void) pauseSpeaking;
@@ -11,15 +11,15 @@
@class IFlySpeechError; @class IFlySpeechError;
/** /*!
* 语音合成回调 * 语音合成回调
*/ */
@protocol IFlySpeechSynthesizerDelegate <NSObject> @protocol IFlySpeechSynthesizerDelegate <NSObject>
@required @required
/** /*!
* 结束回调 * 结束回调<br>
* 当整个合成结束之后会回调此函数 * 当整个合成结束之后会回调此函数
* *
* @param error 错误码 * @param error 错误码
@@ -28,12 +28,12 @@
@optional @optional
/** /*!
* 开始合成回调 * 开始合成回调
*/ */
- (void) onSpeakBegin; - (void) onSpeakBegin;
/** /*!
* 缓冲进度回调 * 缓冲进度回调
* *
* @param progress 缓冲进度,0-100 * @param progress 缓冲进度,0-100
@@ -41,33 +41,34 @@
*/ */
- (void) onBufferProgress:(int) progress message:(NSString *)msg; - (void) onBufferProgress:(int) progress message:(NSString *)msg;
/** /*!
* 播放进度回调 * 播放进度回调
* *
* @param progress 当前播放进度,0-100 * @param progress 当前播放进度,0-100
* @param beginPos 当前播放文本的起始位置0-100 * @param beginPos 当前播放文本的起始位置(按照字节计算),对于汉字(2字节)需/2处理
* @param endPos 当前播放文本的结束位置0-100 * @param endPos 当前播放文本的结束位置(按照字节计算),对于汉字(2字节)需/2处理
*/ */
- (void) onSpeakProgress:(int) progress beginPos:(int)beginPos endPos:(int)endPos; - (void) onSpeakProgress:(int) progress beginPos:(int)beginPos endPos:(int)endPos;
/** /*!
* 暂停播放回调 * 暂停播放回调
*/ */
- (void) onSpeakPaused; - (void) onSpeakPaused;
/** /*!
* 恢复播放回调 * 恢复播放回调<br>
* 注意:此回调方法SDK内部不执行,播放恢复全部在onSpeakBegin中执行
*/ */
- (void) onSpeakResumed; - (void) onSpeakResumed;
/** /*!
* 正在取消回调 * 正在取消回调<br>
* 当调用`cancel`之后会回调此函数 * 注意:此回调方法SDK内部不执行
*/ */
- (void) onSpeakCancel; - (void) onSpeakCancel;
/** /*!
* 扩展事件回调 * 扩展事件回调<br>
* 根据事件类型返回额外的数据 * 根据事件类型返回额外的数据
* *
* @param eventType 事件类型,具体参见IFlySpeechEventType枚举。目前只支持EVENT_TTS_BUFFER也就是实时返回合成音频。 * @param eventType 事件类型,具体参见IFlySpeechEventType枚举。目前只支持EVENT_TTS_BUFFER也就是实时返回合成音频。
@@ -1,134 +0,0 @@
//
// 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,xmlplain,默认为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,xmlplain,默认为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
@@ -12,73 +12,73 @@
@class IFlySpeechError; @class IFlySpeechError;
/** /*!
* 引擎模式 * 引擎模式
*/ */
typedef NS_ENUM(NSUInteger,IFlyEngineMode){ typedef NS_ENUM(NSUInteger,IFlyEngineMode){
/** /*!
* 云端使用MSC,本地优先使用语记 * 云端使用MSC,本地优先使用语记
*/ */
IFlyEngineModeAuto = 0, IFlyEngineModeAuto = 0,
/** /*!
* 只使用MSC * 只使用MSC
*/ */
IFlyEngineModeMsc, IFlyEngineModeMsc,
/** /*!
* 本地只使用语记(受平台限制,云端无法使用语记) * 本地只使用语记(受平台限制,云端无法使用语记)
*/ */
IFlyEngineModePlus, IFlyEngineModePlus,
}; };
/** /*!
* 服务类型 * 服务类型
*/ */
typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){ typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){
/** /*!
* 打开语记主界面 * 打开语记主界面
*/ */
IFlySpeechPlusServiceTypeNone=0, IFlySpeechPlusServiceTypeNone=0,
/** /*!
* 获取合成资源 * 获取合成资源
*/ */
IFlySpeechPlusServiceTypeTTS, IFlySpeechPlusServiceTypeTTS,
/** /*!
* 获取识别资源(未开放) * 获取识别资源(未开放)
*/ */
IFlySpeechPlusServiceTypeISR, IFlySpeechPlusServiceTypeISR,
/** /*!
* 获取唤醒资源(未开放) * 获取唤醒资源(未开放)
*/ */
IFlySpeechPlusServiceTypeIVW, IFlySpeechPlusServiceTypeIVW,
} ; } ;
/** 语记返回回调 /*! 语记返回回调
*/ */
@protocol IFlySpeechplusDelegate <NSObject> @protocol IFlySpeechplusDelegate <NSObject>
/** /*!
* 发生错误 * 发生错误
* *
* @param errorCode 错误码 * @param errorCode 错误码
*/ */
- (void)onError:(int)errorCode; - (void)onCompleted:(int)errorCode;
/** /*!
* 服务正常结束 * 服务正常结束
*/ */
- (void)onCompleted; - (void)onCompleted;
@end @end
/** /*!
* 用户配置 * 用户配置
*/ */
@interface IFlySpeechUtility : NSObject @interface IFlySpeechUtility : NSObject
/*! /*!
* 创建用户语音配置 * 创建用户语音配置<br>
* 注册应用请前往语音云开发者网站。<br> * 注册应用请前往语音云开发者网站。<br>
* 网站:http://www.xfyun.cn * 网站:http://www.xfyun.cn
* *
* @param params 启动参数,必须保证appid参数传入,示例:appid=123456 * @param params 启动参数,必须保证appid参数传入,示例:appid=123456
@@ -111,7 +111,7 @@ typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){
*/ */
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key; -(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
/** /*!
* 获取MSC引擎状态参数 * 获取MSC引擎状态参数
* *
* @param key 参数名 * @param key 参数名
@@ -120,32 +120,32 @@ typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){
*/ */
- (NSString *)parameterForKey:(NSString *)key; - (NSString *)parameterForKey:(NSString *)key;
/** /*!
* 引擎类型 * 引擎类型
*/ */
@property (nonatomic, readonly) IFlyEngineMode engineMode; @property (nonatomic, readonly) IFlyEngineMode engineMode;
/** /*!
* 语记协议委托 * 语记协议委托
*/ */
@property (nonatomic, assign) id<IFlySpeechplusDelegate> delegate; @property (nonatomic, assign) id<IFlySpeechplusDelegate> delegate;
@end @end
/** /*!
* 讯飞语记类别 * 讯飞语记类别
*/ */
@interface IFlySpeechUtility (SpeechPlus) @interface IFlySpeechUtility (SpeechPlus)
/** /*!
* 检查讯飞语记是否安装 * 检查讯飞语记是否安装
* *
* @return 已安装返回YES,否则返回NO * @return 已安装返回YES,否则返回NO
*/ */
+ (BOOL)checkServiceInstalled; + (BOOL)checkServiceInstalled;
/** /*!
* 获取讯飞语记下载地址进行下载,安装完成后即可使用服务。 * 获取讯飞语记下载地址进行下载,安装完成后即可使用服务。<br>
* 下载地址需要通过[[UIApplication sharedApplication] openUrl:]打开 * 下载地址需要通过[[UIApplication sharedApplication] openUrl:]打开
* *
* @return 讯飞语记在App Store下载地址 * @return 讯飞语记在App Store下载地址
@@ -153,9 +153,9 @@ typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){
+ (NSString *)componentUrl; + (NSString *)componentUrl;
/** /*!
* 注意:此接口废弃,不再需要使用 * 注意:此接口废弃,不再需要使用<br>
* 处理语记使用URL启动第三方应用程序时传递的数据 * 处理语记使用URL启动第三方应用程序时传递的数据<br>
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。 * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
* *
* @param url 语记启动第三方应用程序时传递过来的URL * @param url 语记启动第三方应用程序时传递过来的URL
@@ -164,7 +164,7 @@ typedef NS_ENUM(NSUInteger,IFlySpeechPlusServiceType){
*/ */
- (BOOL)handleOpenURL:(NSURL *)url iOS_EXCLUSIVE; - (BOOL)handleOpenURL:(NSURL *)url iOS_EXCLUSIVE;
/** /*!
* 打开讯飞语记获取相应类型服务,0表示打开主界面 * 打开讯飞语记获取相应类型服务,0表示打开主界面
* *
* @param serviceType 服务类型 * @param serviceType 服务类型
@@ -1,57 +0,0 @@
//
// 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
@@ -16,7 +16,8 @@
/*! /*!
* 初始化对象 * 初始化对象
* 在进行初始化时,需要传入的格式如下: *
* 在进行初始化时,需要传入的格式如下:
* <pre><code>{\"userword\":[{\"name\":\"iflytek\",\"words\":[\"科大讯飞\", * <pre><code>{\"userword\":[{\"name\":\"iflytek\",\"words\":[\"科大讯飞\",
* \"云平台\",\"用户词条\",\"开始上传词条\"]}]}</code></pre> * \"云平台\",\"用户词条\",\"开始上传词条\"]}]}</code></pre>
* *
@@ -10,170 +10,74 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "IFlyVoiceWakeuperDelegate.h" #import "IFlyVoiceWakeuperDelegate.h"
/** #define IFLY_AUDIO_SOURCE_MIC @"1"
#define IFLY_AUDIO_SOURCE_STREAM @"-1"
版本描述:唤醒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形式:
ID201530
每个数字代表对应资源的阀值,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 @interface IFlyVoiceWakeuper : NSObject
{
} /*!
* 代理
*/
@property (nonatomic, assign) id<IFlyVoiceWakeuperDelegate> delegate;
@property(assign) id<IFlyVoiceWakeuperDelegate> delegate; /*!
* 是否正在唤醒
*/
@property (nonatomic, readonly) BOOL isListening;
/** /*!
创建唤醒实例,采用单例模式 * 创建唤醒实例,采用单例模式
*/ */
+ (instancetype) sharedInstance; + (instancetype) sharedInstance;
/** /*!
启动唤醒 * 启动唤醒
返回值:YES 成功,NO:失败 * 返回值:YES 成功,NO:失败
*/ */
-(BOOL) startListening; -(BOOL) startListening;
/** /*!
取消唤醒会话 * 停止录音
注意与cancel的区别,紧紧停止服务,并不释放资源
*/ */
-(BOOL) stopListening; -(BOOL) stopListening;
/** /*!
获取工作参数 * 取消唤醒会话
*/
-(NSString*) getParameter:(NSString *)key;
/**
设置工作参数
注意服务正在运行中,不能设置参数
*/
-(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
/**
取消唤醒会话,并释放内部资源
*/ */
-(BOOL) cancel; -(BOOL) cancel;
/** /*!
唤醒业务更新,目前支持合并资源操作 * 获取工作参数
*/ */
//+(int) updateWords:(NSString *)action params:(NSString*) params; -(NSString*) getParameter:(NSString *)key;
/** /*!
写入录音数据 * 设置工作参数<br>
暂时紧紧支持唤醒的写入,注册服务尚不支持 * 注意服务正在运行中,不能设置参数
*/ */
//-(int) writeAudio:(const void*)buffer offset:(int)offset length:(int)length; -(BOOL) setParameter:(NSString *) value forKey:(NSString*)key;
@property (readonly) BOOL isListening;
@end @end
/*!
* 音频流唤醒<br>
* 音频流唤醒可以将文件分段写入
*/
@interface IFlyVoiceWakeuper(IFlyStreamVoiceWakeuper)
/*!
* 写入音频流
*
* @param audioData 音频数据
*
* @return 写入成功返回YES,写入失败返回NO
*/
- (BOOL) writeAudio:(NSData *) audioData;
@end
@@ -13,70 +13,46 @@
@class IFlySpeechError; @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> @protocol IFlyVoiceWakeuperDelegate <NSObject>
@optional @optional
/** /*!
录音开始 * 录音开始
*/ */
-(void) onBeginOfSpeech; -(void) onBeginOfSpeech;
/** /*!
录音结束 * 录音结束
*/ */
-(void) onEndOfSpeech; -(void) onEndOfSpeech;
/** /*!
会话错误 * 会话错误
@param errorCode 错误描述类, *
*/ * @param errorCode 错误描述类,
- (void) onError:(IFlySpeechError *) error;
/**
唤醒
resultID:唤醒词位置
*/ */
-(void) onResult:(NSMutableDictionary *)resultArray; - (void) onCompleted:(IFlySpeechError *) error;
/** /*!
音量反馈,返回频率与录音数据返回回调频率一致 * 唤醒结果
volume:音量值 *
* @param resultDic 唤醒结果字典
*/
-(void) onResult:(NSMutableDictionary *)resultDic;
/*!
* 音量反馈,返回频率与录音数据返回回调频率一致
*
* @param volume 音量值
*/ */
- (void) onVolumeChanged: (int)volume; - (void) onVolumeChanged: (int)volume;
/*!
/** 扩展事件回调 * 扩展事件回调<br>
* 根据事件类型返回额外的数据
根据事件类型返回额外的数据 *
@param eventType 事件类型,具体参见IFlySpeechEvent枚举。 @param eventType 事件类型,具体参见IFlySpeechEvent枚举。
*/ */
- (void) onEvent:(int)eventType isLast:(BOOL)isLast arg1:(int)arg1 data:(NSMutableDictionary *)eventData; - (void) onEvent:(int)eventType isLast:(BOOL)isLast arg1:(int)arg1 data:(NSMutableDictionary *)eventData;
Binary file not shown.