2016-08-16 91 views
0

我试图在两个对象发生碰撞时播放声音,并且每次都出现此错误。我用我的iPhone 6测试下面的代码:尝试播放音频时出现错误:998:未能设置声音,err = -50

guard soundEffects[sound] == nil else 
    { 
     print("Sound effect \(sound) already exists") 
     return false 
    } 

    guard let soundURL = NSBundle.mainBundle().URLForResource(sound, withExtension:format, subdirectory:path) else 
    { 
     print("Error creating URL for resource \(sound)") 
     return false 
    } 

    print(soundURL) 

    var systemID : SystemSoundID = id 

    soundEffects[sound] = systemID 
    print(AudioServicesCreateSystemSoundID(soundURL, &systemID)) 

    id += 1 

,我尝试播放它像这样:

guard soundEffects[sound] != nil else 
    { 
     print("Sound effect '\(sound)' not found") 
     return false 
    } 

    print(soundEffects[sound]!) 

    AudioServicesPlaySystemSound(soundEffects[sound]!) 

文件的格式为WAV和我打印出来的代码创建方法是0.我也似乎无法找到有关苹果网站或网络上任何其他地方的错误的任何文档。难道我做错了什么?

更新:

显然存储在字典中的价值以后又加载它是什么导致出现该错误。但事情是我需要有一个ID的字典。我应该如何存储ID,为什么存储它会导致错误?

回答

0

我能够这样做是为了解决我的问题:

let systemID : SystemSoundID = someUInt32 
soundEffects[sound] = systemID 
AudioServicesCreateSystemSoundID(soundURL, &soundEffects[sound]!) 
AudioServicesPlaySystemSound(soundEffects[sound]!) 

看来,上是唯一的对象,你可以调用玩的创建方法的对象执行动作,因此,你需要执行创建特定于字典实例的方法(或者您试图存储声音的任何对象)。