我想知道如何使用AKSequencer
控制AKOscillator
的频率,但我在网上看到的几个例子(1,2)只展示了如何使用AKSequencer
控制AKSampler
。
以下是AudioKit的GitHub页面中的一个简化示例:
// 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的正确设置?
@Aurelius的答案显然是正确的,但它并不能完全回答这个问题。为了帮助下一个有这个问题的人,我将分享我的解决方案。
问题是:
如何使用AKSequencer
控制AKOscillator
。
答案是:
你不能直接控制它。正如Aurelius所说,你需要把你的振荡器包在一个midi乐器里,这需要一些工作。
- 您的振荡器应该包含在
AKVoice
的子类中,您可以在这里找到一个例子 - 接下来,您将创建@Aurelius描述的包装"迷笛乐器"(又名
AKPolyphonicInstrument
)这就是测序仪的能力你可以在这里看到一个例子
现在我们的振荡器有了与测序仪通话的设备,我们可以实现MollyBChimes方法,如下所示:
在类级别创建一个新的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()
旋律生成器
您需要将振荡器封装在midi仪器中并使用它。查看序列发生器演示,了解使用调频振荡器的示例。