You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AudioKit中AKButton回调绑定方法技术咨询(附代码)

为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ô

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:37:24