1

mp3agic や jaudiotagger などのライブラリを使用する方が簡単だと思いますが、学習のために id3 タグを手動で編集したいと考えていました。

タグを適切に取得するようにコードを設定しましたが、一部の曲ではタイトルが 30 文字でカットされていることに気付きましたが、音楽プレーヤーで .mp3 ファイルを開くと、30 文字を超える完全なタイトルが表示されます。

これは、タグを表示するために現在使用しているコードです。

            File mp3File = new File(filePath);

            byte[] mp3Meta = new byte[128];

            try {
                //convert file into array of bytes
                fileReader = new FileInputStream(mp3File);
                fileReader.skip((int)mp3File.length() - 128);
                fileReader.read(mp3Meta);
                String id3 = new String(mp3Meta); 

                String tag = id3.substring(0, 3); 
               if (tag.equals("TAG")) {
                System.out.println("\nTitle: " + id3.substring(3, 32) + "\n" +
                    "Artist: " + id3.substring(33, 62) + "\n" +
                    "Album: " + id3.substring(63, 91) + "\n" +
                    "Year: " + id3.substring(93, 97) + "\n" +
                    "************************************************");
               } else {
                System.out.println("File has no ID3 tags..");
               }
            }catch(Exception e){
                e.printStackTrace();
            }

タグを編集する方法については考えがありますが、30 文字を超える場合、完全なタイトル (または任意のタグ) を取得するにはどうすればよいですか? id3v2 に 30 文字を超えるタグを追加する方法があることを読みましたが、id3v2 フレームにアクセスする方法がわかりません

mp3が使用しているバージョン(id3v1またはid3v2)を特定する必要があると思いますが、プログラムでそれを行う方法もわかりません。

4

2 に答える 2

0

これは古い質問であり、おそらく今では理解していると思いますが、同様の問題でこの質問に出くわした人のために、より詳細に答えると思いました.

ID3v1 (単に「ID3」と呼ばれることもあります) は、ファイルの末尾にある短い構造化データ ブロックです。ID3v2 タグは、すべてのリビジョンで、多くのオプションの「フィールド」で構成されています。これらのフィールドは、通常、任意の (妥当な) 長さと順序で指定でき、ファイルの先頭に配置されます。私が知る限り、それらが似たような名前になっている唯一の理由は、それらが同じ種類のファイルに追加されているからです。あるバージョンを解析/更新するために書かれたものは、他のバージョンで何をすべきかわかりません。

元の質問が示すように、ID3v1 は特に読みやすいです。完全な実装の最大の部分は、ジャンル ルックアップ テーブルです。ID3v2 (リビジョン2.32.4かに関係なく) は、その強力な機能にふさわしく、明らかにそうではありません。実際には、メタデータを理解するか、仕様を実装することを学習するための中間レベルの演習としてお勧めしますが、データを使用するだけのプログラムでは、ビルド済みライブラリの 1 つを参照するだけの方がはるかに優れています。残念ながら、Java の実装について、推奨できるほどの知識はありませんが、少し調べてみると、Java の実装に関する多くの議論を見つけることができます。

于 2017-05-13T09:26:42.730 に答える