让你的程序开口说话,没错!接下来讲解如何通过第三方资源为你的
应用程序实现语音功能。这个语音库的名字是
Text-To-Speech (以下简称
TTS),
开发者可以通过调用这个这个语音库实现将字符串转为声音。
- e$ G! x8 H4 }+ M. I4 Y2 M; k; D" g- w9 M+ H" c' P- \8 z0 K, O( e0 O% i在讲解具体实现方法之前,需要配置Esclipse的设定:
( t% o& O* s' b( MProject > Properties > Java Build Path > Libraries and click on
7 F$ B$ N6 h+ g. N"Add External JARs..." Then add in the TTS_library_stub.jar file
$ m7 q0 S# h& h
$ } ~6 c9 V1 }2 E& N% _
使用eSpeak引擎前需要为Emulator添加虚拟SD Card。
) x/ H5 X! E; X0 o 将这个APK安装到Emulator (启动Emulator的前提下,在CLS中输入”adb install ***.APK “)。
* S5 M+ F9 r- D0 N) \当程序运行后也可以通过参数控制是否需要弹出安装tts_market.apk的提示对话框:
3 ^* y& r( X6 I& h$ S9 g
/ u( [" l2 f9 M5 k) V, q下边通过几行简单的代码来实现调用语音库的方法:
* J! A" ?. X( ~1. 创建一个新的
Android项目,可以随意命名为你认为有意义的名字,比如“I am Well-E”等等
. t* z! s6 H3 }/ Y' Y( W+ v$ V2. 应用上边所提到的方法为当前的项目添加Library。
6 p0 G) g$ i, S2 f3. 在主程序.java中添加如下代码:
* g( O0 h' f, b8 a1.import com.
google.tts.TTS;
" E% z5 z' D% N7 e- b& v# p/ A4 E* o' g6 `, T: Y$ _2 t J( }介于onCreate()和类之间声明空的TTS
: J1 |$ n" ]$ t: p/ f1.private TTS myTts;
1 \" G0 p1 [+ J- n1 V' ~' f5 _$ q& ]" u- k7 d3 v( c7 C5 K8 k9 g在onCreat()中创建TTS的实体
' d( B. m- A. W1.myTts = new TTS(this, ttsInitListener, true);
8 e6 ~3 O; ~ }" \: \0 }6 ~6 d( A- ?7 b( W8 A+ n( D, U6 W. c& t0 t$ @在onCreat()后边定义一个新函数
: e6 X/ z' S+ f& n. D1 g- z1.private TTS.InitListener ttsInitListener = new TTS.InitListener() {
6 i, A! f5 R5 Q' w% j' u! T2 _5 s2. public void onInit(int version) {
4 X3 e1 M0 `. N+ Z9 ]3. myTts.speak("I am Wall E", 0, null);
% V0 U$ J- x7 g) X; T4. }
! P7 ` H5 d6 I( ^8 p+ `5.};
. R- y S( a4 V" b, G, i1 e; `+ K9 o, n1 u* Q5 {) \" @2 }3 z& R5 t2 v0 q. T0 @
* z( R" P) T ^5 R! I7 s至此可以Run你的程序了,如果顺利的话,第一次启动程序后会首先调用TTS通过Server下载
数据,然后手动回到主程序面板重新启动你的程序,听到Emulator发出响亮的声音了吧?
3 [' j, j( R. i: R3 u; D6 n# r
) r2 E. t* g2 W7 L创建TTS实体时要求有三个参数:
" `) G6 Q( V5 g- U6 z1. Application Context
F2 J/ }9 p- E% @: f2. TTS.InitListener - 监听TTS初始化Event
$ u! w# H: c9 z+ R3. Boolean - 当检测到Emulator或其它测试机没有安装TTs_market.apk时,是否弹出下载
5 I# P3 @ @+ l 提示对话框。
$ v a% b" s1 w7 {6 t0 N# u/ wTTS实体调用Speak行为时的参数:
, K+ Z; s9 Z( q# J# F2 {. i1. String - 语音内容
3 `3 f# S( a8 C2. Boolean - 是否启用队列模式(0:代表没有列队模式,1:代笔具有先进先出的队列模式)
- g6 W* n$ w% g/ u0 ?3. Array - an array of Strings that are parameters for how to speak the text.