1

나는 오디오 버퍼 플로트 샘플을 제공하는 installTap 메서드를 구현했습니다. 내 C + + DSP 라이브러리에 의해 그들을 필터링했습니다. 이 버퍼를 헤드폰/스피커로 "전송"하고 싶습니다. 나는 샘플에서 AVAudioPCMBuffer을 다시했습니다. 누구든지 그 일을 어떻게 알아?듣기 AVAudioPCMBuffer

코드 :

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 

감사

답변

1

당신은 당신의 AVAudioPCMBuffer의를 재생하는 AVAudioPlayerNode를 사용할 수 있습니다

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

감사 남자! 좋아! –

+0

답변을 수락 할 수있을 때 감사 할 필요가 없습니다. –