帖子

[官方问题解答] 【官网】安卓平台的常见问题

[复制链接]

该用户从未签到

470814  楼主| qwerdrqwe@163.c 发表于 2014-9-17 13:57:57 1#
本帖最后由 xugao2@iflytek. 于 2015-5-8 22:50 编辑

以下是安卓平台上面开发者经常提问的问题,希望这个帖子可以帮助开发者们更加便捷的找到自已所需要的答案。



-----------------------------------------分割线--------------------------------------------------------------------------

Q:为什么工程混淆前正常运行,混淆生成APK或JAR之后出错?

A:您如果需要打包或者生成APK的时候进行混淆,请在proguard.cfg中添加如下代码
-dontwarn com.iflytek.**
-keepattributes Signature
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep class com.iflytek.**{*;} ,可以对比提供的MscDemo看看。

Q:为什么语音识别报20006初始化错误?
A1:如果录音失败,请检查以下信息
1.应用AndroidMainfest是否加入录音权限,请参考Demo中设置。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
2.设备是否支持16K采样率,普通的手机一般都可以支持8K和16K,不知是否使用了其他设备;
3.是否在模拟器上进行调试,模拟器默认不支持录音;
4.系统的录音机运行是否可以正常运行
5.当前是否开启了录音程序导致麦克被占用中.

Q:为什么接入点选择CMWAP时提示“10109 数据格式不正确”?
A:由于WAP网关对音频的连续发送有限制,故造成客户端解析收到的数据包时出错,建议您先使用NET网络。

Q:文档中介绍的接口和参数为什么没有生效?
A:请检查msc.jar和libmsc.so是否成功替换,您可以通过Version.getVersion()获取当前使用的SDK版本号,与论坛上链接的最新版本号比对。

Q:jar包的引用?
A:除了拷贝到libs下,并导入外,还可以通过直接ADD External JARS来引用,只要保证classpath里有jar包, lib能被打进apk里就行。

Q:转写结果为空?
A:
1、这个问题应该和音频有关,看看是不是噪音过大造成识别结果为NULL;
2、manifest里面加入读写音频的权限;
3、看下是否对onResult的结果进行累加了,因为默认是会话模式,也就是说识别结果          是分次返回的,如果没有对识别结果进行累加,只取最后一次结果是不对的。

Q:切换到后台,就停止合成,如何避免?
A:可以在Activity的onStop或onPause中,去掉SynthesizerPlayer.cancel方法,这样就不会停止了,上层调用问题

Q:利用dateuploader上传的词条数据怎么在语音通行证里面看不到?
是不是存到其他地方了,那语音通行证里面的词条编译是用来干什么的?
A:
1、每个应用上传的词条都只存储在对应应用目录,也只对此应用生效。
2、语音通行证与语音云账户绑定,可以针对所有的应用生效,所以你上传的词条在语音通行证中是看不到的。

Q:关于语音识别部分开放接口部分是否只包括开发文档上关于语音识别的 RecognizerDialog接口,是否有或者是开放其他的接口,比如后台 service服务,或者是广播激活等接口。
A:网站上开放的识别接口目前包括 UI组件RecognizerDialog 接口、无UI组件SpeechRecognizer,您可以自己定义service,将SpeechRecognizer封装进去,这时候可以将application的context传给SpeechRecognizer。

Q:比如我第一次上传了"张三,李四,王五",第二次又上传了"张三",这样的话,我的词典库是"张三,张三,李四,王五",还是"张三,李四,王五",还是只有"张山",是覆盖还是累加方式,还有我怎么能查看我的词典库?
A:用户词表重新上传是采用覆盖的方式,不是累加的方式,客户端可以通过DataDownloader下载用户词表

Q:使用过程中仅支持中英文混合识别,是否支持纯英文识别
A:是支持的,参考http://club.voicecloud.cn/forum.php?mod=viewthread&tid=7139&extra=

Q:java版本使用写音频时,支持什么格式
A:现在写音频只支持采样率16k或者8k,采样精度16bit,单声道的pcm或者wav格式的音频

Q:UploadDialogListener接口使用出现异常,是否不再支持
A:现在UploadDialogListener接口不再支持了,可以使用SpeechListener接口

Q:科大讯飞是否支持粤语的识别、合成
A:现在识别和合成都是支持粤语的,但是使用语法文件进行识别的话,是不支持粤语的

