讀取、複寫MP3 Tag

MP3

別人寫成的套件:(https://github.com/mpatric/mp3agic/blob/master/src/main/java/com/mpatric/mp3agic/Mp3File.java)

範例做法: C#(https://dotblogs.com.tw/yc421206/archive/2009/08/14/10048.aspx)

參考資料:(https://stackoverflow.com/questions/1645803/how-to-read-mp3-file-tags)

Field

Length

Offsets

Tag

3

0-2

Songname

30

3-32

Artist

30

33-62

Album

30

63-92

Year

4

93-96

Comment

30

97-126

Genre

1

127

MP3檔案會預留最後128個Byte用來當記錄、詳細資料,位置如上表格。

裡面的編碼是BIG5,當在讀取的時候要選對編碼,當然 最後輸出檔案的時候,也要選對編碼。

在做複寫動作的時候,要記得把原先的資料清空。

讀取檔案,並跳過前面,只要最後128Byte

byte[] tagBody = new byte[128];
        FileInputStream fs = new FileInputStream(file);
        fs.skip(fs.available() - 128);
        fs.read(tagBody);
        fs.close();

Byte轉字串

因為整條byte拿去轉BIG5,會有字元遺失,所以要先分段切割。Arrays.copyOfRange(Byte[],startIndex,endIndex)

因為Windows系統是用BIG5,所以轉換回來。

SongName_ = new String(Arrays.copyOfRange(TAGBody, SONG_NAME_START, SONG_NAME_END),"BIG5").trim();

字串轉Byte[]

參考資料:(https://stackoverflow.com/questions/18571223/how-to-convert-java-string-into-byte)

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only

複寫檔案

參考資料:(https://www.journaldev.com/861/java-copy-file)

因為要修改整個檔案的最後128 byte,我參考複製檔案的方式,將前面複製完後,後面128 Byte另外處理。

成果

https://github.com/smilebrian0515/BrianToolsByJava

Last updated