首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用排序器控制振荡器的频率?

如何用排序器控制振荡器的频率?
EN

Stack Overflow用户
提问于 2016-05-07 01:09:30
回答 2查看 670关注 0票数 4

我想知道如何使用AKOscillator来控制AKSequencer的频率,但是我在网上看到的几个例子(12)只显示了如何用AKSequencer控制AKSampler

下面是一个来自AudioKit的GitHub页面的简化示例

代码语言:javascript
复制
// 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

我所期望的:

基于上面的例子,我希望能够这样做:

代码语言:javascript
复制
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

这显然不起作用。

问题:

什么是适当的设置将允许我控制一个AKOscillator与AKSequencer?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-07 04:42:36

你会想要把振荡器包在一个midi仪器里,然后使用它。查看排序器演示中使用fm振荡器的示例。

票数 2
EN

Stack Overflow用户

发布于 2016-05-07 15:15:55

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

问题是:

如何使用AKOscillator控制AKSequencer

答案是:

你不能直接控制它。正如奥雷利乌斯所说,你需要把你的振荡器包在一个midi仪器里,这需要一些工作。

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

既然我们的振荡器具备了与排序器对话的设施,我们就可以像这样实现MollyBChimes方法

在类级别上,创建一个新AKPolyphonicInstrument的实例,对我来说,如下所示:

代码语言:javascript
复制
var osc1 = SynthVoiceInstrument(voiceCount: 4)
var sequencer = AKSequencer()
var mixer = AKMixer()
var melody: AKMIDIInstrument?

然后,在您的设置函数或viewDidLoad中,您将执行以下操作:

代码语言:javascript
复制
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()

旋律发生器

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37083441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档