为什么ios系统声音不能在模拟器中播放?

Jim*_*m T 8 ios ios-simulator swift

我正在尝试播放系统声音.使用Xcode 6 Beta 4.这是代码:

func playKeyClick()
{
    let filePath = NSBundle.mainBundle().pathForResource("Tock", ofType: "aiff")
    if NSFileManager.defaultManager().fileExistsAtPath(filePath) {
        println("file exists")
    }
    let fileURL = NSURL(fileURLWithPath: filePath)
    var soundID:SystemSoundID = 0
    AudioServicesCreateSystemSoundID(fileURL, &soundID)
    AudioServicesPlaySystemSound(soundID)
}
Run Code Online (Sandbox Code Playgroud)

它在设备上工作正常但不能在模拟器中播放.我已经创建了一个测试应用程序除了播放这个声音之外什么都不做,所以我认为我没有做任何事情来阻止它.

模拟器从Safari应用程序播放声音确定,所以我认为它显示它能够从我的应用程序播放声音.

请注意,我还有其他两种用于播放声音的代码,这两种方式也适用于设备但不适用于模拟器.我选择这个例子是为了简单.

编辑 - 将文件更改为资源包以避免混淆

Jim*_*m T 7

我正在回答我自己的问题,以澄清我所学到的东西.有三个问题阻止了我的原始代码工作.注意我在模拟器上使用Xcode6 Beta4和iphone 5s.

1-我使用的"/System/Library/Audio/UISounds/Tone.caf"的原始文件路径在模拟器中不起作用,它仅在设备上有效.通过向应用添加音频文件进行了更正.

2- 声音在iPhone模拟器中不起作用?提供了适用于ios 7.1及更早版本的声音信息.不知道在我使用ios8进行测试后,有几个建议中的哪一个有效.

3-因为在ios7上运行的相同代码在ios8上不起作用,我假设io8模拟器代码中存在错误(ios8设备工作正常).在我试图产生声音的三种方式中,只有一种不起作用:

AudioServicesPlaySystemSound() - 不起作用

AudioUnit输出 - 有效

AVAudioPlayer - 有效

  • 我确认AudioServicesPlaySystemSound()不像在iOS 7.1中那样工作.模拟器中没有播放声音,但它在实际设备中有效.(在Xcode 6 GM上测试过) (3认同)
  • AudioServicesPlaySystemSound() 在模拟器中对我不起作用。它确实在设备上工作。使用 Xcode 6.0.1 和 iOS 8.0 进行测试。 (2认同)

Avi*_*Avi 0

因为您指定的路径中不存在文件。要测试这一点,请在本地保存一个声音文件并指定其代码路径(参见下面的示例)-

    let fileURL = NSURL(fileURLWithPath: "/Users/<Home dir>/Desktop/yoursund.mp3")
Run Code Online (Sandbox Code Playgroud)