由于最近项目需要使用到语音合成,使用过百度语音和科大讯飞语音但是这两个开发包比较大,也可能要钱。突然间看到了TTS语音感觉语音还不错。但是有一个缺点,Android自带的TTS不支持中文语音。
一、怎么看支不支持中文语音
设置——》语言和输入法——》右边有一个文字转语音(TTS)输出点击进去就可以看到默认语言,如果不支持就会显示不支持中文语音。所以需要我们下载引擎。引擎下地址https://blog.csdn.net/yingchengyou/article/details/79591954,把引擎下载安装之后要设置那里改成安装的引擎。
二、实现TTS引擎监听接口
public class TTSListener implements TextToSpeech.OnInitListener {
@Override
public void onInit(int i) {
if (i == TextToSpeech.SUCCESS) {
Log.i(TAG, "onInit: TTS引擎初始化成功");
} else{
Log.i(TAG, "onInit: TTS引擎初始化失败");
}
}
}
三、进行TTS初始化
这里为了方便使用所以我在Application进行初始化
public class MyApplication extends Application {
//tts语音播放
public static TextToSpeech mSpeech = null;
@Override
public void onCreate() {
super.onCreate();
mSpeech = new TextToSpeech(getApplicationContext(), new TTSListener());
}
}
四、语音合成
mSpeech.setLanguage(Locale.CHINESE);这个方法调用可以设置语音,显示使用的是中文
mSpeech.setSpeechRate(voice_speed);这个方法调用时设置语音速度,值越大声音越快
mSpeech.setPitch(voice_pitch);这个方法是设置音调的搞定,值越大音调越高甚至成为男声
**
* tts语音播放
*/
public class SpeechUtil {
//语速
public static float voice_speed=0.8f;
//音调
public static float voice_pitch=0.9f;
public synchronized static void openAudioFile(TextToSpeech mSpeech, String content) {
mSpeech.setLanguage(Locale.CHINESE);
mSpeech.setSpeechRate(voice_speed);
mSpeech.setPitch(voice_pitch);
/**
* queueMode用于指定发音队列模式,有两个参数:
* TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务
* TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,等前面的语音任务执行完了才会执行新的语音任务
*/
// mSpeech.speak(content, TextToSpeech.QUEUE_FLUSH, null);
mSpeech.speak(content, TextToSpeech.QUEUE_ADD, null);
}
}
五、进行简单的测试调用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.text_view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SpeechUtil.openAudioFile(MyApplication.mSpeech,"你好,欢迎光临!");
}
});
}
}