Ошибка загрузки файла AVAudioPlayer - PullRequest
23 голосов
/ 03 сентября 2011

Я пытаюсь использовать 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];
}

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

РЕДАКТИРОВАТЬ: После дополнительных испытаний я обнаружил, что я не получаю эту ошибку при запуске симулятора IOS 4.2, только на симуляторе IOS 5. Можно ли предположить, что это ошибка в iOS 5?

Спасибо

Ответы [ 6 ]

22 голосов
/ 30 сентября 2011

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

2 голосов
/ 25 апреля 2012

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

@implementation SomeAudioController {
    AVAudioPlayer *tickPlayer;
}
1 голос
/ 24 апреля 2013

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

1 голос
/ 19 мая 2012

Сделайте ваш AVAudioPlayer свойством со строгой ссылкой.

Источник: AVAudioPlayer отказывается проигрывать что-либо, но без ошибок и т. Д.

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

Редактировать :

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

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

0 голосов
/ 08 декабря 2011

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

0 голосов
/ 03 сентября 2011

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

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

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

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

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

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

...