【发布时间】:2016-04-13 07:27:24
【问题描述】:
我是 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()
}
【问题讨论】:
-
我认为音频单元可能是获得您正在寻找的那种低延迟行为的唯一方法,尽管如果有人告诉我我错了,我会很高兴。我正在努力学习如何在 Swift 中使用 AudioToolbox,并且很乐意分享我正在学习的内容。
-
感谢您的回复,非常感谢您对 Swift 中的 AudioToolbox 的帮助。我们如何取得联系?通过电子邮件?
-
你得到我的电子邮件地址了吗?我把它放在这里大约 30 分钟,然后删除它......
-
对不起,我没听懂。你介意给我发电子邮件吗?它可以在我的网站上找到:marcos.sampaio.me(在页脚中)。我不确定 StackOverflow 是否会在此处发布。
-
我同意@RomanSausarnes - 您没有足够控制
AVAudioPlayer的时间以在此应用程序中使用。对你来说好消息是,在 iOS7 中,Apple 在 AVFoundation 中提供了额外的 swift-friendly API,这可能会有所帮助。查看参考可能是一个很好的起点
标签: ios swift audio avaudioplayer low-latency