Q:用户是否可以自造词进行识别?
A:用户可以将自己想要优先识别的词汇(可以为偏、难词汇)做成用户词表上传至服务器,在进行识别时,会优先识别用户词表内容,提高用户体验度

Q:如何使用ssml格式的文本合成
A:    在讯飞语音+里,首先设置参数
      mTts.setParameter(SpeechConstant.PARAMS, "ttp=ssml");
      然后合成
      int code = mTts.startSpeaking("<?xml version=\"1.0\" \]

     encoding=\"GB2312\"?><speak xml:lang=\"cn\"><sentence>风<break                                                                time=\"500ms\"/>轻轻摇着树梢</sentence></speak>", mTtsListener);

Q:安装讯飞语音+后,下载开发包,运行demo,不能进行离线合成
A:demo的代码中是默认使用在线合成的,在TtsDemo.java中将mTts.setParameter(SpeechConstant.ENGINE_TYPE, "cloud");中的cloud改成local即可

Q:运行MscDemo崩溃,报找不到***.Activity的错误
A:不同版本SDK运行Demo报错
分析原因:如果Eclipse的ADT插件升级到14以上,在运行MscDemo时需要把Project.properties修改为android-14或以上,再重新导入,否则由于高版本ADT编译时会在.classpath中生成默认项,导致低版本android sdk下应用程序报错。
根本原因:Android 高版本ADT和低版本不兼容导致

Q:合成所需流量是多少?
A:参数16k 16bit, 10~15网络压缩率,不计标点情况下,平均每个汉字所需流量为0.43KB~0.64KB。

Q:服务端返回关键字识别结果的时间是多久?
A:目前关键字数量低于10000的语法,响应时间都在1秒以下。

Q:想咨询一下armeabi和armeabi-v7a是否有差异?应该用哪个较好?
A:armeabi和armeabi-v7a两种处理器,您可以通过adb shell->getprop命令查看自己使用的是哪个处理器,然后选择适合自己的处理器。如果客户的处理器不是针对浮点运算或高级扩展功能,一般都建议直接使用armeabi。

Q:使用讯飞语音+时,支持语义识别的命令词识别吗?
A:现在该接口还不能实现,正在研发中

Q:android平台开发,报错显示没有找到麦克风 如何释放麦克风资源?
A:开发者在使用msc时,已将在外部不断实时获取麦克风资源,导致msc获取不到麦克风资源,audiorecord可以使用audioRcord.release();释放,mediarecord可以通过mediaRecord.release()释放。

Q:讯飞语音+,合成出现错误,错误代码21003
A:使用讯飞语音+,进行语音合成出现错误,错误代码21003,在错误代码列表中没有21003的错误。
具体解决方案:使用时,播放器未初始化就调用合成接口(startSpeaking),需要先监听(OnInitListener)消息,初始化成功以后才能调用合成接口。即在调用合成接口进行文字语音合成前,首先要对播放器进行初始化。

Q:讯飞语音+ 自定义界面是否收费,没有自定义相关的api
A:自定义界面的意思是您可以自己写界面,我们不提供界面,只提供识别、这样会使开发者有更多自由去设计自己的程序,并不是我们提供界面api,那样的话会限制页面的样式的

Q:有没有基于html5的web版api可用
A:现在没有web直接调用的接口,建议使用flash版的嵌套在页面中

Q;论坛中没有找到c#版的相关源代码
A:可以到这个帖中看看,一楼有源代码下载,http://club.voicecloud.cn/forum.php?mod=viewthread&tid=436&highlight=c%23

Q:如何使用讯飞语音+的关键字识别功能
A:讯飞语音+的关键字识别是使用SpeechRecognizer的buildGrammar方法,其中grammarType使用"keyword",grammarContent是关键字,关键字用英文逗号隔开

Q:自己实现了使用c#调用dll动态库,服务器端返回的是wav格式的音频,能不能返回MP3格式的音频
A:现在不能支持服务端的这种格式转换,可以自己第三方进行转换

 楼主| qwerdrqwe@163.c 发表于 2014-9-17 13:58:08
2#
Q:讯飞语音+是否有判断是在暂停还是在停止状态的接口
A:SpeechSynthesizer中有isSpeaking函数,可以获取到是在播放还是未播放,暂时不能获取到是在暂停还是停止状态

