закончил воспроизведение аудио обратного вызова с зябликом - PullRequest
0 голосов
/ 17 августа 2010

есть ли законченная игра обратного вызова с зябликом?похож на - audioPlayerDidFinishPlaying в материале avaudioplayer?просматривая код, я не смог найти ничего, что на него ссылалось.

Ответы [ 3 ]

1 голос
/ 04 сентября 2010

В Finch такого обратного вызова нет, поскольку OpenAL его не поддерживает. (Или, по крайней мере, он не поддерживал это, когда я в последний раз смотрел.) Вы можете подделать это так:

- (void) playSoundWithCallback {
    [someSound play];
    [someDelegate performSelector:@selector(soundDidFinishPlaying:)
        withObject:someSound afterDelay:someSound.duration];
}

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

0 голосов
/ 22 февраля 2012

Вот хак с исправлением высоты тона, если вам не нужны прерывания.

OpenAL изменяет продолжительность воспроизведения звука, воспроизводимого, когда высота тона не равна 1,0. (не представляется возможным запросить эту новую длину из OpenAL, параметры AL возвращают те же значения, что и раньше)

Шаг варьируется от 0,5 до 2,0f. Таким образом, если мы предположим, что шаг в 0,5 в два раза больше, и высота тона в 2,0 раза меньше, мы должны иметь возможность использовать высоту тона как множитель

- (void) playSoundWithCallback {
    [someSound play]; 
    [someDelegate performSelector:@selector(soundDidFinishPlaying:) 
        withObject:someSound afterDelay: someSound.duration * (1.0/someSound.pitch) ]; 
} 
0 голосов
/ 17 июля 2011

@ zoul: я знаю, что это очень поздний ответ. Но я заметил, что ответ не правильный. Что делать, если я приостанавливаю звук или происходит перерыв в работе системы. В таком случае вы получите обратный вызов, даже если звук еще не завершен. Пожалуйста, прочитайте параграф «4.3.6. Управление выполнением исходного кода» в спецификации openAL для правильной обработки.

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