讯飞语音云Java SDK语音合成的使用支持文本分段合成
Comdex 2014-06-02 java
讯飞语音云的java sdk调用其实也挺简单的,直接调用那几个方法就行,但一开始使用时可能发现一些问题就如语音合成是有字数限制的,语音合成接口不能同时调用多次,只能在上一次结束后才能开始下一次的播放,要不每次只能播放最后一次调用方法的文本,贴部分代码出来给有需要看看,共同学习分享!只实现了播放和取消功能,暂停的接口调用好像总出错啊,只好等待新版java sdk了...
package notepad.voice;
import notepad.listener.VoiceNameListener;
import notepad.listener.VoiceSpeechListener;
import com.iflytek.speech.SpeechError;
import com.iflytek.speech.SynthesizerPlayer;
import com.iflytek.speech.SynthesizerPlayerListener;
public class VoiceRead implements SynthesizerPlayerListener{
SynthesizerPlayer player ;
//初始化语音合成对象
public VoiceRead()
{
player = SynthesizerPlayer.createSynthesizerPlayer("appid=" + Version.getAppid());
}
public void play()
{
SynthesizerPlayer player = SynthesizerPlayer.getSynthesizerPlayer();
//设置发音人为小宇
player.setVoiceName(VoiceNameListener.voice);
//设置朗读速度为50
player.setSpeed(50);
//Setting.saveLogFile(LOG_LEVEL.none, null);
//合成文本为VoiceSpeechListener.txt[VoiceSpeechListener.i]的分段文本,设置监听器为this
player.playText(VoiceSpeechListener.txt[VoiceSpeechListener.i], null, this);
}
//取消合成
public void cancel()
{
SynthesizerPlayer player = SynthesizerPlayer.getSynthesizerPlayer();
player.cancel();
}
//在上一段语音结束时开始合成下一段,文本分段后存入字符数组
@Override
public void onEnd(SpeechError error) {
if(error==null&&VoiceSpeechListener.i<VoiceSpeechListener.txt.length-1)//arg0为null表示发送成功,发送下一段
{
SynthesizerPlayer player = SynthesizerPlayer.getSynthesizerPlayer();
player.playText(VoiceSpeechListener.txt[++VoiceSpeechListener.i].trim(), null, this);
}
}
@Override
public void onBufferPercent(int percent, int beginPos, int endPos) {
}
@Override
public void onPlayBegin() {
}
@Override
public void onPlayPaused() {
}
@Override
public void onPlayPercent(int percent, int beginPos, int endPos) {
}
@Override
public void onPlayResumed() {
}
}