【问题标题】:Listening AVAudioPCMBuffer监听 AVAudioPCMBuffer
【发布时间】:2017-05-06 12:25:05
【问题描述】:

我已经实现了installTap 方法,它为我提供了音频缓冲区浮点样本。我已经通过我的 C++ DSP 库过滤了它们。我想将此缓冲区“发送”到耳机/扬声器。我从样本中再次做了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

谢谢

【问题讨论】:

    标签: ios swift avfoundation signal-processing avaudiopcmbuffer


    【解决方案1】:

    您可以使用AVAudioPlayerNode 播放您的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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多