2014-03-14 54 views
1

我想從一個音頻文件中讀取AudioStreamBasicDescription如下ExtAudioFileGetProperty返回AudioStreamDescription零幀大小

AudioStreamBasicDescription asdb; 
UInt32 propSize = sizeof(asdb); 

OSStat stat = ExtAudioFileGetProperty(_audioFile, 
             kExtAudioFileProperty_FileDataFormat, 
             &propSize, 
             &asdb); 

這工作正常,除了所有字段,但mBytesPerFramemBitsPerChannelmBytesPerPacket是否設置正確。

爲什麼不設置這些字段?

這就是AudioStreamBasicDescription的領域是什麼樣子

TotalFrames: 2628360 
BitsPerChannel: 0 
BytesPerFrame: 0 
BytesPerPacket: 0 
ChannelsPerFrame: 2 
FormatFlags: 0 
FormatID: aac 
FramesPerPacket: 1024 
SampleRate: 44100 

回答

2

看看上面CoreAudioTypes.h AudioStreamBasicDescription評論。它解釋瞭如何根據格式,有些字段可能不填寫。由於AAC是壓縮格式,並非所有字段都可以計算,因此返回爲0.

+0

感謝您的提示。我猜是因爲AAC。我認爲'ExtAudioFileRead'會動態解碼到PCM。 –

+0

它會即時解碼,但它需要在解碼過程中才能抓取下一個樣本等。坐在磁盤上,不用解析文件到更大程度,該信息不可用。希望這可以幫助。 – nsdebug

+2

切換到從'AVAssetReaderTrackOutput'讀取'CMSampleBufferRef's。工作正常。 –