所以这就是我的代码:
fliteEngine = [[FliteTTS alloc] init];
[fliteEngine setVoice:@"cmu_us_awb"];
[fliteEngine setPitch:120.0 variance:50.0 speed:1.2];
[fliteEngine speakText:fullScript];
而fullScript是一个NSString,我想说它。
但是因为加载需要一段时间,iPod Touch第一代最多需要3分钟,我想加载它要说的内容,然后根据我的命令说出来。
有人知道怎么做吗?因为最后一行,[fliteEngine speakText:fullScript];
似乎是一个占用所有处理时间的行,并将其读出来。
答案 0 :(得分:1)
我认为您不必一次加载整个字符串。您可以将其划分为可以快速加载的较小部分,然后在每次发出旧块时加载新块。 我不熟悉FliteTTS,但它可能有一些预处理数据的方法。如果是,您还可以将文本分成较小的块,而当前的文本被发音时,您会在单独的线程中预加载下一个文本。
答案 1 :(得分:1)
发现解决方案..
在fliteTTS.m文件中,我取消注释[audioPlayer prepareToPlay];
,然后将以下代码剪切为新的“startTalking”位。
-(void)startTalking {
[audioPlayer play];
// Remove file
[[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil];
delete_wave(sound);
}
然后我首先调用speakText
,然后调用[fliteEngine startTalking];
并以此方式工作。
答案 2 :(得分:0)
flite库可以保存到后台线程中的波形文件中。然后在文件准备好后播放声音。