I'm using AudioKit 4.9.5. I'm trying to play scales using AKSequencer.
Here's how i'm using AudioKit. The init:
AKAudioFile.cleanTempDirectory()
AKSettings.bufferLength = .medium
AKSettings.playbackWhileMuted = true
AKSettings.audioInputEnabled = true
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 0)
try? AKSettings.setSession(category: .playAndRecord,
with: [.defaultToSpeaker, .mixWithOthers])
mixer = AKMixer(silence, conductor.sampler)
AudioKit.output = mixer
Next to this, I'm initializing the conductor:
init() {
let info = ProcessInfo.processInfo
let begin = info.systemUptime
let soundsFolder = Bundle.main.bundleURL.path
AKSettings.bufferLength = .medium
AKSettings.enableLogging = true
// Signal Chain
sampler = AKSampler()
sampler.loadSFZ(path: soundsFolder, fileName: "Sax.sfz")
sampler.attackDuration = 0.01
sampler.decayDuration = 0.1
sampler.sustainLevel = 0.8
sampler.releaseDuration = 0.5
sequencer = Sequencer(name: "Scale", targetNode: sampler)
let elapsedTime = info.systemUptime - begin
print("Time to setup sampler \(elapsedTime) seconds")
}
Finally, my custom sequencer:
self.name = name
self.targetNode = targetNode
self.track = AKSequencerTrack(targetNode: targetNode) //target node is my sampler
self.sequencer = AKSequencer(targetNode: targetNode) //target node is my sampler
And this is how I'm creating the tracks:
let newTrack = AKSequencerTrack(targetNode: targetNode)
for step in track.steps {
for note in step.notes {
newTrack.add(noteNumber: MIDINoteNumber(note.rawValue), position: step.position, duration: step.duration)
}
}
self.track = sequencer.addTrack(for: newTrack)
sequencer.tempo = tempo.bpm
sequencer.length = newTrack.length
sequencer.loopEnabled = loopEnabled
I don't know why there's not sound. Maybe I'm missing something on the node chaining?
Here's a sample pseudo who work:
let sequencerMixer = AKMixer()
let sampler = AKSampler()
...
sequencer = AKSequencer(targetNode: sampler)
...
let newTrack = sequencer.addTrack(for: sampler)
newTrack >>> sequencerMixer
...
AudioKit.output = AKMixer(sequencerMixer, sampler)