开发者

playing a sound, waiting it to finish playing and continue (iphone)

i'm new with the iphone and objective c, so far, I have been able to code some small examples.

i would like to play a sound and, continue with rest of the code when the sample finishes playing, i.e:

printf("hello");
playASound["file.wav"];
printf("world");

actually i'm getting: print hello, play the file and print world at the same time but what i want is: print hello, play the file, print world... so, the question is how do i get it?

thanks

btw. here is the playASound code:

-(void) playASound: (NSString *) file {

    //Get the fil开发者_JAVA百科ename of the sound file:
    NSString *path = [NSString stringWithFormat:@"%@/%@",
                      [[NSBundle mainBundle] resourcePath],
                      file];

    SystemSoundID soundID;
    //Get a URL for the sound file
    NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
    AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
    //play the file
    AudioServicesPlaySystemSound(soundID);
}


From the documentation:

Discussion This function plays a short sound (30 seconds or less in duration). Because sound might play for several seconds, this function is executed asynchronously. To know when a sound has finished playing, call the AudioServicesAddSystemSoundCompletion function to register a callback function.

So you'll need to break up your function into two pieces: a function that calls PlayASound and prints "Hello", and a function that is called by the system when the sound is finished playing and prints "World".

// Change PlayASound to return the SystemSoundID it created
-(SystemSoundID) playASound: (NSString *) file {

    //Get the filename of the sound file:
    NSString *path = [NSString stringWithFormat:@"%@/%@",
                      [[NSBundle mainBundle] resourcePath],
                      file];

    SystemSoundID soundID;
    //Get a URL for the sound file
    NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
    AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
    //play the file
    AudioServicesPlaySystemSound(soundID);
    return soundID;
}

-(void)startSound
{
   printf("Hello");
    SystemSoundID id = [self playASound:@"file.wav"];
    AudioServicesAddSystemSoundCompletion (
       id,
       NULL,
       NULL,
       endSound,
       NULL
   );
}

void endSound (
   SystemSoundID  ssID,
   void           *clientData
)
{
   printf("world\n");
}

See also docs for AudioServicesAddSystemSoundCompletion and AudioServicesSystemSoundCompletionProc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