簡體   English   中英

如何從 AudioBufferList 轉換為 AVAudioPCMBuffer?

[英]How to convert to AVAudioPCMBuffer from AudioBufferList?

我正在努力轉換它。

我使用AudioUnit參考This制作了AudioBufferList數據。

並且它通過AudioUnitRender()填充了音頻緩沖區數據。

       var bufferList = AudioBufferList(
           mNumberBuffers: 1,
           mBuffers: AudioBuffer(
               mNumberChannels: UInt32(2),
               mDataByteSize: 16,
               mData: nil))
   
       
       if let au = audioObject.audioUnit {
           err = AudioUnitRender(au,
                                 ioActionFlags,
                                 inTimeStamp,
                                 inBusNumber,
                                 frameCount,
                                 &bufferList)
       }

然后,我嘗試將其轉換為AudioBufferList 但是,它不起作用

以下是我所做的。

        let audioFormat = AVAudioFormat(
            commonFormat: AVAudioCommonFormat.pcmFormatFloat64,
            sampleRate: recoder.sampleRate,
            interleaved: false,
            channelLayout: AVAudioChannelLayout(
                layoutTag: kAudioChannelLayoutTag_Stereo
            )!
        )

        guard let pcmBuffer = AVAudioPCMBuffer(
                    pcmFormat: audioFormat,
                    bufferListNoCopy: &bufferList
                ) else {
                    return
                }

我收到的控制台消息。

AVAudioBuffer.mm:248   the number of buffers (1) does not match the format's number of channel streams (2)

請幫助我的人

謝謝你。

您創建的AudioBufferList具有mNumberBuffers = 1 ,而包含的單個AudioBuffer具有mNumberChannels = 2 ,因此整個緩沖區列表包含兩個交錯的通道。 您正在創建的AVAudioFormat是非交錯立體聲,這就是您看到格式不匹配錯誤的原因。 您可以嘗試創建一個非交錯的AVAudioFormat或使用AVAudioConverter來解交錯數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM