2

I've implemented installTap method, which provides me audio buffer float samples. I've filtered them by my C++ DSP library. I want to "send" this buffer to headphones/speaker. I've did AVAudioPCMBuffer again from samples. Anyone know how to do that?

Code:

node.installTap(onBus: bus, bufferSize: AVAudioFrameCount(BUFFER_SIZE), format: node.inputFormat(forBus: bus), block: { (buffer : AVAudioPCMBuffer ,time : AVAudioTime) in

    let root = buffer.floatChannelData!.pointee


    // First pointer defines chanels
    // Second pointer defines floats values

    for i in 0 ..< BUFFER_SIZE{
        self.signalData[i] = Double(root.advanced(by: i).pointee) * self.gainCorrection
    }
    let signalDataPreEq = self.signalData

    let filteredSignal = shared.EQ.filterBuffer(UnsafeMutablePointer<Double>(mutating: self.signalData), with_count: Int32(BUFFER_SIZE))

    self.signalData = Array(UnsafeBufferPointer(start : filteredSignal, count : BUFFER_SIZE))

    for i in 0 ..< BUFFER_SIZE{
        root.advanced(by: i).pointee = Float(self.signalData[i])
    }
     // HERE I WANT TO LISTEN(PLAYBACK) AUDIO FROM BUFFER

Thanks

Szymon Mrozek
  • 117
  • 1
  • 6

1 Answers1

5

You can use an AVAudioPlayerNode to play your AVAudioPCMBuffers:

let player = AVAudioPlayerNode()
engine.attach(player)

let bus = 0
let inputFormat = node.inputFormat(forBus: bus)
engine.connect(player, to: engine.mainMixerNode, format: inputFormat)

node.installTap(...) {
    // other stuff
    player.scheduleBuffer(filteredSignal)  // filteredSignal is your AVAudioPCMBuffer?
}

// engine.start()

player.play()
Rhythmic Fistman
  • 34,352
  • 5
  • 87
  • 159