首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听AVAudioPCMBuffer

侦听AVAudioPCMBuffer
EN

Stack Overflow用户
提问于 2017-05-06 20:25:06
回答 1查看 620关注 0票数 2

我已经实现了installTap方法,它为我提供了音频缓冲区浮动示例。我已经通过我的C++ DSP库对它们进行了过滤。我想把这个缓冲区“发送”到耳机/扬声器。我从样本中又做了一次AVAudioPCMBuffer。有人知道怎么做吗?

代码:

代码语言:javascript
复制
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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-05-07 09:46:12

您可以使用AVAudioPlayerNode播放您的AVAudioPCMBuffer

代码语言:javascript
复制
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()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43820432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档