如何填充AudioStreamBasicDescription为AMR播放

问题描述:

源数据是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

的iOS下降AMR支持,所以新的解决方案是使用OpenCoreAMR您使用的解码和播放哪些API将数据转换成PCM