整合Android免費語音合成功能(線上、離線、離線上融合)

來源:互聯網
上載者:User

標籤:speed   com   原因   intern   查詢   出錯   param   pos   event   

整合Android免費語音合成功能(線上、離線、離線上融合),有這一篇文章就夠了(離線)
整合Android免費語音合成功能(線上、離線、離線上融合),有這一篇文章就夠了(離線上融合)

轉眼間,大半年沒寫文章了,沒什麼理由,就是人變懶了。囧~
看標題,其實大家都被騙了,有這一篇文章還不夠,我其實是打算分3篇文章來寫的,如果合在一章裡面就太長了,不過現在這個標題黨橫行的網路世界,我也被汙染了,哈。
那麼為什麼要分3篇文章來講呢?看標題也能猜到了,就是線上、離線、離線上融合這3種語音合成方式,我將分別使用科大訊飛、雲知聲、百度語音來實現Android的語音合成。至於有什麼優缺點,大家可以自行百度,這裡就不再贅言了,好吧,不說廢話了,我怕有人會打我,哈哈~
首先,這一篇先寫用科大訊飛實現的線上語音合成吧,是免費的,它的離線是要錢的,有需求的可以自己到它們官網去看看。
開啟訊飛開放平台

註冊、登入開發人員帳號


進入控制台,建立新應用

開通線上語音合成服務


下載SDK


下載完SDK後,解壓壓縮包sample-->SpeechDemo

開啟SpeechDemo-->libs檔案夾,複製jar包和.so檔案到你的項目裡面,然後sync一下


做完以上準備工作,就可以開始擼代碼了
首先,AndroidManifest.xml申請許可權(6.0需要動態申請許可權,礙於篇幅,請自行百度)
[html] view plain copy
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android. www.chuangyed.com permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android www.wmyl15.com/ permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android. www.senta77.com /permission.READ_PHONE_STATE" />
<uses-permission android:name="android. www.xucaizxyl.com/ permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android. www.lieqibiji.com/ permission.READ_CONTACTS" />
<uses-permission android:name="android. www.dejiaylsmile.cn permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android. www.6788878.cn/ permission.WRITE_SETTINGS" />
<uses-permission android:name="android. www.caihonyule.com permission.READ_EXTERNAL_STORAGE" />
然後,建立MyApplication.Java檔案,初始化語音合成SDK,APPID可在訊飛平台-->我的應用程式查看,也可查看下載的SDK壓縮包名字尾碼

[java] view plain copy
package com.cyf.ttsdemo;

import android.app.Application;

import com.iflytek.cloud.SpeechUtility;

/**
* Created by As on 2017/8/7.
*/

public class MyApplication extends Application{

@Override
public void onCreate() {
super.onCreate();
SpeechUtility.createUtility(this, "appid=5987d170");
}
}
最後記得在AndroidManifest.xml註冊該Application


為了可以全域調用語音合成功能,我封裝成了一個工具類,大家可以直接複製過去用
[java] view plain copy
package com.cyf.ttsdemo.utils;

import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

import com.cyf.ttsdemo.MyApplication;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechEvent;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SynthesizerListener;

/**
* Created by As on 2017/8/7.
*/

public class TTSUtils implements InitListener, SynthesizerListener {

private static final String TAG = "TTSUtils";
private static volatile TTSUtils instance = null;
private boolean isInitSuccess = false;
private SpeechSynthesizer mTts;

private TTSUtils() {
}

public static TTSUtils getInstance() {
if (instance == null) {
synchronized (TTSUtils.class) {
if (instance == null) {
instance = new TTSUtils();
}
}
}
return instance;
}

public void init() {
// 初始化合成對象
mTts = SpeechSynthesizer.createSynthesizer(www.qinlinyule.cn/ MyApplication.getContext(), this);
// 清空參數
mTts.setParameter(SpeechConstant.PARAMS, null);
// 設定線上合成引擎
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
// 設定線上合成發音人
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
// 設定合成語速
mTts.setParameter(SpeechConstant.SPEED, "50");
// 設定合成音調
mTts.setParameter(SpeechConstant.PITCH, "50");
// 設定合成音量
mTts.setParameter(SpeechConstant.VOLUME, "50");
// 設定播放器音頻流類型
mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
// 設定播放合成音頻打斷音樂播放,預設為true
mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");
// 設定音頻儲存路徑,儲存音頻格式支援pcm、wav,設定路徑為sd卡請注意WRITE_EXTERNAL_STORAGE許可權
// 註:AUDIO_FORMAT參數語記需要更新版本才會生效
mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/tts.wav");
}

public void speak(String msg) {
if (isInitSuccess){
if (mTts.isSpeaking()) {
stop();
}
mTts.startSpeaking(msg, this);
}else {
init();
}
}

public void pause() {
mTts.pauseSpeaking();
}

public void resume() {
mTts.resumeSpeaking();
}

public void stop() {
mTts.stopSpeaking();
}

public void release() {
if (null != mTts) {
mTts.stopSpeaking();
// 退出時釋放串連
mTts.destroy();
}
}

@Override
public void onInit(int code) {
Log.d(TAG, "InitListener init() code = " + code);
if (code == ErrorCode.SUCCESS) {
isInitSuccess = true;
}
}

@Override
public void onSpeakBegin() {
// 開始播放
}

@Override
public void onBufferProgress(int percent, int beginPos, int endPos,
String info) {
// 合成進度
}

@Override
public void onSpeakPaused() {
// 暫停播放
}

@Override
public void onSpeakResumed() {
// 繼續播放
}

@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
// 播放進度
}

@Override
public void onCompleted(SpeechError speechError) {
if (speechError != null) {
Log.d(TAG, "onCompleted: " + speechError.getPlainDescription(true));
}
}

@Override
public void onEvent(int eventType, int i1, int i2, Bundle bundle) {
//以下代碼用於擷取與雲端的會話id,當業務出錯時將會話id提供給技術支援人員,可用於查詢會話日誌,定位出錯原因
if (SpeechEvent.EVENT_SESSION_ID == eventType) {
String sid = bundle.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
Log.d(TAG, "session id =" + sid);
}
}
}<strong>
</strong>
要使用這個工具類,那麼就要改造一下前面的MyApplication.java檔案了
[java] view plain copy
package com.cyf.ttsdemo;

import android.app.Application;
import android.content.Context;

import com.cyf.ttsdemo.utils.TTSUtils;
import com.iflytek.cloud.Setting;
import com.iflytek.cloud.SpeechUtility;

/**
* Created by As on 2017/8/7.
*/

public class MyApplication extends Application {

private static Context context;

@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
SpeechUtility.createUtility(this, "appid=5987d170");
// 以下語句用於設定日誌開關(預設開啟),設定成false時關閉語音雲SDK日誌列印
Setting.setShowLog(false);
TTSUtils.getInstance().init();
}

public static Context getContext() {
return context;
}
}
好的,這樣就大功告成了,在需要進行語音合成的地方調用TTSUtils.getInstance().speak("xxx")即可

最後,我們需要到訊飛開放平台進行上傳應用審核,不然使用的語音合成功能每天是有次數限制的。

當應用審核通過之後,就可以免費無限制的使用線上語音合成功能啦。

整合Android免費語音合成功能(線上、離線、離線上融合)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.