没有关于如何设置最新版本的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
之后,发现其他人报告了同样的问题(Why is the new AKSequencer not producing any sound?),因此尝试:
mainMixer.connect(input: sampler)
mainMixer.connect(input: track)
再说一次,没有声音!还有一个指向这个相关主题的链接,类似于我之前的尝试,没有输出(How to play MIDI with AudioKit's new AKSequencer),但只是为了确保更改为使用AKSampler
并加载了本地声音:
sampler.loadSFZ(url: Bundle.main.url(forResource: "clock", withExtension: "wav")!)
又一次失败...!没有声音。
我运行的是AudioKit 4.9.5
为了保持理智,在AKSequencerTrack中有一个方法.play
,如果我调用它会发生什么?
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
是真的吗?
for track in self.sequencer.tracks {
mainMixer.connect(input: track)
track.play()
print("> > > > track.isPlaying: \(track.isPlaying)")
}
是,isPlaying
返回true
> > > > track.isPlaying: true
但是,没有,没有声音!
我认为AKSequencer
目前是一个黑盒,除非有人在Github中发布一个示例(我在源代码中搜索了它,但在撰写本文时什么都没有),否则不应该使用它。也许我做错了什么我不知道,只是浪费了我一天的时间去尝试不同的事情。
发布于 2020-05-19 01:50:30
@c_booth在下面的帖子( AudioKit: Using the new AKSequencer with any variety of the callback instruments )中提供了答案。
似乎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
https://stackoverflow.com/questions/61603346
复制相似问题