- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解析 MP3 文件并检测可变比特率 (VBR) MP3 文件中的所有帧。我浏览了整个互联网,但找不到合适的解决方案来检测新的帧头同步。从其他帖子来看,它说我应该寻找 FFE 或 FFF,但在我的程序中它不会正确检测到它。我不明白我应该如何寻找 FFF 或 FFE ?我得到的 FFE 为 0xF,下一个字节为 0xFE,但是如何得到 FFF 我从中获取 header 来构建所需的 11 位 1 ?我看过this它在所有其他主题和网站中链接为 MP3 引用及其源代码,但涵盖我的问题的部分是,我认为在 CMPA* 文件中未在源代码下载中给出。
do
{
uiFrame = getc(pFile);
if(EOF == uiFrame)
break;
cntSize++;
if(0xFF == uiFrame)
{
uiFrame = getc(pFile);
if(EOF == uiFrame)
break;
if((0xE == uiFrame) )//|| (0xE0 == uiFrame))
{
if(1 != uiFrameCount)
printf("\nFrame Size is %d \n\n",cntSize - PrevoiusFrameSize);
printf("\nFrame Found at Byte %d", cntSize);
PrevoiusFrameSize = cntSize;
CheckFlag = 1;
uiFrameCount++;
}
cntSize++;
}
}while(1 != CheckFlag);
当我执行上面的代码或我能想到的任何变体时,我会获得 1 到 6 帧,而如果我使用上面链接中的程序本身,它会在我的测试 mp3 文件上显示 8855 帧。任何有关此事的帮助将不胜感激,因为我已经没有想法和谷歌页面来寻找答案了。
感谢您的帮助。
编辑:在 Marc B 的快速回复后,我基本上理解了这个问题,但在编辑以反射(reflect)他的答案后,我现在只检测到 4 帧,从一帧增加到 4 帧。这是进行帧检测的代码部分,我做错了什么吗?
do
{
uiFrame = getc(pFile);
if(EOF == uiFrame)
break;
cntSize++;
if(0xFF == uiFrame)
{
uiFrame = getc(pFile);
if(EOF == uiFrame)
break;
uiShift=uiFrame>>4;
if((0xE == uiShift) || (0xF == uiShift))
{
if(1 != uiFrameCount)
printf("\nFrame Size is %d \n\n",cntSize - PrevoiusFrameSize);
printf("\nFrame Found at Byte %d", cntSize);
PrevoiusFrameSize = cntSize;
CheckFlag = 1;
uiFrameCount++;
}
cntSize++;
}
}while(1 != CheckFlag);
最佳答案
header 有 3 个半字节(也称为 1.5 个字节),因此您需要进行一些位移。伪代码:
$data = 'FFEABCDEF....'
^^^--3 nibble header
$nibble1 = $data[0];
$nibble2 = $data[1] >> 4; // isolate 3rd nibble
if ($nibble1 == 'FF') && (($nibble2 == 'F') || ($nibble2 == 'E')) { ... }
关于c++ - MP3 帧头检测 FFF/FFE 同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255173/
我正在尝试解析 MP3 文件并检测可变比特率 (VBR) MP3 文件中的所有帧。我浏览了整个互联网,但找不到合适的解决方案来检测新的帧头同步。从其他帖子来看,它说我应该寻找 FFE 或 FFF,但在
我是一名优秀的程序员,十分优秀!