2010-01-26 3 views
2

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

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

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, чтобы убедиться, что она играет?

UPDATE: похоже, что использование метода AudioServicesAddSystemSoundCompletion является решением.

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

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

+0

Я столкнулся с этой проблемой при попытке воспроизведения kSystemSoundID_Vibrate сразу после моего пользовательского звука. Отключение воспроизведения kSystemSoundID_Vibrate в симуляторе решило проблему –

ответ

2

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

+0

Нет, это не проблема. Всего 1 аудиоклип. И он воспроизводится один раз, тогда есть пауза в несколько минут, ожидающая ввода пользователем. –

+0

Хорошо, тогда мне плохо. (Но вы уверены? Вы положили в него оператор журнала или сообщение о смене потока сразу после отправки сообщения «play»?) –

Смежные вопросы