最近需要使用到语音播报的功能,在百度七武器百度语音和科大讯飞的语音当中考虑到准确性和专业性,选择了科大讯飞。科大讯飞所提供的android开发sdk有两种一种是集成了自身产品语音+的sdk,功能比较强大但是会初始化语音服务模块;另一种是纯开发sdk不集成产品只需要导入相应jar包就可以使用。考虑到只用到了语音合成的技术所以选择了第二种sdk。
具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
private SpeechSynthesizer mTts; private int isSpeaking = 0 ; mTts= SpeechSynthesizer.createSynthesizer( this , null ); /*
* 开始合成
*
* @param view
*/
public void start() {
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); //设置云端
mTts.startSpeaking(search_word_content.getText().toString().trim(), mSynListener);
}
//合成监听器
private SynthesizerListener mSynListener = new SynthesizerListener(){
//缓冲进度回调
//percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在
//文本中结束位置,info为附加信息。
@Override
public void onBufferProgress( int arg0, int arg1, int arg2, String arg3) {
// TODO Auto-generated method stub
}
//会话结束回调接口,没有错误时,error为null
@Override
public void onCompleted(SpeechError arg0) {
// TODO Auto-generated method stub
}
//会话事件回调接口
@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
}
//播放进度回调
//percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文
//本中结束位置.
@Override
public void onSpeakProgress( int arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
//恢复播放回调接口
@Override
public void onSpeakResumed() {
// TODO Auto-generated method stub
}
};
if (isSpeaking == 0 ) {
start();
gif_no.setVisibility(View.INVISIBLE);
gif.setVisibility(View.VISIBLE);
isSpeaking = 1 ;
} else if (isSpeaking == 1 ) {
// 暂停播放
mTts.pauseSpeaking();
gif_no.setVisibility(View.VISIBLE);
gif.setVisibility(View.INVISIBLE);
isSpeaking = 2 ;
} else if (isSpeaking == 2 ) {
// 继续播放
//System.out.println("..........");
mTts.resumeSpeaking();
isSpeaking = 1 ;
gif_no.setVisibility(View.INVISIBLE);
gif.setVisibility(View.VISIBLE);
}
// 取消合成
mTts.stopSpeaking();
isSpeaking = 0 ;
|
总结, 开始初始化,start方法里面设置参数,再根据需要调用停止和继续方法,假如换了文本调用取消合成方法,重新start方法
以上内容是小编给大家分享的使用科大讯飞语音SDK实现文字在线合成语音的全部叙述,希望大家喜欢。