Файл загрузки ошибки AVAudioPlayer

Я пытаюсь использовать AVAudioPlayer для воспроизведения простого звука, и я продолжаю получать эту ошибку в консоли:

2011-09-02 20:29:07.369 MusicLog[967:10103] Error loading /System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAHALPlugIn.bundle/Contents/MacOS/AppleHDAHALPlugIn:  dlopen(/System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAHALPlugIn.bundle/Contents/MacOS/AppleHDAHALPlugIn, 262): Symbol not found: ___CFObjCIsCollectable
  Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
  Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
 in /System/Library/Frameworks/Security.framework/Versions/A/Security

Вот мой код, который должен воспроизводить звук при нажатии кнопки:

NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"tick" ofType:@"caf"];
NSError *error;

    NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
    AVAudioPlayer *tickPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
[tickPlayer setDelegate:self];
[tickPlayer setNumberOfLoops:0];
[tickPlayer prepareToPlay];
if (tickPlayer == nil)
{
    NSLog(@"%@", [error description]);
}
else
{
    [tickPlayer play];
}

Как-то у меня есть файл в неправильном месте? Я просто перетащил файл в проект и, при необходимости, выбрал копию.

EDIT: после большего тестирования я обнаружил, что я не получаю эту ошибку при запуске симулятора IOS 4.2, только на симуляторе IOS 5. Могу ли я предположить, что это ошибка в iOS 5?

Спасибо,

Ответ 1

У меня была такая же проблема. Это только кажется проблемой на iOS5 в симуляторе. Я еще не тестировал устройство iOS 5. Я продолжаю надеяться, что обновления XCode заставят ошибку уйти, но пока не повезло.

Ответ 2

У меня была такая же ошибка, но звук, тем не менее, продолжался после того, как я сохранил переменную как атрибут класса. Если код, который вы помещаете здесь, написан внутри метода, попробуйте переместить эту переменную. Я думаю, что звук не воспроизводился, потому что экземпляр audioPlayer теряется после того, как метод вышел из области видимости.

@implementation SomeAudioController {
    AVAudioPlayer *tickPlayer;
}

Ответ 3

Сделайте свой AVAudioPlayer собственностью с сильной ссылкой.

Источник: AVAudioPlayer отказывается играть что угодно, но без ошибок и т.д.

Вышеприведенный ответ помог мне воспроизвести файл .wav в моем симуляторе, но пока у меня его не осталось на работе. Что-то про недостающие кодеки..?

Edit

Для воспроизведения звука на устройстве мне также пришлось добавить следующую строку в AppDelegate.m doneFinishLaunchingWithOptions:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

Ответ 4

Попробуйте проверить, включена ли точка останова "Все исключения", что приведет к разрыву отладчика при исключении. Просто отключите эту функцию и снова постройте ее.

Ответ 5

У меня также был такой же тип ошибки, когда я пытался воспроизвести некоторые mp3 файлы при нажатии кнопки и скомпилирован в iOS5. Ошибка исчезла, когда я скомпилировал iOS4, но звук все еще не появляется. Не было ошибок во время выполнения, и NSLogs правильно напечатаны на консоли отладки. Вы нашли способ воспроизвести свои mp3 файлы?

Ответ 6

Из руководства по мультимедийному программированию:

Предпочтительные аудиоформаты в iOS Для несжатого (самого высокого качества) аудио, используйте 16-битные, малоконечные, линейные аудиосигналы PCM, упакованные в CAF файл. Вы можете конвертировать аудиофайл в этот формат в Mac OS X используя инструмент командной строки afconvert, как показано ниже:

/usr/bin/afconvert -f caff -d LEI16 {INPUT} {OUTPUT}

Преобразование afconvert инструмент позволяет конвертировать в широкий диапазон форматов аудиоданных и файла типы. См. Страницу afconvert man и введите afconvert -h в оболочке для получения дополнительной информации.

Для сжатого звука при воспроизведении одного звука за раз, и когда вы не нужно воспроизводить звук одновременно с приложением iPod, использовать формат AAC, упакованный в файл CAF или m4a.

Для меньшего использования памяти, когда вам нужно воспроизводить несколько звуков одновременно используйте сжатие IMA4 (IMA/ADPCM). Это уменьшает файл но влечет за собой минимальное влияние ЦП во время декомпрессии. Как и в случае линейные данные PCM, данные пакета IMA4 в файле CAF.