Swift - секвенсор AudioKit с осциллятором (AKOscillatorBank). Частоты не будут воспроизводиться в более высоком диапазоне (MidiNote 120+) - PullRequest
0 голосов
/ 09 января 2020

Я учусь, как использовать 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))
           }
        }
    }

, как вы можете видеть, я ' м, используя номер заметки 140 и 200 . когда секвенсор воспроизводит эти ноты, они воспроизводят одно и то же аудио. если я использую .midiNoteToFrequency() и пропускаю их через генератор самостоятельно, вы можете услышать разницу.

Спасибо!

1 Ответ

0 голосов
/ 09 января 2020

В MIDI spe c есть только 7 битов для номера ноты, что позволяет значения в диапазоне 0-127. Предположительно (и это может происходить внутри Apple MusicSequence, поскольку я не думаю, что AKAppleSequencer или AKMusicTrack делают это явно), значения вне этого диапазона ограничены этим диапазоном, чтобы избежать неожиданных сбоев.

...