Android 语音合成(使用科大讯飞sdk)

本文介绍如何在Android应用中集成科大讯飞的语音合成SDK,包括所需jar包及so文件的配置、AndroidManifest.xml文件中的权限声明、混淆规则的添加以及代码示例。文中还提供了初始化及语音合成的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/bufanni12/article/details/29574467

最近需要使用到语音播报的功能,在百度七武器百度语音和科大讯飞的语音当中考虑到准确性和专业性,选择了科大讯飞。科大讯飞所提供的Android开发sdk有两种一种是集成了自身产品语音+的sdk,功能比较强大但是会初始化语音服务模块;另一种是纯开发sdk不集成产品只需要导入相应jar包就可以使用。考虑到只用到了语音合成的技术所以选择了第二种sdk。

ps:要不是他sdk的官方文档写的太差了,也不会写这篇东西。

1,首先需要的jar包,一个是Msc.jar和libmsc.so文件(需要放到armeabi文件夹当中)。在官网中可以下载。

2,在AndroidManifest文件当中填写需要的权限。

[html] view plain copy
在CODE上查看代码片 派生到我的代码片
  1. <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
  2. <uses-permissionandroid:name="android.permission.INTERNET"/>
  3. <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
  4. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
  5. <uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>
  6. <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
3,在混淆打包的时候需要添加-keep class com.iflytek.**{*;},

4,在代码当中的使用:

[html] view plain copy
在CODE上查看代码片 派生到我的代码片
  1. packagecom.tts.demo;
  2. importcom.iflytek.cloud.ErrorCode;
  3. importcom.iflytek.cloud.InitListener;
  4. importcom.iflytek.cloud.SpeechConstant;
  5. importcom.iflytek.cloud.SpeechError;
  6. importcom.iflytek.cloud.SpeechSynthesizer;
  7. importcom.iflytek.cloud.SpeechUtility;
  8. importcom.iflytek.cloud.SynthesizerListener;
  9. importandroid.os.Bundle;
  10. importandroid.app.Activity;
  11. importandroid.util.Log;
  12. importandroid.view.Menu;
  13. importandroid.view.View;
  14. importandroid.view.View.OnClickListener;
  15. importandroid.widget.Button;
  16. publicclassMainActivityextendsActivityimplementsOnClickListener{
  17. privateSpeechSynthesizermySynthesizer;
  18. privateButtontts_Button;
  19. @Override
  20. protectedvoidonCreate(BundlesavedInstanceState){
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. tts_Button=(Button)findViewById(R.id.tts_button);
  24. tts_Button.setOnClickListener(this);
  25. /*
  26. 在使用语音平台上传应用包的时候会自定生成一个appid应该使用与包相对应的appid在申请提交后没有使用次数的限制
  27. */
  28. //语音初始化,在使用应用使用时需要初始化一次就好,如果没有这句会出现10111初始化失败
  29. SpeechUtility.createUtility(MainActivity.this,"appid=51e8ae25");
  30. //处理语音合成关键类
  31. mySynthesizer=SpeechSynthesizer.createSynthesizer(this,myInitListener);
  32. }
  33. privateInitListenermyInitListener=newInitListener(){
  34. @Override
  35. publicvoidonInit(intcode){
  36. Log.d("mySynthesiezer:","InitListenerinit()code="+code);
  37. }
  38. };
  39. @Override
  40. publicvoidonClick(Viewv){
  41. //TODOAuto-generatedmethodstub
  42. switch(v.getId()){
  43. caseR.id.tts_button:
  44. //设置发音人
  45. mySynthesizer.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");
  46. //设置音调
  47. mySynthesizer.setParameter(SpeechConstant.PITCH,"50");
  48. //设置音量
  49. mySynthesizer.setParameter(SpeechConstant.VOLUME,"50");
  50. intcode=mySynthesizer.startSpeaking("欢迎使用语音导航!",mTtsListener);
  51. Log.d("mySynthesiezerstartcode:",code+"");
  52. break;
  53. default:
  54. break;
  55. }
  56. }
  57. privateSynthesizerListenermTtsListener=newSynthesizerListener(){
  58. @Override
  59. publicvoidonSpeakBegin(){
  60. }
  61. @Override
  62. publicvoidonSpeakPaused(){
  63. }
  64. @Override
  65. publicvoidonSpeakResumed(){
  66. }
  67. @Override
  68. publicvoidonBufferProgress(intpercent,intbeginPos,intendPos,
  69. Stringinfo){
  70. }
  71. @Override
  72. publicvoidonSpeakProgress(intpercent,intbeginPos,intendPos){
  73. }
  74. @Override
  75. publicvoidonCompleted(SpeechErrorerror){
  76. if(error!=null)
  77. {
  78. Log.d("mySynthesiezercompletecode:",error.getErrorCode()+"");
  79. }
  80. else
  81. {
  82. Log.d("mySynthesiezercompletecode:","0");
  83. }
  84. }
  85. };
  86. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值