Q:讯飞语音+ 能否实现在未说话时,一直保持录音状态,在有人说话时,再开始识别
A:现在不能实现,一段时间不说话以后,就会结束识别

Q:使用语音转写,开始录音时,系统其他声音会断掉,如音乐播放器会停止播放音乐
A:在ios平台是这样的,在进行录音时是不允许播放音乐的,会将其停掉,在android平台可以通过参数SpeechConstant.KEY_REQUEST_FOCUS 设置

Q:能够进行命令词识别,但是如何执行这个动作命令
A:实现动作和语法语义没有关系,需要开发者手动写代码。调用相关接口实现,讯飞开发包没有提供这种接口

Q:讯飞语音+进行语义理解,有没有判断语义理解结束的接口?
A:语音理解结束使用onResult接口。onEndOfSpeech是语音到语义场景下,说话结束的回调接口

Q:BOS和EOS代表着什么  
A:EOS后端点,停止说话到停止录音中间的静音 BOS是开始录音到开始说话中间的时间是前端点
使用道具 举报 回复
eddiego@tom.com 发表于 2014-9-20 14:30:26
3#
支持一下,顺便请教一个问题,仅需要朗读的 android 开发可以不安装讯飞语音+么?
使用道具 举报 回复
 楼主| qwerdrqwe@163.c 发表于 2014-9-22 13:31:48
4#
eddiego@tom.com 发表于 2014-9-20 14:30
支持一下,顺便请教一个问题,仅需要朗读的 android 开发可以不安装讯飞语音+么? ...

可以不安装,但是不安装语音+就只能使用在线合成(朗读)功能,装了语音+就可以支持离线合成(朗读)。
使用道具 举报 回复
784810789@qq.co 发表于 2014-10-9 11:16:03
5#
我想问一下,我实现这个接口RecognizerListener() ,里面有一个onevent方法,为什么调用它的时候报抽象方法为实现,可是我实现了啊
使用道具 举报 回复
jlyan 发表于 2014-10-9 14:17:59
6#
如何使用的,具体出现什么错误了?
使用道具 举报 回复
yaogeili@163.co 发表于 2015-3-12 10:05:59
7#
正好需要用到语音转文字,试了一下,讯飞非常强大。

但是我遇到一个问题:
从demo中,只能看到实时的听写,如何对外部音频文件进行听写呢?

从文档中看到
读外部音频文件,AUDIO_SOURCE设置为-2。
请问下一步音频文件要如何传入,讯飞都支持什么格式呢?
使用道具 举报 回复
yaogeili@163.co 发表于 2015-3-12 13:12:37
8#
yaogeili@163.co 发表于 2015-3-12 10:05
正好需要用到语音转文字,试了一下,讯飞非常强大。

但是我遇到一个问题:

问题已经解决了
http://club.voicecloud.cn/forum.php?mod=viewthread&tid=7061
使用道具 举报 回复
281287845@qq.co 发表于 2015-4-19 19:29:03
9#
我想问下,为什么下载的离线语音和语音+组合包中只有部分本地资源(common.jet,xiaofeng.jet,xiaoyan.jet)没有文档中写的catherine.jet和xiaomei.jet呢
使用道具 举报 回复
myuniversal 发表于 2015-8-27 09:34:23
10#
楼主,请教下,在手册中查到,如果要做语音合成功能,只需要如下代码即可完成:
                SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(getApplicationContext(), null);
                mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
                mTts.setParameter(SpeechConstant.SPEED, "50");
                mTts.setParameter(SpeechConstant.VOLUME, "100");
                mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
                mTts.startSpeaking("测试测试测试", mSynListener);
但是实际测试下来,并不管用。
然后按照第7部分的说法,添加了一个判断:
                if (!SpeechUtility.getUtility().checkServiceInstalled()) {
                    Log.d("tts", "try to install");
                    String url = SpeechUtility.getUtility().getComponentUrl();
                    Uri uri = Uri.parse(url);
                    Log.d("tts", "uri:" + uri);
                    Intent it = new Intent(Intent.ACTION_VIEW, uri);
                    startActivity(it);
                }
发现确实走到应用安装部分了,而下载下来的应用名字叫语记,这个应用下载下来之后,就能正常播报了。

我的疑问是,如果不下载,理论上应该直接使用云端数据才对的吧,我联网的状态下应该能播报,实测下来有问题,楼主能指点下是怎么回事么?谢谢!
使用道具 举报 回复