objective-c - 声音仅在设备上有效,但在模拟器上无效

标签 objective-c ios ipad audio audiotoolbox

我正在 iPad 上播放一些简短的声音,如下所示:Play a short sound in iOS

我正在使用caf我可以从 Finder 成功播放的文件。现在我经历了相当多的麻烦来尝试实现声音的播放,我很好奇可能存在哪些我似乎不明白的问题:

  • 选项 1:当我创建 SystemSoundID 并立即播放时,我在设备和模拟器上听不到任何声音。

  • 选项 2:当我为 SystemSoundID 创建实例变量并在 viewDidLoad 中初始化它时我设法播放声音,但只能在 iPad 上播放,而不是在模拟器上播放。

  • 选项 3:而不是使用 SystemSoundID我还可以使用 AVAudioPlayer 播放.wav文件,然后在 iPad 和模拟器上都可以使用,但在这里我需要在 viewDidLoad 中创建 AVAudioPlayer否则如果我一口气做完所有事情,我将听不到任何声音。

目前最好的选择似乎是Option 3因为它适用于模拟器和 iPad,但因为我需要预先初始化播放器,所以我需要 AVAudioPlayer我想播放的每个不同声音的实例,这似乎不太适合内存......

是否有我遗漏的东西,是否可以使用 AudioToolbox 在两个平台上播放声音框架(选项 1 和选项 2)

最佳答案

我写了一个库来简化这一切。它包装了 AVAudioPlayer,并且在设备和模拟器上都能正常工作。

https://github.com/nicklockwood/SoundManager

代码相当简单,尽管我做了一些半聪明的事情来初始化音频播放器。如果您不想使用该库,只需复制代码即可。

不过有一点警告 - 每当您使用 AVAudioPlayer 时,模拟器都会在内部抛出一些奇怪的异常。它们根本不会影响应用程序,但如果您在 Xcode 中启用了异常中断,那么应用程序将在启动过程中多次进入调试器,并且您必须手动恢复,这可能会吓到您,如果你没有预料到它。

关于objective-c - 声音仅在设备上有效,但在模拟器上无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10351199/

相关文章:

iPhone 应用程序在 iPad 版 AppStore 中不可用(仅限 Wi-Fi),为什么?也许使用 MkMapView ?

objective-c - 获取 NSManagedObject 的属性作为 NSDictionary

objective-c - 如何在 cocoa 中获取音频文件的比特率

ios - 防止在 iOS 模拟器的 NSURLSession 中缓存

ios - Swift:从 AppDelegate 标签更新 UILabel 不会更新

iphone - 为 iphone 创建硬件以连接外部设备。阿杜伊诺?

ios - 标签栏不出现

iphone - 等同于 iphone/iOS 的 [[NSWorkspace sharedWorkspace] runningApplications]?

iphone - 以编程方式捕获屏幕视频

iphone - UITableView 的 reloadRowsAtIndexPaths : (NSArray *) indexPaths failing to cause a reload unless you call it twice?