2016-04-25 6 views
1

mp3agicやjaudiotaggerのようなライブラリを使うほうが簡単だとわかりましたが、学習目的でid3タグを手動で編集したかったのです。30文字を超える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)私はそれをプログラム的に行う方法もわかりません。

+1

ID3は、30文字のタイトルに限定されています。より多くの文字を読み書きするには、ID3v2を使用する必要があります。 – dnault

+0

dnault-私はそうすることができますか?私はhttp://id3.org/ID3v2Easyにあるページを読んだことがありますが、どれだけのオフセットを行う必要があるか、各タグの特定のバイト位置がわかりません。 – Brian

+0

ID3バージョンの識別方法:「これらのフィールドのサイズを合計すると、30 + 30 + 30 + 4 + 30 + 1は128バイトではなく、128バイトではありません。 ID3v1/1.1タグを見つけるのに最も簡単な方法は、単語の "単語"を探すことです。このタグは、 TAG "ファイルの終わりから128バイト。出典:http://id3.org/ID3v1 – PeterCo

答えて

0

これは古い質問で、おそらくあなたが今考え出したことは分かっていますが、私は、この質問に似たような問題を抱えている人にとって、より詳細に答えたいと思いました。

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

元の質問が示すように、ID3v1は特に読みやすいです。完全実装の最大の部分はジャンルルックアップテーブルです。 ID3v2(改訂版2.3または2.4)は、より大きなパワーに対応して、確かにではなく、です。私は実際にメタデータを理解することや仕様を実装することを学ぶ中級レベルの演習としてお勧めしますが、ちょうどを使用したいプログラムの場合は、を使用してください。あらかじめ作成されたライブラリ。残念ながら、私はJavaの実装について十分に知っているわけではありませんが、少し見てみると十分な議論があります。

関連する問題