我正在学习如何使用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()
并将其本身通过振荡器馈入,则可以听到区别。
谢谢!
在MIDI规范中,音符编号只有7位,允许值在0-127之间。大概是这样(这可能在Apple MusicSequence中内部发生,因为我不认为AKAppleSequencer
或AKMusicTrack
会明确地执行此操作),因此该范围之外的值被限制在此范围内,以避免意外崩溃。