Text-to-speech 入门与进阶学习笔记(android)
2011-09-10 23:27 youxiachai 阅读(7251) 评论(0) 编辑 收藏 举报1,入门:让TEXT朗读起来
官方TTS朗读支持语言种类 English 英语 French 法语 German 德语 Italian 意大利语 Spanish 西班牙语 不支持中文…
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869//1,先写一个用来检查tts是否安装的方法
private
final
static
int
CHECK_CODE =
1
;
public
void
checkTts(){
Intent checkIntent =
new
Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, CHECK_CODE);
}
//创建一个TTS
private
TextToSpeech mTts;
//这个自己先去了解下onActivityResult是怎么回事,这里不作详解
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
// TODO Auto-generated method stub
super
.onActivityResult(requestCode, resultCode, data);
if
(requestCode == CHECK_CODE){
if
(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
//成功创建一个TTS
mTts =
new
TextToSpeech(
this
,
this
);
}
else
{
//否则安装一个
Intent installIntent =
new
Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
//2,让TTS朗读起来
//onCreate方法中
//检查TTS是否正常
checkTts();
//创建用组件
private
speakValue = (EditText) findViewById(R.id.speakValue);
private
speakButton = (Button) findViewById(R.id.sayHello);
speakButton.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
// TODO Auto-generated method stub
String text = speakValue.getText().toString();
Log.d(
"result"
,
"text-->"
+text);
sayTts(text);
}
});
//TTs朗读用
private
void
sayTts(String text){
//最简单的例子
mTts.speak(text, TextToSpeech.QUEUE_FLUSH,
null
);
}
//补充,使用TTS朗读,一定要实现OnInitListener 接口
//TTs对象创建后初始化
@Override
public
void
onInit(
int
status) {
if
(status == TextToSpeech.SUCCESS){
//设置语言区域
int
result = mTts.setLanguage(Locale.US);
//如果是不支持语言
if
(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
Log.e(
"error"
,
"不支持"
);
}
}
}
2,进阶使用:改变我们朗读播放的类型,回调函数的使用与自定义文字发音
1,更改播放的流类型(暂且这样说,希望,有人解释一下)
1234567891011121314151617//更改播放使用的流类型
//在sayTts作以下修改
//TTs朗读用
private
void
sayTts(String text)
{
HashMap<String, String> myAlarm =
new
HashMap();
//把播放类型,通过闹钟流实现
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
String.valueOf(AudioManager.STREAM_ALARM));
//你播放的tts在音频播放的闹钟类型流中
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myAlarm);
//英语原文是这样,我了解的就是以上我注释的内容
//我感觉不是很了解,希望有人帮帮
//On Android, each audio stream that is played is associated with one //stream type, as defined in android.media.AudioManager. For a talking //alarm clock, we would like our text to be played on the //AudioManager.STREAM_ALARM stream type so that it respects the alarm //settings the user has chosen on the device.
}
1
2,回调函数的使用
123456789101112131415161718192021222324252627//在sayTts()中实现..
//需要实现OnUtteranceCompletedListener这个接口
//TTs朗读用
private
Toast toast;
prvate Context context = getApplicationContext();
private
void
sayTts(String text)
{
HashMap<String, String> myAlarm =
new
HashMap();
mTts.setOnUtteranceCompletedListener(
this
);
myAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
"me too"
);
toast = Toast.makeText(context,
"me too"
, Toast.LENGTH_LONG);
//最简单的例子
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myAlarm);
}
//回调函数
@Override
public
void
onUtteranceCompleted(String utteranceId) {
speakPlayBack(utteranceId);
}
private
void
speakPlayBack(String str) {
Log.d(
"result"
,
"playBack-->"
+ str);
toast.show();
}
3,录制TTS朗读保存到SD卡中
12345678//把TTS朗读结果保存
private
void
sayTofile(String text)
{
HashMap<String, String> ttsRender =
new
HashMap<String, String>();
String destFileName =
"/sdcard/tts/"
+text+
".wav"
;
ttsRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text);
mTts.synthesizeToFile(text, ttsRender, destFileName);
}
1//在onclick方法中运行sayTofile()即可
4,自定义Text发音
123456789//自定义文字播放
private
void
sayTrue(String text)
{
String destFileName =
"/sdcard/tts/"
+text+
".wav"
;
mTts.addSpeech(text, destFileName);
mTts.speak(text, TextToSpeech.QUEUE_FLUSH,
null
);
}
//在onclick方法中运行
sayTrue();
5,销毁
12345678@Override
protected
void
onDestroy() {
super
.onDestroy();
if
(mTts !=
null
){
mTts.stop();
mTts.shutdown();
}
}
1 | |
作者:游戏阿柴
出处:http://www.cnblogs.com/youxilua
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
微博联系:新浪微博
用支付宝赞助博主:http://me.alipay.com/youxilua
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架