声音的第一个实例被延迟

First instance of sound is delayed

我使用以下代码在点击按钮时播放简单的点击声音。

import AudioToolbox

private var clickSound: SystemSoundID!

func createSound(soundName: String) -> SystemSoundID {
    var id: SystemSoundID = 0

    let url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), soundName, "wav", nil)
    AudioServicesCreateSystemSoundID(url, &id)

    return id
}

    //Load click sound.
    clickSound = createSound("ButtonClick")

这行得通,但他第一次点击按钮时,声音有点延迟。所有后续的按钮点击都会立即播放声音。这让我相信直到第一次播放时才加载声音。

有什么办法可以消除这种延迟吗?

这是一个已知问题。

您可以在启动过程中播放一小段无声的声音片段。这样,声音例程将在您需要时加载并准备好执行。

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"SILENCE" ofType:@"WAV"]], &alarm); 
AudioServicesPlaySystemSound (alarm);