iOS中的ESpeak Engine以同步方式

时间:2013-05-03 13:33:35

标签: iphone ios espeak

在Table视图委托方法之一中,我根据某些条件访问某些字符串 我希望使用ESpeak Engine说出这些字符串。在日志中它给出了所有匹配的字符串...但是ESpeak Engine只接受最后一个字符串(即,它只拼写最后一个字符串。)

如何拼写所有字符串..

这是我的代码..

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)celle forRowAtIndexPath:(NSIndexPath *)indexPath {
        NSLog(@"Final Speak Child List:%@",[stringComponentsForArray objectAtIndex:1]);

       [engine speak:[stringComponentsForArray objectAtIndex:1]];

}

2 个答案:

答案 0 :(得分:0)

如果您试图说出数组中的所有字符串,那么您可以将所有字符串附加到NSString属性,然后当UITableView完成加载时,您可以通过说出长附加的NSString来开始说出所有字符串。否则将其放在didSelectRowForIndex中并调用那个与数组的相应indexPath.row相关的方法。

 [engine speak [stringComponentsForArray objectAtIndex:indexPath.row];

答案 1 :(得分:0)

通过快速查看标题,ESpeak不会将请求排队,这就是为什么最后一个会覆盖前一个请求。

您可以将文本组合成一个大字符串并按此方式执行,但如果您想要更改扬声器或控制时间,则无效。

你需要做的是做一个小队列,然后实现委托方法

- (void)speechEngineDidFinishSpeaking:(ESpeakEngine*)engine successfully:(BOOL)flag;

每个文本完成后,您可以添加下一个文本。

希望这有帮助