【问题标题】:AVAudioPlayer error loading fileAVAudioPlayer 错误加载文件
【发布时间】:2011-11-09 13:32:20
【问题描述】:

我正在尝试使用 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 中的错误吗?

谢谢,

【问题讨论】:

    标签: iphone objective-c ios avaudioplayer


    【解决方案1】:

    尝试检查您是否启用了“所有异常”断点,这将导致调试器在异常处中断。只需禁用此功能并重新构建即可。

    【讨论】:

      【解决方案2】:

      使您的 AVAudioPlayer 成为具有强引用的属性。

      来源:AVAudioPlayer refuses to play anything, but no error, etc

      上面的答案帮助我在我的模拟器中播放 .wav 文件,但我还没有让它在我的设备上工作。关于缺少编解码器的问题..?

      编辑

      为了在设备上播放音频,我还必须在 AppDelegate.m 的 didFinishLaunchingWithOptions 中添加以下行:

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

      【讨论】:

        【解决方案3】:

        我遇到了同样的错误,但是在我将变量保留为类属性之后仍然播放了声音。如果您放在这里的代码写在方法中,请尝试移动此变量。我猜声音没有播放,因为在方法超出范围后 audioPlayer 实例丢失了。

        @implementation SomeAudioController {
            AVAudioPlayer *tickPlayer;
        }
        

        【讨论】:

          【解决方案4】:

          当我尝试通过单击按钮播放一些 mp3 文件并编译到 iOS5 时,我也遇到了相同类型的错误。当我编译到iOS4时错误消失了,但声音仍然不出来。没有运行时错误,并且在调试控制台中正确打印了 NSLog。您找到播放 mp3 文件的方法了吗?

          【讨论】:

          • 你试过把它放在IOS5的设备上吗?虽然我不确定你的问题是什么原因,即使我收到了错误,但我的声音总是会播放
          • 是的,我将目标更改为 iOS4,但在 iOS5 设备以及 iPhone 5.0 模拟上运行它并且它可以工作。如果我以 iOS4 为目标并在 iPhone 4.0 模拟上运行它,它就不起作用。
          • 顺便说一下,我对内存处理不太熟悉。代码中的某处是否需要一些变量或对象释放?
          • 对不起,我不确定你的问题是什么。我只在 IOS 5 sim 上收到此警告。
          【解决方案5】:

          来自多媒体编程指南:

          iOS 中的首选音频格式用于未压缩(最高质量) 音频,使用 16 位、小端、线性 PCM 音频数据打包在一个 CAF 文件。您可以在 Mac OS X 中将音频文件转换为这种格式 使用 afconvert 命令行工具,如下所示:

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

          afconvert 工具可让您转换为各种音频数据格式和文件 类型。请参阅 afconvert 手册页,然后在 shell 中输入 afconvert -h 提示,了解更多信息。

          对于一次播放一种声音时的压缩音频,以及当您 不需要与 iPod 应用程序同时播放音频,使用 打包在 CAF 或 m4a 文件中的 AAC 格式。

          当您需要播放多个声音时减少内存使用 同时,使用 IMA4 (IMA/ADPCM) 压缩。这减少了文件 大小,但在解压缩过程中对 CPU 的影响最小。与 线性PCM数据,将IMA4数据打包成CAF文件。

          【讨论】:

          • 谢谢,但我不确定您发布的内容。我的音频是 .CAF 格式的,它不应该适用于 CAF 格式的音频吗?为什么我需要转换我的声音?顺便说一句,我将声音用于节拍器的滴答声。谢谢
          • 您是否尝试过使用其他来源的 caf,例如从partnersinrhyme.com/pir/PIRsfx.shtml 下载并再次测试?
          • 我的声音实际上是从一些 Apple 示例代码中提取的,我认为它可以正常工作。
          • 不,AVAudioPlayer 在 mp3 中也适用于 iOS4,这是 iOS5 的错误。我开始在设备和模拟器上都有这个错误
          【解决方案6】:

          我也遇到了同样的问题。这似乎只是模拟器中iOS5的问题。我还没有在 iOS 5 设备上测试过。我一直希望 XCode 升级能让错误消失,但到目前为止还没有运气。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-17
          • 1970-01-01
          • 1970-01-01
          • 2012-04-08
          • 2016-11-09
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多