3
我想在截取iOS設備揚聲器的過程中「截取」音頻數據。我相信這可以使用remoteIO音頻單元和回調來完成。在下面的playbackCallback中,ioData實際上是否包含任何音頻數據?RemoteBudio音頻單元回放回調中的AudioBufferList內容
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) { ... }
我很困惑,因爲約ioData登錄信息似乎暗示它包含音頻數據...
// if (ioData->mNumberBuffers > 0)
AudioBuffer buffer = ioData->mBuffers[0];
NSLog(@"buffer.mNumberChannels: %ld", buffer.mNumberChannels); // prints 2
NSLog(@"buffer.mDataByteSize : %ld", buffer.mDataByteSize); // prints 4096
但是從ioData的內容創建CMSampleBufferRef並使用它寫入CoreAudioFile AVAssetWriter會生成一個靜默文件。輸出文件的長度似乎很好(幾秒鐘),但在Audacity中打開文件顯示了一條扁平線。
在閱讀大量SO帖子並試驗了很多remoteIO音頻單元示例代碼後,我開始懷疑ioData是否包含應該在playbackCallback中填充的預大小但空的緩衝區。