ios - How to set a completionhandler for AVAudioEngine -
i using method play audio file;
-(void)playonmainthread:(id)param
{ [self playaudio]; avaudioengine *engine = [[avaudioengine alloc] init]; avaudioplayernode *node = [[avaudioplayernode alloc] init]; [engine attachnode:node]; avaudiounittimepitch *pitch = [[avaudiounittimepitch alloc] init]; pitch.pitch = 100; pitch.rate = 2; [engine attachnode:pitch]; avaudiomixernode *mixernode = engine.mainmixernode; [engine connect:node to:pitch format:[mixernode outputformatforbus:0]]; [engine connect:pitch to:mixernode format:[mixernode outputformatforbus:0]]; avaudiofile *audiofile = [[avaudiofile alloc] initforreading:recorder.url error:&error]; if (error) nslog(@"avaudioplayer error %@, %@", error, [error userinfo]); if (audiofile != nil) { [node schedulefile:audiofile attime:nil completionhandler:nil]; [engine startandreturnerror:nil]; [node play]; } }
but need set completionhandler, have tried;
-(void)stoptalking:(avaudionodecompletionhandler)handler //-(void)stoptalking { isplaying = no; [self unschedule:@selector(repeatspeackaction)]; [self schedule:@selector(startgamecall)]; [stand setdisplayframe:[[ccspriteframecache sharedspriteframecache] spriteframebyname:@"turn1.png"]]; if(video==true) { cases=1; [self addaudiotodict]; } }
i trying call using this;
[node schedulefile:audiofile attime:nil completionhandler:stoptalking];
without success, how can call completion handler?
you need use gcd block, instead of method, completionhandler
parameter:
[node schedulefile:audiofile attime:nil completionhandler:^{ // "stoptalking" code goes here... }];
Comments
Post a Comment