Swift-带振荡器的AudioKit音序器(AKOscillatorBank)。频率不会在较高范围内播放(MidiNote 120 +)

问题描述 投票:0回答:1

我正在学习如何使用AudioKit。我正在尝试使用音序器和振荡器。一切正常,但我注意到,当我向定序器轨道中的振荡器提供更高的频率时,它将为该频率(MidiNote)和更高的频率提供相同的频率。如果将相同的频率传递给振荡器,则可以看到变化。

我的初始设置

let oscillator = AKOscillatorBank()
let oscillatorTrackIndex = 0
let sequencer = AKAppleSequencer()
let midi = AKMIDI()

var scale: [Int] = []
let sequenceLength = AKDuration(beats: 8.0)


func setupTracks() {
        let midiNode = AKMIDINode(node: oscillator)
        _ = sequencer.newTrack()
        sequencer.setLength(trueLength)

        AudioKit.output = midiNode
        try! AudioKit.start()

        midiNode.enableMIDI(midi.client, name: "midiNode midi in")
        sequencer.setTempo(currentTempo)
        sequencer.enableLooping()
        sequencer.play()
}

我的方法

func generateSequence(_ stepSize: Float = 1/4, clear: Bool = true) {
        if clear { sequencer.tracks[oscillatorTrackIndex].clear() }
        let numberOfSteps = Int(Float(sequenceLength.beats) / stepSize)

        for i in 0 ..< numberOfSteps { //4
           if i%4 == 0 {
              sequencer.tracks[0].add(noteNumber: 140, velocity: 127, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))
           } else {
              sequencer.tracks[0].add(noteNumber: 200, velocity: 127, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))
           }
        }
    }

如您所见,我正在使用音符编号140200。当音序器播放这些音符时,它们会渲染出相同的音频。如果我使用.midiNoteToFrequency()并将其本身通过振荡器馈入,则可以听到区别。

谢谢!

audiokit
1个回答
0
投票

在MIDI规范中,音符编号只有7位,允许值在0-127之间。大概是这样(这可能在Apple MusicSequence中内部发生,因为我不认为AKAppleSequencerAKMusicTrack会明确地执行此操作),因此该范围之外的值被限制在此范围内,以避免意外崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.