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

Posted

技术标签:

【中文标题】Swift - 带有振荡器的 AudioKit 音序器(AKOscillatorBank).频率不会在更高的范围内播放(MidiNote 120+)【英文标题】:Swift - AudioKit Sequencer with Oscillator (AKOscillatorBank). Frequencies wont play at higher range (MidiNote 120+) 【发布时间】:2020-01-09 03:41:01 【问题描述】:

我正在学习如何使用 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() 并通过振荡器本身将这些馈入,那么您可以听到差异。

谢谢!

【问题讨论】:

【参考方案1】:

在 MIDI 规范中,音符编号只有 7 位,允许值介于 0-127 之间。据推测(这可能在 Apple 的 MusicSequence 内部发生,因为我不认为 AKAppleSequencerAKMusicTrack 明确地这样做),超出此范围的值被限制在此范围内以避免意外崩溃。

【讨论】:

谢谢@c_booth!!我怀疑这有点像我只需要一个理智的检查和解释:)

以上是关于Swift - 带有振荡器的 AudioKit 音序器(AKOscillatorBank).频率不会在更高的范围内播放(MidiNote 120+)的主要内容,如果未能解决你的问题,请参考以下文章

AudioKit:平移振荡器

audiokit:同时播放两个振荡器

在 AudioKit 中“重新触发”Midi 音符

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

使用AKSequencer和AKSampler链接无声音

Swift AVAssetWriter 将带有麦克风音频和设备音频的视频录制成带有一个音轨 AVAssetTrack 的视频