Звук работает в эмуляторе, а не в реальном iPhone

Имейте несколько коротких образцов звуковых эффектов, которые отлично воспроизводятся в эмуляторе, но не воспроизводятся на реальном iPhone 3GS. Вот код примерно как есть из образца Apple SysSound:

CFBundleRef mb = CFBundleGetMainBundle ();
CFURLRef soundFileURLRef = CFBundleCopyResourceURL
    (mb, CFSTR("mySound"), CFSTR ("caf"), NULL);

SystemSoundID sid;
AudioServicesCreateSystemSoundID(soundFileURLRef, &sid);
AudioServicesPlaySystemSound(sid);

При использовании iPhone я слышу щелчки клавиш и музыку из iTunes (не пытаюсь использовать одновременно с воспроизведением звука), но вообще не слышу звук. Вибра работает нормально, так что даже Фреймворк должен быть настроен правильно.

Пробовал даже образец кода SoundEffect.h / m, без изменений. Используются те же звуковые файлы, но разве CAF не подходит, особенно когда он воспроизводится в эмуляторе?

Что я могу попробовать дальше?


person JOM    schedule 14.01.2010    source источник
comment
Извините, если я констатирую очевидное, но не работает ли аппаратный переключатель на вашем iPhone?   -  person Michael    schedule 14.01.2010
comment
Когда я сказал, что слышу щелчки клавиш и музыку из iTunes, это означает, что iPhone не находится в бесшумном режиме. В любом случае, неплохо проверить ...   -  person JOM    schedule 15.01.2010


Ответы (4)


Попробуйте преобразовать в другой формат, например wav или mp3, затем воспроизведите снова. Если вы хотите использовать caf, убедитесь, что вы правильно форматируете caf в Terminal.app:

afconvert -f caff -d ima4 mysound.wav
person coneybeare    schedule 14.01.2010
comment
Скорее всего я конвертировал неправильно ... До сих пор не могу понять, почему эмулятор воспроизводит эти звуки, а реальное устройство - нет. Эмулятор должен эмулировать реальное устройство, верно? Это цель эмулятора! - person JOM; 15.01.2010
comment
неправильный. Симулятор не является эмулятором. Он не ограничивает скорость вашей сети, оперативную память процессора или что-либо еще. Это просто визуальный инструмент, позволяющий увидеть, как ваше приложение будет выглядеть и взаимодействовать с прикосновениями. Вероятно, это потому, что на вашем компьютере гораздо больше кодеков, чем несколько избранных, поставляемых с iphone. - person coneybeare; 15.01.2010

Кстати, у меня была точно такая же проблема, и я потратил около часа на преобразование файлов в правильный формат и т. Д. Но проблема заключалась в переключателе отключения звука на iPad. Таким образом, даже несмотря на то, что громкость была увеличена, и я мог слышать другие звуки на iPad, потому что был включен переключатель отключения звука, он не воспроизводил системные звуки.

Чтобы усугубить путаницу, это приложение использует преобразование текста в речь, и громкость, полученная при транскрипции, была прекрасной, я не мог слышать только звуки, исходящие из AudioServicesPlaySystemSound().

person TheJerkMan24    schedule 03.12.2012

Это далеко не так, но помните, что файловая система телефона чувствительна к регистру, в то время как Mac обычно нет. Дважды проверьте имя файла

person justin    schedule 14.01.2010
comment
Я думал, что, будучи основанным на * nix, он будет чувствителен к регистру :) - person willcodejavaforfood; 14.01.2010
comment
Можно было бы так подумать, но это было бы слишком просто. Если у вас есть файл Foo, и вы пишете код, чтобы открыть его как foo, он работает в симуляторе, не работает на устройстве. - person justin; 14.01.2010

Нашел более простое решение: использовать звуковые файлы AIF:

  • Щелкните iTunes> Настройки.
  • Перейдите на вкладку «Общие».
  • Нажмите кнопку «Импортировать настройки».
  • В раскрывающемся списке «Импортировать с помощью» выберите «Кодировщик AIFF».
  • Сохраните изменения
  • Выберите звуковые файлы и выберите «Создать версию AIFF».

Вот код, который я использую вместе с SoundEffect.h и SoundEffect.m из примера Apple BubbleLevel:

NSBundle *mainBundle = [NSBundle mainBundle];
buzzerSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"buzzerSound" ofType:@"aif"]];
[buzzerSound play];

Теперь тот же код и звуковые эффекты работают как в эмуляторе, так и в оборудовании. Кстати, не забудьте вернуть исходные настройки iTunes!

person JOM    schedule 15.01.2010