先定义每种帧的大小数组
const int sizes[] = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 6, 5, 5, 0, 0, 0, 0 };初始化解码器
void *m_pAmr = Decoder_Interface_init();
判断文件头,去掉文件头,读取第一个帧头,以第一个帧头为标准,后面用于判断坏帧
if (0 == memcmp(pBuf, "#!AMR\n", 6))
{
pos += 6;
audioHeader = pBuf[pos];
}
得到帧头就可以知道帧的长度
len = sizes[(<span style="font-family: Arial, Helvetica, sans-serif;">audioHeader</span><span style="font-family: Arial, Helvetica, sans-serif;"> >> 3) & 0x0f];</span>中间有可能会出现坏帧,要去掉
while ( (pos < fileLen) && (audioHeader != pBuf[pos]) )
{
++pos;
}退出时要关闭解码器
if (NULL != m_pAmr)
{
Decoder_Interface_exit(m_pAmr);
m_pAmr = NULL;
}
本文深入探讨了AMR音频文件的解析过程,包括初始化解码器、文件头判断、坏帧处理和解码器关闭等关键步骤。通过具体代码实现,详细解析了AMR音频文件的帧大小数组、初始化解码器、文件头识别、帧长度获取及坏帧处理机制。
1950

被折叠的 条评论
为什么被折叠?



