Android 科大訊飛語音整合,文字轉語音
阿新 • • 發佈:2019-02-03
前言:
記錄一下科大訊飛的文字轉語音功能的sdk的整合過程,希望能夠幫助到大家。
1. 登入官網,應用註冊。
訊飛開放平臺,進行簡單的開發者註冊。進入個人中心,註冊應用。
註冊完成後,我們可以看到自己的appid。選擇自己要開通的功能,然後下載sdk。
2. 專案整合
官網下載的程式碼包含了lib,document,sample,(沒有AS版本真的有點low)
將lib的so檔案和jar放入你的專案中,
檢視doc中的文件,
主要是箭頭所指那個,有詳細的介紹。
文字轉語音的demo程式碼主要是:
3.專案程式碼
看看我的專案中是如何整合該程式碼的。
1.許可權(自己看)
2.appid註冊。
在application的初始化中進行註冊(千萬不能忘記)
SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID +"=appid");
3.工具類
public class VoiceUtils {
private static VoiceUtils mVoice;
public static VoiceUtils getInstance(){
synchronized (VoiceUtils.class){
if (null==mVoice){
mVoice=new VoiceUtils();
}
return mVoice;
}
}
// 語音合成物件
private SpeechSynthesizer mTts;
// 預設發音人
private String voicer = "xiaoyan";
//初始化監聽器
private InitListener Listener;
//播放監聽器
private SynthesizerListener mSynthesizerListener;
public void initmTts(Context context, final String msg){
if(null==Listener){
Listener=new InitListener() {
@Override
public void onInit(int code) {
if (code != ErrorCode.SUCCESS) {
} else {
// 初始化成功,之後可以呼叫startSpeaking方法
// 注:有的開發者在onCreate方法中建立完合成物件之後馬上就呼叫startSpeaking進行合成,
// 正確的做法是將onCreate中的startSpeaking呼叫移至這裡
mTts.startSpeaking(msg,mSynthesizerListener);
}
}
};
}
if(null==mSynthesizerListener){
mSynthesizerListener= new SynthesizerListener() {
@Override
public void onSpeakBegin() {
}
@Override
public void onBufferProgress(int i, int i1, int i2, String s) {
}
@Override
public void onSpeakPaused() {
}
@Override
public void onSpeakResumed() {
}
@Override
public void onSpeakProgress(int i, int i1, int i2) {
}
@Override
public void onCompleted(SpeechError speechError) {
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
};
}
if(null==mTts){
mTts=SpeechSynthesizer.createSynthesizer(context, Listener);
mTts.setParameter(SpeechConstant.VOICE_NAME,voicer);
mTts.setParameter(SpeechConstant.SPEED,"50");
mTts.setParameter(SpeechConstant.VOLUME,"80");
mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
}else {
mTts.startSpeaking(msg,mSynthesizerListener);
}
}
}
單例很重要,不然只有第一次有用,mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);不能寫成
mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_LOCAL);會出錯。