我正在尝试播放系统声音。使用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)
}
它可以在设备上正常工作,但不能在模拟器中播放。我创建了一个测试应用程序除了播放这个声音之外什么都不做,所以我不认为我正在做任何事情来阻止它。
模拟器播放Safari应用程序中的声音,所以我认为它显示它能够从我的应用程序播放声音。
请注意,我还有其他两种用于播放声音的代码,这两种方式也适用于设备但不适用于模拟器。我选择这个例子是为了简单。
编辑 - 将文件更改为资源包以避免混淆
答案 0 :(得分:7)
我正在回答我自己的问题,以澄清我所学到的东西。有三个问题阻止了我的原始代码工作。注意我在模拟器上使用Xcode6 Beta4和iphone 5s。
1-我使用的原始文件路径" /System/Library/Audio/UISounds/Tone.caf"在模拟器中不起作用,它仅在设备上有效。通过向应用添加音频文件进行了更正。
2- Sound not working in iPhone Simulator?提供了适用于ios 7.1及更早版本的声音信息。不知道在我使用ios8进行测试后,有几个建议中的哪一个有效。
3-因为在ios7上运行的相同代码不适用于ios8,我假设io8模拟器代码中存在错误(ios8设备正常工作)。在我试图产生声音的三种方式中,只有一种不起作用:
AudioServicesPlaySystemSound() - 无法正常工作
AudioUnit输出 - 工作
AVAudioPlayer - 工作
答案 1 :(得分:0)
因为您指定的路径中不存在文件。要对此进行测试,请在本地保存声音文件并指定其代码路径(请参阅下文) -
let fileURL = NSURL(fileURLWithPath: "/Users/<Home dir>/Desktop/yoursund.mp3")