如何使用音序器控制振荡器的频率
How do I control an oscillator's frequency with a sequencer
我想知道如何使用 AKSequencer
来控制 AKOscillator
的频率,但是我在网上看到的几个例子 (1, 2) 只展示了如何用 AKSequencer
控制 AKSampler
。
这是来自 AudioKit's GitHub page 的简化示例:
// relevant class properties
var seq: AKSequencer?
var syn1 = AKSampler()
// viewDidLoad
seq = AKSequencer(filename: "seqDemo", engine: AudioKit.engine)
seq?.enableLooping()
seq!.avTracks[1].destinationAudioUnit = syn1.samplerUnit
我的预期:
基于上面的例子,我希望能够做这样的事情:
var voice1 = Voice() // replaces the AKSampler
seq = AKSequencer(filename: "seqDemo", engine: AudioKit.engine)
seq.loopOn()
//seq.avTracks[0].destinationAudioUnit = voice1.oscillator.avAudioNode
seq.note = voice1.oscillator.frequency // "note" doesn't actually exist in the API
这显然不能解决问题。
问题:
允许我使用 AKSequencer 控制 AKOscillator 的正确设置是什么?
您需要将振荡器封装在 MIDI 乐器中并使用它。查看 sequencer demo 以获取使用 fm 振荡器的示例。
@Aurelius 的回答显然是正确的,但并没有明确回答问题。为了帮助遇到此问题的下一个人,我将分享我的解决方案。
问题是:
如何使用 AKSequencer
.
控制 AKOscillator
答案是:
你不能直接控制它。正如 Aurelius 所说,您需要将振荡器封装在 midi 乐器中,这需要一些工作。
- 你的振荡器应该包含在 class 子 class 和
AKVoice
中,你可以找到一个 example of this here.
- 接下来,您将创建 @Aurelius 描述的包装 "midi instrument"(又名
AKPolyphonicInstrument
)。 这就是音序器可以与之对话的对象!你可以看到一个example of this here。
现在我们的振荡器可以与音序器对话,我们可以像这样实现 MollyBChimes approach:
在 class 级别创建新 AKPolyphonicInstrument 的实例,对我来说它看起来像这样:
var osc1 = SynthVoiceInstrument(voiceCount: 4)
var sequencer = AKSequencer()
var mixer = AKMixer()
var melody: AKMIDIInstrument?
然后在您的设置函数或 viewDidLoad 中执行以下操作:
melody = AKMIDIInstrument(instrument: osc1)
melody?.enableMIDI(midi.midiClient, name: "melodicSound midi in")
mixer.connect(melody!)
AudioKit.output = pumper
AudioKit.start()
sequencer.newTrack()
sequencer.setLength(seqLen)
sequencer.tracks[0].setMIDIOutput((melody?.midiIn)!)
/*
melody generator function just to hear some sounds
see Melody Generator link below.
*/
genNewMelodicSequence(minor: true)
sequencer.loopEnabled = true
sequencer.setBPM(100)
sequencer.play()
我想知道如何使用 AKSequencer
来控制 AKOscillator
的频率,但是我在网上看到的几个例子 (1, 2) 只展示了如何用 AKSequencer
控制 AKSampler
。
这是来自 AudioKit's GitHub page 的简化示例:
// relevant class properties
var seq: AKSequencer?
var syn1 = AKSampler()
// viewDidLoad
seq = AKSequencer(filename: "seqDemo", engine: AudioKit.engine)
seq?.enableLooping()
seq!.avTracks[1].destinationAudioUnit = syn1.samplerUnit
我的预期:
基于上面的例子,我希望能够做这样的事情:
var voice1 = Voice() // replaces the AKSampler
seq = AKSequencer(filename: "seqDemo", engine: AudioKit.engine)
seq.loopOn()
//seq.avTracks[0].destinationAudioUnit = voice1.oscillator.avAudioNode
seq.note = voice1.oscillator.frequency // "note" doesn't actually exist in the API
这显然不能解决问题。
问题:
允许我使用 AKSequencer 控制 AKOscillator 的正确设置是什么?
您需要将振荡器封装在 MIDI 乐器中并使用它。查看 sequencer demo 以获取使用 fm 振荡器的示例。
@Aurelius 的回答显然是正确的,但并没有明确回答问题。为了帮助遇到此问题的下一个人,我将分享我的解决方案。
问题是:
如何使用 AKSequencer
.
AKOscillator
答案是:
你不能直接控制它。正如 Aurelius 所说,您需要将振荡器封装在 midi 乐器中,这需要一些工作。
- 你的振荡器应该包含在 class 子 class 和
AKVoice
中,你可以找到一个 example of this here. - 接下来,您将创建 @Aurelius 描述的包装 "midi instrument"(又名
AKPolyphonicInstrument
)。 这就是音序器可以与之对话的对象!你可以看到一个example of this here。
现在我们的振荡器可以与音序器对话,我们可以像这样实现 MollyBChimes approach:
在 class 级别创建新 AKPolyphonicInstrument 的实例,对我来说它看起来像这样:
var osc1 = SynthVoiceInstrument(voiceCount: 4)
var sequencer = AKSequencer()
var mixer = AKMixer()
var melody: AKMIDIInstrument?
然后在您的设置函数或 viewDidLoad 中执行以下操作:
melody = AKMIDIInstrument(instrument: osc1)
melody?.enableMIDI(midi.midiClient, name: "melodicSound midi in")
mixer.connect(melody!)
AudioKit.output = pumper
AudioKit.start()
sequencer.newTrack()
sequencer.setLength(seqLen)
sequencer.tracks[0].setMIDIOutput((melody?.midiIn)!)
/*
melody generator function just to hear some sounds
see Melody Generator link below.
*/
genNewMelodicSequence(minor: true)
sequencer.loopEnabled = true
sequencer.setBPM(100)
sequencer.play()