2012-08-12 101 views
3

我想在Android應用程序中將歌詞寫入mp3。我發現了一個用於讀取mp3文件並閱讀/操作ID3標籤(ID3v1和ID3v2.2到ID3v2.4)的Java庫, ,名爲mp3agic在MP3中設置歌詞ID3v2標籤

我修改mp3agic來編寫ID3v2標籤的歌詞標籤,寫入標籤:USLT。發現於Wikipedia

在示例Android應用程序中,我修改了MP3的藝術家,專輯,標題,流派,歌詞和評論。除歌詞外,所有標籤都被修改正確。 PowerAMP用於驗證修改後的MP3文件,PowerAMP無法在MP3中找到歌詞。

如果任何人都熟悉這裏這個庫是從AbstractID3v2Tag.java我修改後的代碼:

//define lyric tag for id3v2 
public static final String ID_TEXT_LYRICS = "USLT"; 

//get the lyrics from the tag 
public String getLyrics() { 
    ID3v2TextFrameData frameData; 
    if (obseleteFormat) return null; 
    else frameData = extractTextFrameData(ID_TEXT_LYRICS); 
    if (frameData != null && frameData.getText() != null) 
     return frameData.getText().toString(); 
    return null; 
} 

//set the lyrics in the tag 
public void setLyrics(String lyrics) { 
    if (lyrics != null && lyrics.length() > 0) { 
     invalidateDataLength(); 
     ID3v2TextFrameData frameData = new ID3v2TextFrameData(useFrameUnsynchronisation(), new EncodedText(lyrics)); 
     addFrame(createFrame(ID_TEXT_LYRICS, frameData.toBytes()), true); 
    } 
} 

我設置的MP3歌詞與Windows中的一個程序,並與我的應用程序和getLyrics()閱讀USLT標籤返回字符串engPowerAMP確實發現了這些由Windows程序設置的歌詞。

我已經搜索並找到許多指向MP3 ID3標籤修飾符庫的帖子,那就是我找到mp3agic的地方。哪一個是我可以輕易修改以結合歌詞變化的唯一庫。

我找到的一個庫是MyID3_for_Android,它沒有修改歌詞的方法。

我在尋找指導。

回答

6

望着官方ID3規範在http://id3.org/id3v2.4.0-frames

Header for 'Unsynchronised lyrics/text transcription', ID: "USLT": 
    Text encoding  $xx 
    Language    $xx xx xx 
    Content descriptor (text string according to encoding) $00 (00) 
    Lyrics/text   (full text string according to encoding) 

所以,USLT幀不是隻是一個文本框,這是你如何試圖解析它。相比之下,文本框看起來像這樣:

Header for 'Text information frame', ID: "T000" - "TZZZ" excluding "TXXX": 
    Text encoding    $xx 
    Information     (text string(s) according to encoding) 

注意在USLT幀的額外字段。你需要一個自定義的框架類(比如ID3v2LyricsFrameData)。

USLT框架與評論框(COMM)非常相似,因此您可以重新使用這些代碼。也許創建一個ID3v2CommentFrameData和ID3v2LyricsFrameData都擴展的超類。

+0

你的建議是現貨。 – JMooney 2013-01-24 02:54:29

+0

這實際上有用!謝謝邁克爾:D – 2015-10-17 09:21:02