【问题标题】:Recording and playback MIDI tracks using AudioKit使用 AudioKit 录制和播放 MIDI 轨道
【发布时间】:2019-09-07 01:15:20
【问题描述】:

我正在尝试使用一个采样器录制 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()
    }

【问题讨论】:

    标签: ios swift midi audiokit coremidi


    【解决方案1】:

    每次调用此函数时,您都会创建一个新的 AKMIDICallbackInstrument 实例。您似乎没有将这些引用存储在此代码块之外。尝试保留 AKMIDICallbackIntruments 的类级别数组,您可以向其中添加您创建的新实例。

    【讨论】:

    • 我试过你说的,但并没有解决问题。在播放的那一刻,每个音轨的 AKMIDICallbackInstrument 按类保留,每个 AKMIDICallbackInstrument 都有 midiIn 属性。
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多