赞
踩
创建讯飞应用:在讯飞开发平台注册账号,在网站上创建应用,得到一个APPID,这个ID用来绑定讯飞SDK和自己制作的APP
创建SDK:选择所需服务(如语言听写)、平台(Android)、和应用(第一步创建的应用),然后下载该SDK。SDK主要有三个文件夹,/assets,/libs,/sample.
创建android Studio项目:新建项目,修改项目名(如VoiceDemo)后其余都为默认,创建一个helloworld项目,文件浏览方式默认为Android,改为Project方式。
复制.jar文件:将SDK中/libs文件夹中的.jar文件都复制到android项目VoiceDemo/app/libs/文件夹下。可能由于生成SDK时只选择语言听写,只有两个.jar文件(分别为Msc.jar,Sunflower.jar)
复制.so文件:先在android项目VoiceDemo/app/src/main/下新建文件夹/jniLibs,将SDK中/libs下的包含.so文件夹全部复制到VoiceDemo/app/src/main/jniLibs/文件夹下。总共七个文件夹分别是/arm64-v8a,/armeabi,/armeabi-v7a,/mips,/mips64,/x86,/86_64,每个文件夹下都只有一个名为libmsc.so的文件
复制/assets文件夹:将SDK中/assets文件夹复制到VoiceDemo/app/src/main/下
刷新.gradle文件:选中VoiceDemo/app下的build.gradle,右键选择Synchronize 'build.gradle',依次刷新其它两个.gradle文件。工具栏中也有Synch Project with Gradle Files*可能达到同样效果。在这一步中.gradle中没有出现文章二中的代码,我也没有手动添加,但好像影响不大。初次接触Android编程,不懂原理,希望热心人解答。
编辑权限:在*VoiceDemo/app/src/main/AndroidManifest.xml文件中依照第二篇文章代码添加相应权限;
编辑布局:在*VoiceDemo/app/src/main/res/layout/activity_main.xml文件中依照第二篇文章添加按钮和文本框
权限配置:
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <!--读取网络信息状态 -->
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- <!--获取当前wifi状态 -->
- <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.WRITE_SETTINGS" />
初始化:
创建语音配置对象,只有初始化后才能使用MSC的各项服务,
一般在程序入口,(Application,Activity的onCreate方法中)
- SpeechUtility.createUtility(context, SpeechConstant.APPID +"=59f05070");
- //=后面这里要替换成自己申请的 AppID
package com.itheima.xunfeidemo; import android.app.Activity; import android.util.Log; import com.iflytek.cloud.SpeechConstant; import com.iflytek.cloud.SpeechSynthesizer; import com.iflytek.cloud.SpeechUtility; /** * Created by lenovo on 2018/4/7. */ public class Speek { protected SpeechSynthesizer mTts; private Activity activity; private static final String TAG = "Speek"; public Speek(Activity activity){ this.activity=activity; initTTs(); } public void Speeking(String text) { //3.开始合成 mTts.startSpeaking(text, null); } public void initTTs() { // 将“12345678”替换成您申请的 APPID,申请地址: http://www.xfyun.cn // 请勿在“ =”与 appid 之间添加任务空字符或者转义符 初始化SDK SpeechUtility.createUtility(activity, SpeechConstant.APPID +"=5ac39c04"); //1.创建 SpeechSynthesizer 对象, 第二个参数: 本地合成时传 InitListener mTts= SpeechSynthesizer.createSynthesizer(activity, mSynListener); //2.合成参数设置,详见《 MSC Reference Manual》 SpeechSynthesizer 类 //设置发音人(更多在线发音人,用户可参见 附录13.2 mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置发音人 mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速 mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围 0~100 mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端 //设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm” //保存在 SD 卡需要在 AndroidManifest.xml 添加写 SD 卡权限//仅支持保存为 pcm 和 wav 格式, 如果不需要保存合成音频,注释该行代码 mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm"); } //合成监听器 private SynthesizerListener mSynListener = new SynthesizerListener() { //会话结束回调接口,没有错误时,error为null public void onCompleted(SpeechError error) { } //缓冲进度回调 //percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在文本中结束位置,info为附加信息。 public void onBufferProgress(int percent, int beginPos, int endPos, String info) { } //开始播放 public void onSpeakBegin() { } //暂停播放 public void onSpeakPaused() { } //播放进度回调 //percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文本中结束位置. public void onSpeakProgress(int percent, int beginPos, int endPos) { } //恢复播放回调接口 public void onSpeakResumed() { } //会话事件回调接口 public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) { } }; private void print(String message) { Log.i(TAG, message); } private void checkResult(int result, String method) { if (result != 0) { print("error code :" + result + " method:" + method + ", 错误码文档:http://yuyin.baidu.com/docs/tts/122 "); } } public void Destory(){ if (mTts != null){ mTts.stopSpeaking(); mTts.destroy(); mTts = null; print("释放资源成功"); } } }
package com.itheima.xunfeidemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.google.gson.Gson; import com.iflytek.cloud.RecognizerResult; import com.iflytek.cloud.SpeechConstant; import com.iflytek.cloud.SpeechError; import com.iflytek.cloud.SpeechSynthesizer; import com.iflytek.cloud.SpeechUtility; import com.iflytek.cloud.ui.RecognizerDialog; import com.iflytek.cloud.ui.RecognizerDialogListener; import java.util.List; public class MainActivity extends AppCompatActivity { private EditText test; private Button button; private String message; private Speek speek; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); speek=new Speek(this); initView(); } private void initView(){ test=(EditText)findViewById(R.id.editText); button=(Button)findViewById(R.id.begin); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { message=test.getText().toString(); if(!message.equals("")) { speek.Speeking(message); } else { speek.Speeking("请告诉我,您需要我说些什么"); } } }); } } 效果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。