我的 iPhone 模拟器无法播放声音。首先,我正在使用
AudioServicesPlaySystemSound()
开发的一个应用程序停止工作了。我花了一段时间调试它,但当我在设备上运行该应用程序时,声音仍在 iPhone 上运行。我在其他 iPhone 应用程序(例如 Crash Landing 示例应用程序)中得到了相同的结果。
我在模拟器或 Xcode 首选项中的任何地方都找不到声音设置。我试过通过“重置内容和设置”菜单项重置模拟器无济于事。
在您的 Mac 上,转到“系统偏好设置”>“声音”>“音效”,然后取消选中并重新选中“播放用户界面音效”。
您需要重新激活您的系统声音,请参阅this页面的末尾。
我在模拟器里没有声音,所以我用mobile safari测试了一下,试了一下播放mp3:没有声音!
以上所有提示均无济于事。最终,我将我的 INPUT 源从虚拟 soundflower 设备更改为 Line-In,并且模拟器工作了!
因此,即使应用程序不使用输入,它也不能很好地与 Soundflower 配合使用。
我在从 OSX10.5.7 更新到 10.6.2 后看到了这个问题
并且我做了以下改动让模拟器重新唱歌: 转到“应用程序/实用程序”并运行“音频 MIDI 设置”,然后将 midi 格式从 48000 更改为 44100。
OpenAL 在模拟器上不工作已通过 2.1 SDK 修复。确保 Active SDK 和 Active Executable 设置为 2.1.
顺便说一句,请确保您使用的是最新版本的 CrashLanding (v1.8)。最近修复了 SoundEngine 中的一些严重漏洞。
我发现模拟器(2.1 SDK)中的声音非常不一致。有时有效,有时无效。即使它确实有效,它通常也非常不稳定和失真(在播放 mp3 等音频文件时)。
需要记住的几件事:
AudioSessionInitialize
kAudioSessionProperty_AudioCategory
为会话设置AudioSessionSetProperty
属性(值如kAudioSessionCategory_MediaPlayback
)AudioSessionSetActive(YES)
当然,当所有其他方法都失败时,只需在您的硬件上运行它!
编辑:既然 2.2 SDK 已经发布,我在模拟器中的声音没有任何问题。他们一定已经修复了错误!我强烈建议您升级到 2.2 SDK。
如果重新激活系统声音对您不起作用,请尝试以下操作: 启动 audio-midi-setup,然后将“内置输出”配置为使用 44.100Hz、2 通道、24 位。 (来自http://www.cocos2d-iphone.org/forum/topic/4159)
不知何故几天后,我的 iPhone 模拟器现在需要 48.000Hz、2 个通道、24 位。 稍微玩一下,注意它可能会在插入耳机、进入待机、重启等时随机变化。
这里有一个题外话提示:当您将耳机插入 iphone/ipad 时,缓冲区大小可能会增加一倍(例如,从 512 字节到 1024 字节),确保您不依赖于您请求的缓冲区大小!
以下是声音可能无法在模拟器设备上播放的另外两个可能原因:
AVAudioSession.Category
被设置在AVAudioSession
上有关。如果类别是 .ambient
那么声音会在 iPad 上播放而不是 iPhone 模拟器,如果类别是 .playback
那么它会在两者上播放。有趣的是,这似乎不是 iOS 15 的问题,这里 .ambient
类别也在 iPhone 模拟器上播放。AVAudioPlayer.play(atTime: TimeInterval)
,那么您传入的TimeInterval
必须晚于设备的当前时间。传递 0 将不起作用,只会播放任何内容。即使传递一个值 > 0 也可能什么都不播放,您需要将时间偏移添加到播放器上的deviceCurrentTime
。有关示例,请参阅相关文档。这当然也适用于真实设备,而不仅仅是模拟器。我在运行 watchOS 模拟器时遇到了这个问题。就我而言,以下方法有效:
我的症状是:
iPhone 模拟器的静音模式似乎有一个错误。为了解决这个问题,我打开静音模式然后再次关闭:
感谢Benzy Neez 的回答 提示该问题与
AVAudioSession.Category.ambient
相关。