AudioKit中AKButton回调绑定方法技术咨询(附代码)
我看你正在尝试给AudioKit中的AKButton设置回调来触发声音,先把你的现有代码整理完善,一步步帮你实现需求:
补全后的完整代码
import UIKit import AudioKit import AudioKitUI class ViewController: UIViewController { let sounds = AKSampler() @IBOutlet weak var tam: AKButton! override func viewDidLoad() { super.viewDidLoad() // 别忘了调用父类的viewDidLoad方法 do { let hiTomFile = try AKAudioFile(readFileName: "hi_tom_D2.wav") try sounds.loadAudioFiles([hiTomFile]) AudioKit.output = sounds try AudioKit.start() // 补全AudioKit音频引擎的启动代码 } catch { print("错误信息:\(error.localizedDescription)") } // 给按钮绑定回调逻辑 setupButtonAction() } // 专门处理按钮回调绑定的方法 private func setupButtonAction() { // 绑定按钮的"触摸抬起"事件到对应的处理方法 tam.addTarget(self, action: #selector(tamButtonTapped), for: .touchUpInside) } // 按钮点击后的具体处理逻辑 @objc private func tamButtonTapped() { // 播放采样音频,D2对应的音符编号是62,velocity是音量(0-127) sounds.play(noteNumber: 62, velocity: 127) // 延迟停止音符,模拟真实打击乐的发声时长,可根据音频调整时间 DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { self.sounds.stop(noteNumber: 62) } } }
关键细节说明
- 音频引擎启动:必须调用
try AudioKit.start()启动音频引擎,否则采样声音无法正常播放 - 回调绑定:用
addTarget(_:action:for:)方法给AKButton绑定触发事件,.touchUpInside是最常用的"点击完成"触发时机 - 声音播放逻辑:AKSampler通过
play(noteNumber:velocity:)触发采样,播放后记得调用stop方法终止音符,避免声音持续输出
如果你更习惯可视化操作,也可以直接在Storyboard中选中AKButton,右键拖拽到ViewController代码里,选择Action类型,直接生成回调方法,效果和代码绑定完全一致。
内容的提问来源于stack exchange,提问作者Juan Chô
相关产品推荐
相关产品推荐

