在我的应用程序中,我有一个滑块,当我移动到一个刻度线时会发出“勾号”声。
这是我打电话给它的功能:
func playSound() {
if player.playing {
player.stop()
}
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
self.player.prepareToPlay()
self.player.play()
})
}
然而,我想要实现的是当用户更快地拖动滑块时声音更快...就像“tick-tick-tick”一样,就像你在车内机械旋钮上调节热量时所听到的那样。
通过我的实现,我只能在快速拖动时获得一个“滴答”声音,因为player.stop()取消了前一个。所以我想在拖动速度更快的时候能否让声音播放更快?
非常感谢任何形式的帮助。
答案 0 :(得分:4)
您可以通过以下方式提高费率:
self.player.prepareToPlay()
self.player.enableRate = true
self.player.rate = 2.0
self.player.play()
如果你想循环,你可以添加:
self.player.numberOfLoops = 3
答案 1 :(得分:0)
也许我在思考这个问题,但这是我将如何继续下去:
您应该创建一个NSArray
,其中包含与滑块值一样多的AVAudioPlayer
个实例。
即:如果滑块范围从0到10,则创建一个包含10个AVAudioPlayer的数组。
用户移动滑块后,请在滑块值的索引处获取AVAudioPlayer
中的NSArray
并播放。我会仔细考虑滑块的范围,好像范围太小而用户移动滑块的速度太快,可能会遇到与现在相同的问题。