воспроизведение звука, ожидание его окончания и продолжения - PullRequest
2 голосов
/ 13 августа 2010

Я новичок в работе с iphone и объективом c, поэтому я смог написать несколько небольших примеров.

Я хотел бы воспроизвести звук и продолжить с остальной частью кода, когдапример завершает воспроизведение, т.е.:

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

на самом деле я получаю: печатать привет, воспроизводить файл и печатать мир одновременно, но я хочу: печатать привет, воспроизводить файл, печатать мир.. так, вопрос, как я могу получить это?

спасибо

кстати.вот код playASound:

-(void) 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);
}

1 Ответ

10 голосов
/ 13 августа 2010

Из документации :

Обсуждение Эта функция воспроизводит короткий звук (30 секунд или меньше в продолжительность). Потому что звук может играть в течение нескольких секунд эта функция выполняется асинхронно. Знать когда звук закончился, позвоните AudioServicesAddSystemSoundCompletion функция регистрации обратного вызова функция.

Таким образом, вам нужно будет разбить вашу функцию на две части: функцию, которая вызывает PlayASound и печатает «Hello», и функцию, которая вызывается системой , когда закончится воспроизведение звука, и Принты "Мир".

// 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");
}

См. Также документы для AudioServicesAddSystemSoundCompletion и AudioServicesSystemSoundCompletionProc .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...