首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Flite引擎中实现audioPlayerDidFinishPlaying:成功

在Flite引擎中实现audioPlayerDidFinishPlaying:成功
EN

Stack Overflow用户
提问于 2010-06-23 16:38:41
回答 1查看 1.2K关注 0票数 0

我在我的项目stated here中使用了Flite text to speech引擎。我正在从json url中获取值,并将它们转换为语音。但是,我想知道如何实现audioPlayerDidFinishPlaying:successfully: delegate方法,并在Flitetts文件中调用它时播放下一个块。音频播放器必须一个接一个地播放对象,在播放完第一个值之后,它必须获取下一个值并将其转换为语音。相应的图像等也必须加载...

这是我到目前为止所做的代码。

代码语言:javascript
复制
  SBJSON *json = [[SBJSON alloc]init];
fliteEngine = [[FliteTTS alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sampleurl.txt"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *jsonstring = [[NSString alloc]initWithData:response encoding:NSUTF8StringEncoding];

NSArray *asanasList = [json objectWithString:jsonstring error:nil];
NSArray *asanas =[asanasList objectForKey:@"yogagurubackpain"];


for(NSDictionary *test in asanas)
{

    UrlValues *myasanas = [[UrlValues alloc]init];
    myasanas.asanatitle = [test objectForKey:@"asanatitle"];
    myasanas.asanatranscript = [test objectForKey:@"asanatranscript"];
    myasanas.asanapicture = [test objectForKey:@"asanapicture"];
    [data.yoga addObject:myasanas];
    [myasanas release];
}


UrlValues *asana=[[data yoga]objectAtIndex:0];
self.AsanaName.text = [asana asanatitle];
self.AsanaTranscript.text = [asana asanatranscript];

NSString *imageUrl = [asana asanapicture];
NSString* mapUrl = [imageUrl stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSData* imageData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:mapUrl]];
UIImage* image = [[UIImage alloc] initWithData:imageData];
self.AsanaImage.image = image;


NSString *speak = self.AsanaTranscript.text;
[fliteEngine setVoice:@"cmu_us_rms"];
[fliteEngine speakText:speak];
[fliteEngine setPitch:100.0 variance:11.0 speed:0.4];
    [imageData release];
    [image release];

[jsonstring release];
[json release];

请帮助我一些示例代码或教程,以便我可以完成任务…

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-24 02:32:26

只有在文本到语音转换引擎使用AVAudioPlayer对象播放声音时,才能调用audioPlayerDidFinishPlaying委托方法。如果不是,那么显然委托方法将不会被调用。相反,您必须禁用它,使其无法直接播放声音,并使用AVAudioPlayer对象。

这里有一个这样的例子:

http://artofsystems.blogspot.com/2009/02/speech-synthesis-on-iphone-with-flite.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3100113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档