2010-05-19 21 views
0

源數據是AMR-NB 5.9kbit/S(AMR_5.90)如何填充AudioStreamBasicDescription爲AMR播放

我試過下面的設置(與36種),但我得到不外乎垃圾音頻。有誰知道AMR的正確設置?

AudioStreamBasicDescription asbd; 
asbd.mSampleRate = 8000.0; 
asbd.mFormatID = kAudioFormatAMR; 
asbd.mFormatFlags = 0; 
asbd.mBytesPerPacket = 15; // (118>>3) 
asbd.mFramesPerPacket = 1; 
asbd.mBytesPerFrame = 15; 
asbd.mChannelsPerFrame = 1; 
asbd.mBitsPerChannel = 118; //tried also 0 and 13 
asbd.mReserved = 0; 

基於來自維基百科信息爲AMR:

採樣頻率8kHz的/ 13位(160個樣本爲20ms的幀)

生成的95幀的長度,103,118,134 ,148,159,用於比特率204,或244比特4.75,5.15,5.90,6.70,7.40,7.95,10.2或12.2千比特/秒,分別

並從這裏所述數據結構描述:

http://developer.apple.com/iphone/library/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/Reference/reference.html#//apple_ref/doc/c_ref/AudioStreamBasicDescription

+0

?如果您使用的是音頻文件流,您是否無法使用AudioFileStreamGetProperty獲取填充的ASBD? – warrenm 2010-05-19 20:17:50

+0

我從記憶源使用試圖回放: AudioQueueNewOutput AudioQueueAllocateBuffer AudioQueueEnqueueBuffer AudioQueuePrime AudioQueueStart – Peter 2010-05-20 06:10:16

+0

我設法將數據寫回一個文件,並重新獲得財產提到閱讀,mFramesPerPacket回來爲2400這看起來似乎不太可能,但將該值(以及其他值的許多變體)反饋到ASBD結構中並沒有幫助。 – Peter 2010-05-22 12:29:43

回答

1

的iOS下降AMR支持,所以新的解決方案是使用OpenCoreAMR您使用的解碼和播放哪些API將數據轉換成PCM