4

我想知道如何AKOscillator使用 an 来控制 an 的频率,但是我在网上看到AKSequencer的几个例子(1、2 只展示了如何使用.AKSamplerAKSequencer

这是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 的正确设置?

4

2 回答 2

5

@Aurelius 的回答显然是正确的,但它并没有明确回答这个问题。为了帮助下一个遇到此问题的人,我将分享我的解决方案。

问题是:

如何AKOscillator使用AKSequencer.

答案是:

不能直接控制它。正如 Aurelius 所说,您需要将振荡器包裹在 MIDI 乐器中,这需要一些工作。

  • 您的振荡器应该包含在一个子类中AKVoice,您可以在此处找到一个示例
  • 接下来,您将创建AKPolyphonicInstrument@Aurelius 描述的包装“midi 乐器”(又名。)。这就是音序器有能力说话的东西!你可以在这里看到一个例子。

现在我们的振荡器可以与音序器对话,我们可以像这样实现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()

旋律发生器

于 2016-05-07T15:15:55.820 回答
2

您需要将振荡器包裹在 MIDI 乐器中并使用它。查看音序器演示以获取使用 fm 振荡器的示例。

于 2016-05-07T04:42:36.623 回答