在 iPhone 模拟器中无法发声?

54

不知何故,我的iPhone模拟器无法播放声音。我正在开发一个使用AudioServicesPlaySystemSound()的应用程序,但它已经停止工作了。我花了很长时间来调试这个问题,但是当我在设备上运行该应用程序时,iPhone上的声音仍然正常工作。我在其他iPhone应用程序中也得到了相同的结果,例如示例Crash Landing应用程序。

我无法在模拟器或Xcode首选项中找到任何声音设置。我尝试通过“重置内容和设置”菜单项重置模拟器,但并没有用。

9个回答

79
在您的 Mac 上,进入“系统偏好设置” > “声音” > “声音效果”,然后取消选中并重新选中“播放用户界面声效”。
您需要重新激活系统声音,请参见this页面末尾。

2
谢谢 - 这对我有用。请前往“系统偏好设置”>“声音”>“声音效果”,然后取消选中并重新选中“播放用户界面声音效果”。此后,iPhone模拟器突然又开始播放声音了。 - Nick
谢谢,这对我也有效!:)使用iPhone SDK 3.2和OSX 10.6。 - Sadat
当存在多个声音输出设备时,请确保在“通过以下方式播放提示音”下拉选项中选择正确的输出设备。 - Leon
9
Apple.com上的讨论已被删除。 - Vincent
1
链接已经失效了。太遗憾了。 - kelin
完全关闭模拟器(按下cmd+Q),然后重新运行应用程序,这对我有帮助! - Boaz Saragossi

23

模拟器没有声音,于是我在移动版 safari 上测试并尝试播放 mp3:无声!

以上所有提示都没有帮助。最终,我将输入源从虚拟的 Soundflower 设备更改为 Line-In,然后模拟器就可以使用了!

所以,即使应用程序没有使用输入,它也不能很好地与 Soundflower 一起使用。


对我也起作用了 - 我把输入切换到了USB耳机,需要切换回线路输入。+1。 - jstevenco
哇..在Xcode 4.2和Lion 10.7.3上我为此苦思冥想了数小时!绝对需要向苹果报告这个错误!谢谢。 - jsherk
工作了。这真的不直观。我从来没有想过要检查输入。现在我可以测试声音程序了(叹气)。 - Lloyd Sargent

12

我的症状是:

  • 我的应用程序在iPad模拟器中播放声音,但在iPhone模拟器中没有声音
  • iPhone模拟器的声音正常,例如Safari中的YouTube

似乎iPhone模拟器中的静音模式存在一个错误。为了解决这个问题,我打开并关闭了静音模式:

  1. 在模拟器菜单中,打开窗口 > 显示设备边框
  2. 边框显示硬件按钮。找到静音模式开关,点击两次。
  3. 如果需要,隐藏边框。

enter image description here

感谢Benzy Neez的回答,提示了问题与AVAudioSession.Category.ambient有关。

1
不错!循环静音模式的解决方法似乎可以持续整个模拟器会话的生命周期,但需要在重新启动模拟器后再次执行。 - Benzy Neez

4

我在将操作系统从OSX10.5.7升级到10.6.2后遇到了这个问题。

为了让模拟器再次运行,我做了以下更改: 前往"应用程序/实用工具"并运行"音频MIDI设置",然后将midi格式从48000更改为44100。


谢谢你的提示-我的音频在10.6.2中仍然可以工作,但知道这个方法解决了你的问题很好。 - pix0r

3
我发现模拟器(2.1 SDK)中的声音非常不稳定。有时它能正常工作,有时却不能。即使它能正常工作,播放mp3等音频文件时也通常会出现很多杂音和失真。
以下是需要记住的几点:
- 当您的应用程序启动完成后,请立即调用AudioSessionInitialize - 通过AudioSessionSetProperty设置会话的kAudioSessionProperty_AudioCategory属性(例如使用kAudioSessionCategory_MediaPlayback值) - 调用AudioSessionSetActive(YES) 当然,如果所有其他方法都失败了,就在您的硬件上运行它吧!
编辑:现在2.2 SDK已经发布,我在模拟器中没有遇到任何声音问题。他们一定修复了这些错误!我强烈建议您升级到2.2 SDK。

3

在模拟器上无法使用OpenAL的问题已经在2.1 SDK中得到了解决。请确保“Active SDK”“Active Executable”均已设置为2.1。

另外,请确保您正在使用最新版本的CrashLanding(v1.8)。最近修复了SoundEngine中的一些恶性泄漏问题。


2
如果重新启用系统声音没有效果,请尝试以下操作: 启动“音频MIDI设置”,然后将“内置输出”配置为使用44.100Hz、2个通道、24位。(来自http://www.cocos2d-iphone.org/forum/topic/4159
不知何故,几天后我的iPhone模拟器现在需要48.000Hz、2个通道、24位。 试着调整一下,但要注意,它可能会在插入耳机、待机、重启等情况下随机更改。
这里还有一个与主题无关的提示:当您将耳机插入iPhone/iPad时,缓冲区大小可能会加倍(例如从512字节增加到1024字节),请确保您不依赖于您请求的缓冲区大小!

1

以下是模拟器设备上声音无法播放的另外两个可能原因:

使用 Xcode 14.2 和运行 iPadOS 16 / iOS 16 的模拟器时,我注意到声音在 iPad 模拟器上播放,但在 iPhone 模拟器上没有声音。原来这与设置在 AVAudioSession 上的 AVAudioSession.Category 有关。如果类别是 .ambient,则声音会在 iPad 上播放,但不会在 iPhone 模拟器上播放;如果类别是 .playback,则两者都可以播放。有趣的是,这似乎对于 iOS 15 来说不是问题,这里 .ambient 类别也可以在 iPhone 模拟器上播放。
如果您调用 AVAudioPlayer.play(atTime: TimeInterval),那么传递的 TimeInterval 必须晚于设备的当前时间。传递 0 不起作用,什么也不播放。即使传递一个值 > 0,也可能什么也不播放,您需要将时间偏移量添加到播放器上的 deviceCurrentTime。请参见 相关文档 中的示例。当然,这也适用于真实设备,而不仅仅是模拟器。

谢谢!对我来说,原因1是问题所在。通过循环静音模式进行解决,已发布为单独的答案。 - jedwidz

0

我在运行watchOS模拟器时遇到了这个问题。在我的情况下,以下方法有效:

  • 关闭声音无效的模拟器。
  • 打开另一个watchOS模拟器。
  • 关闭它并重新打开原来的模拟器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接