Я пытаюсь получить звук для воспроизведения в симуляторе 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 вызывается, когда аудиоклип завершен. Это работает должным образом - хотя я до сих пор не понимаю, почему аудио-клип терпит неудачу в первоначальном случае использования.