因為一個項目的需要,開始接觸這個,我本身能力很有限,簡單的語音合成就花了我很長時間,現(xiàn)在跟大家分享一下代碼第一步:
首先去訊飛語音官網(wǎng)注冊賬號,創(chuàng)建應(yīng)用,選擇你需要的服務(wù),下載相應(yīng)的SDK。
第二部:導(dǎo)入jar包和so文件
論壇上大多代碼是eclipse的,比較簡單,這里介紹一下Android Studio的導(dǎo)入方法:
1、首先,將左側(cè)的顯示改成PRoject視圖
2、將下載的訊飛語音包內(nèi) libs文件夾下,Msc.jar和armeabi分別按圖導(dǎo)入相應(yīng)的位置
Android Studio導(dǎo)入后的樣子
第三步:添加權(quán)限
在AndroidManifest中添加如下權(quán)限(有的好像用不到,個別我也不是很懂)
<!--連接網(wǎng)絡(luò)權(quán)限,用于執(zhí)行云端語音能力 --> <uses-permission android:name="android.permission.INTERNET"/> <!--獲取手機錄音機使用權(quán)限,聽寫、識別、語義理解需要用到此權(quán)限 --> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <!--讀取網(wǎng)絡(luò)信息狀態(tài) --> <uses-permission android:name="android.permission.access_NETWORK_STATE"/> <!--獲取當(dāng)前wifi狀態(tài) --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--允許程序改變網(wǎng)絡(luò)連接狀態(tài) --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <!--讀取手機信息權(quán)限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!--讀取聯(lián)系人權(quán)限,上傳聯(lián)系人需要用到此權(quán)限 --> <uses-permission android:name="android.permission.READ_CONTACTS"/> <!-- 讀寫SD卡權(quán)限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />第四步:Layout 文件
只想做一個簡單的例子,這里只寫一個按鈕,點擊時手機讀出預(yù)先設(shè)定好的文字
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.examlpe.google.speakdemo2.MainActivity"> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /></RelativeLayout>第五步:MainActivitypackage com.examlpe.google.speakdemo2;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.iflytek.cloud.InitListener;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechSynthesizer;import com.iflytek.cloud.SpeechUtility;import com.iflytek.cloud.SynthesizerListener;public class MainActivity extends Activity implements View.OnClickListener { Button speak; private static final String APPID = "58aad20c"; private SpeechSynthesizer speechSynthesizer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); speak = (Button) findViewById(R.id.bt); speak.setOnClickListener(this); //創(chuàng)建語音配置對象,appid= 后面的字符串在訊飛語音我的應(yīng)用中找,每個應(yīng)用有特定的appid SpeechUtility.createUtility(MainActivity.this,"appid=********"); //1.創(chuàng)建SpeechSynthesizer對象, 第二個參數(shù):本地合成時傳InitListener ,可寫為null speechSynthesizer = SpeechSynthesizer.createSynthesizer(MainActivity.this, null); //語音合成參數(shù)設(shè)置,詳見《科大訊飛MSC API手冊(Android)》SpeechSynthesizer 類 speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//設(shè)置發(fā)音人 speechSynthesizer.setParameter(SpeechConstant.SPEED, "50");//設(shè)置語速 speechSynthesizer.setParameter(SpeechConstant.VOLUME, "80");//設(shè)置音量,范圍0~100 } //本地合成時用到 /*private InitListener myInitListener = new InitListener() { @Override public void onInit(int code) { Log.d("mySynthesiezer:", "InitListener init() code = " + code); } };*/ //合成監(jiān)聽器 private SynthesizerListener mListener = new SynthesizerListener(){ @Override public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "合成bpro", Toast.LENGTH_LONG).show(); } @Override public void onCompleted(SpeechError error) { // TODO Auto-generated method stub if(error!=null) { Log.d("mySynthesiezer complete code:", error.getErrorCode()+""); } else { Log.d("mySynthesiezer complete code:", "0"); } Toast.makeText(MainActivity.this, "合成完成", Toast.LENGTH_LONG).show(); } @Override public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) { // TODO Auto-generated method stub } @Override public void onSpeakBegin() { // TODO Auto-generated method stub } @Override public void onSpeakPaused() { // TODO Auto-generated method stub } @Override public void onSpeakProgress(int arg0, int arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onSpeakResumed() { // TODO Auto-generated method stub } }; @Override public void onClick(View v) { if(v.getId() == R.id.bt){ //開始合成 speechSynthesizer.startSpeaking("this", mListener); Log.d("mySynthesiezer start code:", "start"); Toast.makeText(MainActivity.this, "dianji", Toast.LENGTH_LONG).show(); } }}appid查找方法:
到此,一個簡單的例子就完成了,運行截圖就一個按鈕,沒什么可看的,就不放了,之后會打包源碼送上,有問題歡迎交流
新聞熱點
疑難解答