Szy*_*zek 2 signal-processing avfoundation ios swift avaudiopcmbuffer
我已经实现了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
Run Code Online (Sandbox Code Playgroud)
谢谢
您可以使用AVAudioPlayerNode来播放您AVAudioPCMBuffer的:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |