Search code examples
iosswiftaudiokit

No sound with AKSequencer and AKSampler chaining


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?


Solution

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