MP3 ファイルを解析し、可変ビット レート (VBR) MP3 ファイル内のすべてのフレームを検出しようとしています。インターネット全体を調べましたが、新しいフレーム ヘッダーの同期を検出するための適切なソリューションが見つかりませんでした。他の投稿から、FFEまたはFFFを探す必要があると書かれていますが、私のプログラムでは正しく検出されません。FFF または FFE を探す方法がわかりません。FFE を 0xF として取得し、次のバイトを 0xFE として取得しますが、必要な 11 ビットの 1 を構築するためにこれから FFF を取得するにはどうすればよいですか? MP3参照の場所として他のすべてのトピックとWebサイトにリンクされているこれとそのソースコードを調べましたが、私の質問をカバーする部分は、ソースに記載されていない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フレームと表示されます。答えを探すためのアイデアやGoogleのページが不足しているため、この問題に関する助けをいただければ幸いです。
ご協力ありがとうございました。
編集: Marc BI からの迅速な返信の後、問題はほとんど理解されましたが、彼の回答を反映するように編集した後、1 つから 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);