Android TTS学习——独特你的名字

一. 简单介绍

在上一篇里

http://blog.csdn.net/ichliebephone/archive/2010/08/14/5811562.aspx

我们介绍了TTS可以把合成的语音直接保存为音频文件的功能。

在这篇里我们接着上一篇的内容,介绍Android TTS的另一个功能,为一段文本关联一个音频文件,即允许为一段文本内容指定自定义的发音。

这个功能对应的函数有两个,一个为:

public int   addSpeech ( String  text,  String  filename)

第一个参数为要关联的文本,比如 "south_south_east" ,第二个参数为指定和文本关联的音频文件的完整路径名,比如为"/sdcard/ south_south_east .wav"。

另一个函数类似,只是指定音频文件的方式不同:

public int   addSpeech ( String  text,  String  packagename, int resourceId)

通过指定程序中包含的包名 , 比如"com.ichliebephone",和资源ID,比如" R.raw.south_south_east ",这样的方式确定关联的音频文件。

调用上面函数对某个文本进行了关联后,再对这个文本调用speak函数时,则会播放关联的音频文件的内容,如果关联的音频文件不存在时,才对这个文本进行语音合成。

虽然Android的TTS 引擎Pico会尽力为文本去合成正确的发音,但是也会碰到可能无法正确发音的时候,比如碰到 "south_south_east" 这样的连接词时,发音时就会附带连接用的"_",因此为了正确的发音,就可以提前录制"south south east"这样发音的音频文件,然后用addSpeech和上面的文本进行关联。

下面我们就用这个功能完成一个Demo例子,为她的名字关联你想说的话,使你手机中她名字的发音听起来有属于你的独特性。

二. 实例分析

我们希望做的效果如下:

图1 实现效果图

在上一个Demo的基础上添加了一个文本框和一个按钮。点击Associate按钮,则第三个文本框中的文本(比如jia jia)将和第二个文本框中指定的音频文件(比如/sdcard/love.wav)进行关联。然后在第一个文本框中输入关联了的文本内容(比如jia jia),点击Speak按钮后,就不会朗读"jia jia"的发音,而是播放进行了关联的"/sdcard/love.wav"这个音频文件的内容。

创建一个Android工程,工程名为AndroidTTSDemoF if th,其中SDK版本需选择1.6及以上。

其中Main.xml文件很简单,如下所示:

Java文件的编写:

有了前面这 Demo的实例开发,这个Demo实现起来就比较简单了,程序的代码如下所示:

和TTS相关的新的部分为 associateBtn 的onClick事件的处理, 调用函数

mTts .addSpeech( associateText . getText ().toString(),  loveFileName );

把文本和音频文件进行关联。


 

至此,这个Demo就完成了,但是在运行前,创建 AVD 需带 SD卡 ,因为要往SD卡上保存文件 同时还需在AndroidManifest.xml文件中添加写外部存储设备的权限:

接着就可以运行这个Demo了, 程序运行后,首先点击 Record的按钮,把"jia jia, I love you."语音录制为"/sdcard/love.wav"这个音频文件,然后再点击Associate按钮,把这个音频文件和"jia jia"这个文本进行关联,关联成功后会弹出"Associated!"这样的提示。最后在第一个文本框中输入"jia jia",点击Speak按钮,朗读的不是原本的"jia jia"这个发音,而是"jia jia, I love you."。这样,你就为她的名字关联上了你想说的话,具备了属于你的独特性。运行效果图如下所示:

图2 简单效果图

除了可以关联TTS语音合成到文本形成的音频文件外,还可以关联其他的音频文件,下面就为"jia jia"关联一首梁静茹的歌“暖暖”。

首先把歌名改为"loveSong.mp3",然后上传到SD卡中,使用adb push loveSong.mp3 /sdcard/loveSong.mp3命令,如下图所示:

图3 向SD卡上传音频文件

接着我就回看到SD卡上多了loveSong.mp3这个音频文件,

图4 上传到SD卡上的音频文件

然后在程序中,我们把要关联的文件名改为"/sdcard/loveSong.mp3",再次点击Associate按钮进行关联,如下图所示:

图4 关联新的音频文件

最后为"jia jia"点击Speak按钮,这次将会播放梁静茹的“暖暖”这首歌。

图5 关联了歌曲后的效果

    到这里,和 addSpeech 关联这个功能相关的Demo介绍就结束了,不过如果你喜欢梁静茹的这首歌,也可以在Android的手机里播放。Android的Home目录下有个Music可以来播放,不过目前还看不到这首歌,我们先运行下Dev Tools里的Media Scanner,然后就会识别SD卡上新添加的内容,如下所示:

图6 扫描SD卡上的文件

最后打开Music的Songs,找到这首“暖暖”,静下心来再次好好欣赏下。

图7 静听欣赏“暖暖”

三. TTS优化

最后结合上一篇和这篇用到的两个功能,简单介绍一下TTS 优化的一些思路。

1. 对多次用到的大段文本先语音合成为音频文件,然后在朗读发音时用播放音频文件来代替。因为使用TTS 相对来说是比较费资源的,而且当文本长度比较长时语音合成的速度就比较慢。

2. 对能提前知道的要用到的一些不能正确发音的文本,比如人名、地名等,可以提前录制发音接近的音频文件,然后进行关联。

3. 对长段文本可以预处理,找出知道的不能正确发音的字符串,然后用和正确发音接近的类似字符串代替,最后才把剔除了不好正确发音的预处理后文本送给TTS 引擎进行语音合成。

以上只是几个简单的思路,具体内容还需在实际应用中实际分析。

 

 

注:文章参加“ 首届Google暑期大学生博客分享大赛——2010 Andriod篇

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值