最新版本的AKSequencer如何设置的例子没有,所以我不得不根据以前的版本假设一些事情。
我有以下的实现。AKAppleSequencer
工作,有音频输出。
let track = sequencer.newTrack()
track?.setMIDIOutput(sampler.midiIn)
track?.add(noteNumber: 60, velocity: 100, position: AKDuration(beats: 1), duration: AKDuration(beats: 0.25))
sequencer.enableLooping(AKDuration(beats: 4))
sequencer.setTempo(self.defaultTempo)
sequencer.play()
同时,我认为我应该是足够的最新的。AKSequencer
没有音频输出。
let track: AKSequencerTrack = self.sequencer.addTrack(for: self.sampler)
track.add(noteNumber: 60, velocity: 100, position: 1, duration: 1)
sequencer.length = 4
sequencer.loopEnabled = true
sequencer.tempo = 60
sequencer.play()
这两种情况都有 sampler
连接 mainMixer
并被分配给 AudioKit.output
.
由于这对最新的 AKSequencer
,我想,也许堵住了 AKSequencerTrack
至 mainMixer
并拔下插头 sampler
至 mainMixer
能做到吗?但是没有用!
mainMixer.connect(input: track)
没办法了! 所以,在找了 AKSequencerTrack
发现有人报告同样的问题(为什么新的AKSequencer不产生任何声音?),于是试了一下。
mainMixer.connect(input: sampler)
mainMixer.connect(input: track)
同样,没有声音!还有一个相关话题的链接,和我之前的尝试类似,也是没有输出(如何使用AudioKit新的AKSequencer来演奏MIDI。),但只是为了确保改为使用 AKSampler
并加载了一个本地声音。
sampler.loadSFZ(url: Bundle.main.url(forResource: "clock", withExtension: "wav")!)
又失败了... 没有声音。
我正在运行AudioKit 4.9.5。
为了保持我的理智,有一个方法 .play
在AKSequencerTrack中,如果我调用它会发生什么?
track.play()
没有声音 好吧,如果我把采样器改成了 AKSnareSynth
?
let t: AKSynthSnare = AKSynthSnare()
sequencer.addTrack(for: t)
它玩了吗?没有!
在非AKSEquencer中我有输出吗?有。
let t: AKSynthSnare = AKSynthSnare()
self.mainMixer.connect(input: t)
t.play(noteNumber: 60,
velocity: MIDIVelocity(127),
channel: MIDIChannel(1))
那... .isPlaying
是Truthy吗?
for track in self.sequencer.tracks {
mainMixer.connect(input: track)
track.play()
print("> > > > track.isPlaying: \(track.isPlaying)")
}
是的,是 isPlaying
返回 true
:
> > > > track.isPlaying: true
但是,不,没有声音!
我想... AKSequencer
目前是一个暗箱,不应该被使用,除非有人在Github上发布了一个例子(我在源代码中搜索了一下,但在写文章的时候没有)。也可能是我做错了什么,我不知道,只是浪费了一天的时间去尝试不同的东西。
@c_booth在下面的帖子中提供了答案( AudioKit。使用新的AKSequencer与任何种类的回调乐器。 )
看来 loop
, tempo
定位于 track
而不是音序器本身。
// set up a track
let track = seq.addTrack(for: cbInst)
for i in 0 ..< 4 {
track.add(noteNumber: 60, position: Double(i), duration: 0.5)
}
track.length = 4.0
track.loopEnabled = true