私は、mp3ファイルに関するすべてのデータを特定できるプログラムを作成しています。 このWebページ(http://www.multiweb.cz/twoinches/mp3inside.htm)の情報に基づいて、私のプログラムはmp3ファイル全体をバイト配列に読み込み、開始時にタグv2をチェックし、タグv1をチェックします。ファイルの終わり。mp3ファイルのヘッダを特定するJavaコード
私の問題は、ヘッダーから取得できるデータです。 私が理解する限り、私は1111_1111であり、次のものは111x_xxxxであるバイトを検索する必要があります。ヘッダーではなく、ランダムな偶然の一致であるため、私は上記のWebページ(ID、レイヤー、ビットレートなど)に記載されているすべてのフィールドを持つMP3Headerクラスを作成し、オーバーライドしましたID、レイヤー、および周波数が一致する場合はtrueを返すequalsメソッド(私はベースとして見つけた最初のヘッダーを使用し、後に1つおきのヘッダーを比較します)。
この方法はCBR mp3ファイルではうまくいくようですが、一部のVBRファイルでは苦労しています。私が見つけた最初のヘッダーは間違っています。その時点で、全体の比較が失敗しました(私は平等のためにビットレートをチェックしていないので、それは理由ではありません)。私が考えることができる唯一の有効な説明は、最初のタグに拡張ASCIIテーブルの文字が含まれていて、Javaに符号なしintがないため、変換時に1111_1111(255)バイトが-1と解釈される可能性がありますintに。 私の質問は、私が見つけたバイトが確かに正しいヘッダーであることを確認するにはどうすればいいですか?あるいは、基準に合致するすべてのものを保管して、どれが最も頻繁に使用されているかを確認し、それに付随する必要がありますか?
おかげで、 イシュト
P.S:私はJMFを使用した場合、これはおそらく、しかし、私はこのようにそれを書くの挑戦を楽しんで、わずか数行のコードで解決できる知っています。
私は自分の質問に答えます:私は十分な注意を払っていませんでした。ファイルの先頭にあるタグv2には、音楽データヘッダーと同じ識別子を持つヘッダーもあります私のアルゴリズムは混乱しています。解決策は、私が検索しているときにファイルの最初の数バイトを無視することです(またはタグを最初に解析してから、ヘッダ検索を開始します)。 –
投稿したリンクには便利なビットがいくつかあります。ありがとうございます。 –
+1 javamusictag.sourceforge.netがMP3タグを正しく解析するのに問題がありました。しかし、entagged.sourceforge.net(そのページからリンクされている)は私が期待した情報を生成します。ボーナスとして、Jarはわずかに小さく、VBR、ビットレート、チャンネル数、サンプリングレートなどのトラックの長さやその他のジューシーな情報も提供します。 :-) –