我是iOS的初学者,想用Swift设计一个鼓组应用程序。我设计了一个带有单个按钮的视图,并编写了下面的代码,但它存在一些问题:
- 当我快速地点击按钮时,一些声音会丢失,就像打鼓一样。
- 在“打鼓滚动”期间,每次触摸按钮时声音都会中断,而不是让样本播放到结束。对于铙钹滚动等情况非常糟糕。即使我再次触摸按钮,我也希望听到每个样本完整的声音。
- 触摸和声音之间存在延迟。我知道AVAudioPlayer不是低延迟音频的最佳选择,但作为初学者,很难在Swift中学习OpenAL、AudioUnit而没有代码示例或教程。这个问题类似于这个问题:Which framework should I use to play an audio file (WAV, MP3, AIFF) in iOS with low latency?。
override func viewDidLoad() {
super.viewDidLoad()
// Enable multiple touch for the button
for v in view.subviews {
if v.isKindOfClass(UIButton) {
v.multipleTouchEnabled = true
}
}
// Init audio
audioURL = NSBundle.mainBundle().URLForResource("snareDrum", withExtension: "wav")!
do {
player = try AVAudioPlayer(contentsOfURL: audioURL)
player?.prepareToPlay()
} catch {
print("AVAudioPlayer Error")
}
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
player?.stop()
player = nil
}
@IBAction func playSound(sender: UIButton) {
player?.currentTime = 0
player?.play()
}
AVAudioPlayer
的时间,因此在这种应用程序中使用它并不足够。对你来说好消息是,在iOS7中,苹果公司在 AVFoundation 中提供了额外的适用于 Swift 的 API,可能会对你有所帮助。查看该参考资料可能是一个好的起点。 - markoprepareToPlay()
函数来为AVAudioPlayer预加载音频文件以最小化播放延迟吗?如果不起作用,你可以尝试使用AVPlayer,这是一种更精确的播放器。你也可以预加载AVPlayer的资源以最小化音频播放延迟。 - MikeG