2011-11-24 115 views
0

我試圖用AudioQueue錄製一個小端的PCM文件。根據文檔,我應該清除AudioStreamBasicDescripton.mFormatFlags中的kAudioFormatFlagIsBigEndian位。在iOS上錄製使用AudioQueue的little endian PCM

的文檔說:

kAudioFormatFlagIsBigEndian。設置爲大端,清除小端 端。

我的設置是這樣

- (void)setupAudioFormat:(AudioStreamBasicDescription*)format 
{ 
    //format->mSampleRate = 8000.0; 
    format->mSampleRate = 44000.0; 
    format->mFormatID = kAudioFormatLinearPCM; 
    format->mFramesPerPacket = 1; 
    format->mChannelsPerFrame = 2; 
    format->mBytesPerFrame = format->mBytesPerPacket = format->mChannelsPerFrame * sizeof(SInt16); 
    format->mBitsPerChannel = 16; 
    format->mReserved = 0; 
    format->mFormatFlags = ~kAudioFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked | kAudioFormatFlagIsAlignedHigh; 

} 

我越來越被

kAudioFileUnsupportedDataFormatError

誰能幫我找出什麼是錯的錯誤?甚至可以在iOS設備上記錄小尾數?一個替代小端的錄製方法是晚些時候轉換文件,這樣任何提示都會很有幫助。

回答

1

您是不是要請求44100.0的採樣率?

來清除標誌的方法是不是要設置的每一位,除了一個爲你做了(你可能設置幾十個非法位的在你的例子),但:

mFormatFlags &= ~(bitToClear); 
+0

的方式,我終於解決了它在我的情況是清除整個格式結構。你猜我應該總是這樣做嗎? :) memset(format,0,sizeof(format)); –

+0

相當memset(格式,0,sizeof(*格式)) – 2012-04-15 15:25:50