How is the AKSequencer setup in AudioKit > 4.8?

耗尽温柔 提交于 2020-05-24 04:01:49

问题


An example of how to set up the latest version of AKSequencer is not available, so I had to assume a few things based in the previous version.

I have the following implementation for the AKAppleSequencer that works and there's audio output:

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()

Meanwhile, what I supposed to be enough for the latest AKSequencer has no audio output:

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()

Both cases have the sampler connected to the mainMixer and are assigned to the AudioKit.output.

Since this doesn't work for the latest AKSequencer, I thought that the maybe plugging the AKSequencerTrack to the mainMixer and unplugging the sampler to the mainMixer could do? But didn't work!

mainMixer.connect(input: track)

Running out of alternatives! So, after looking for AKSequencerTrack found someone else reporting the same issue (Why is the new AKSequencer not producing any sound?), so tried:

        mainMixer.connect(input: sampler)
        mainMixer.connect(input: track)

Again, no sound! There's also a link to this related topic, which is similar to my previous attempt, which there's no output (How to play MIDI with AudioKit's new AKSequencer), but just to make sure changed to use the AKSampler and loaded a local sound:

sampler.loadSFZ(url: Bundle.main.url(forResource: "clock", withExtension: "wav")!)

Another failure...! There's no sound.

I'm running AudioKit 4.9.5

Just to keep my sanity, there's a method .play in AKSequencerTrack, what happens if I call it?

track.play()

No sound! Ok, what if I change the sampler back to AKSnareSynth?

let t: AKSynthSnare = AKSynthSnare()
sequencer.addTrack(for: t)

Did it play? Nope!

Do I have output at all in non AKSequencer? Yes:

        let t: AKSynthSnare = AKSynthSnare()
        self.mainMixer.connect(input: t)
        t.play(noteNumber: 60,
        velocity: MIDIVelocity(127),
        channel: MIDIChannel(1))

What about the .isPlaying is it Truthy?

        for track in self.sequencer.tracks {
             mainMixer.connect(input: track)
             track.play()
             print("> > > > track.isPlaying: \(track.isPlaying)")
         }

Yes, the isPlaying returns true:

> > > > track.isPlaying: true

But, nope, there's no sound!

I think the AKSequencer is a dark box for now and shouldn't be used unless someone posts an example in Github (which I searched for in source-codes but nothing at the time of writing). Or maybe I'm doing something wrong I don't know, just wasted a day of my life trying different things.


回答1:


@c_booth provided the answer in the following post ( AudioKit: Using the new AKSequencer with any variety of the callback instruments )

Seems that the loop, tempo are set in the track not the sequencer itself,

// 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/how-is-the-aksequencer-setup-in-audiokit-4-8

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!