ios - 使用 AudioKit 录制和播放 MIDI 轨道
问题描述
我正在尝试用一个采样器录制 MIDI 音轨,但同时。对于每一个新的录音,它都会在音序器上创建新的轨道,使用不同的通道回调乐器。
当轨道不相交时,一切正常。但是当我为与已经录制的音轨相交的新音轨添加注释时,播放时录制的音轨不会调用声音的回调函数,它将是标准的“哔”。
下面是设置跟踪和回调函数的代码:
func startRecord() {
guard let newTrack = sequencer.newTrack() else { return }
recordingTrack = newTrack
recordingChannel = MIDIChannel(sequencer.tracks.count)
let midiInstrument = AKMIDICallbackInstrument()
let channel = recordingChannel
let sampler = currentSampler
midiInstrument.callback = { (status, note, velocity) in
let status = AKMIDIStatus(byte: status)!.type!
switch status {
case .noteOn:
try! sampler.play(noteNumber: note, velocity: velocity, channel: channel!)
case .noteOff:
try! sampler.stop(noteNumber: note, channel: channel!)
default:
break
}
}
newTrack.setMIDIOutput(midiInstrument.midiIn)
sequencer.rewind()
sequencer.preroll()
sequencer.play()
}
解决方案
每次调用此函数时,您都会创建一个新的 AKMIDICallbackInstrument 实例。您似乎没有将这些引用存储在此代码块之外。尝试保留 AKMIDICallbackIntruments 的类级别数组,您可以向其中添加您创建的新实例。
推荐阅读
- c++ - 使用 OpenCV contrib 4.1.2 安装 OpenCV 4.1.2 时出现 CMake 错误
- javascript - Nodejs HTTP.get() 添加用户代理
- c - 无法在屏幕上打印文件内容
- sql - 试图从不包含值的 ID 中恢复结果
- ios - NativeScript / iOS 标签未在最后一个 StackLayout 中完全显示
- time-complexity - 下面检查一个点是否位于多边形内的时间复杂度是多少?是 O(n) 还是别的什么?
- c# - 如何在 JSON 中编写 POST 请求以发布新产品?
- html - 仅使用 CSS 和 HTML 来激活
标签? - c# - ASP.NET MVC Core API 将枚举序列化为字符串
- python - LinearSVC(scikit-learn)没有取得任何进展