我怎么能在说话之前暂停(TTS)暂停?

时间:2011-01-31 23:03:33

标签: iphone objective-c cocoa-touch sdk

所以这就是我的代码:

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];似乎是一个占用所有处理时间的行,并将其读出来。

3 个答案:

答案 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库可以保存到后台线程中的波形文件中。然后在文件准备好后播放声音。