如何使用 Audiokit 对原始值而不是 MIDI 音符进行排序

Posted

技术标签:

【中文标题】如何使用 Audiokit 对原始值而不是 MIDI 音符进行排序【英文标题】:How to sequence raw values instead of midi notes with Audiokit 【发布时间】:2018-03-02 14:52:51 【问题描述】:

我是 Audiokit 的新手。我想对一组 Double 原始值进行排序,以便像 eurorack 模块中的衰减器一样使用。使用 AKSequencer 似乎是不可能的,因为它们旨在与轨道 (AudioKit.AKMusicTrack) 一起使用,将 MIDI 数据发送到 AKMidi-Insrument 实例。 那么如何对 f.e. 进行排序呢?原始振荡器或表格属性值?谢谢!

【问题讨论】:

我觉得我可以使用 AKCallbackInstrument 来实现我的目标... 【参考方案1】:

使用 AKCallbackInstrument 和具有序列长度的数组中的一些值是可能的

let sequenceLength = AKDuration(beats: 8.0)
let sequencerCallbackInst = AKCallbackInstrument()
var seq1Values = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

...

sequencer.setLength(sequenceLength)
let stepSize: Float = 1 //1/8
let numberOfSteps = Int(Float(sequenceLength.beats) / stepSize)

...

let seqPositioncallbackTrack = sequencer.newTrack()
seqPositioncallbackTrack?.setMIDIOutput(sequencerCallbackInst.midiIn)
        sequencerCallbackInst.callback =  status, noteNumber, velocity in
            self.onSequencerStepChange(status: status, noteNumber: noteNumber, velocity: velocity)
        

...

for i in 0 ..< numberOfSteps 
            seqPositioncallbackTrack?.add(noteNumber: MIDINoteNumber(i), velocity: 100, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))

...

    private func onSequencerStepChange(status: AKMIDIStatus, noteNumber: MIDINoteNumber, velocity: MIDIVelocity) 

        guard status == .noteOn
        else  return 

        let stepValue = Int(noteNumber)
        // do something

...

【讨论】:

如果我的sn-p还不够,这里可以找到更多灵感:***.com/questions/47629637/…

以上是关于如何使用 Audiokit 对原始值而不是 MIDI 音符进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何按值而不是按引用复制对象[重复]

如何进行多热编码但使用实际值而不是实际值

Laravel减少列值而不是负值

如何使用 AudioKit 加载第三方音频单元

对 OpenGL 绘图形状使用值而不是 -1...1?

如何配置 Debezium Mysql 连接器以生成原始键而不是 struct 或 json 对象?