Звук воспроизводится в симуляторе iphone с точкой останова, но не воспроизводится без точки останова - PullRequest
2 голосов
/ 26 января 2010

Я пытаюсь получить звук для воспроизведения в симуляторе iPhone (используя 3.1 SDK). Когда я добавляю точку останова и выполняю код в GDB, звучит звук. Однако, если я отключаю точку останова, звук не воспроизводится.

Код для вызова звука:

SoundEffect *completeSound = [myobj completeSound];
if (completeSound != nil) {
    [completeSound play];
}

Класс SoundEffect имеет простой метод воспроизведения:

// Plays the sound associated with a sound effect object.
-(void)play {
    // Calls Core Audio to play the sound for the specified sound ID.
    AudioServicesPlaySystemSound(_soundID);
}

Если я включаю точку останова выше метода «myobj completeSound», он воспроизводится отлично. Однако, если нет точки останова, звук не воспроизводится.

Звуковой файл представляет собой файл CAF, длина которого составляет 5 секунд.

Есть ли какая-то задержка, которую мне нужно добавить после вызова AudioServicesPlaySystemSound, чтобы обеспечить ее воспроизведение?

ОБНОВЛЕНИЕ: похоже, что использование метода AudioServicesAddSystemSoundCompletion является решением.

SoundEffect *completeSound = [myobj completeSound];
if (completeSound != nil) {
    AudioServicesAddSystemSoundCompletion([completeSound _soundID], 
        NULL, NULL, AudioPlaybackComplete, self);
    [completeSound play];
} 

Затем статическая функция AudioPlaybackComplete вызывается, когда аудиоклип завершен. Это работает должным образом - хотя я до сих пор не понимаю, почему аудио-клип терпит неудачу в первоначальном случае использования.

1 Ответ

2 голосов
/ 27 января 2010

Вы проверили ход вашей программы? Потому что это заставляет меня поверить, что без точки останова ваша программа многократно запускает сообщение play и многократно возобновляет воспроизведение звука с такой высокой частотой, что вы никогда не услышите его сэмплы. С помощью точки останова вы останавливаете свой код от прерывания воспроизведения.

...