日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

歌词LRC、歌曲文件ID3标签与JAudiotagger

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 歌词LRC、歌曲文件ID3标签与JAudiotagger 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首發于 https://donlex.cn

現在的移動互聯網時代,大部分人可能都不會刻意地留意關于歌曲的一些屬性,直接在手機上下載或者在線聽就行了。當然,這篇文章肯定會帶你了解歌曲更加深入一點的內容,拓展一下知識面。

本文從兩個方面進行探秘:

  • 歌詞格式
  • 歌曲文件
  • 歌詞

    首先,從歌詞方面入手,這部分的知識也是我在爬取各音樂網站的時候發現的。

    常見的歌詞格式有 LRC、TRC(天天動聽歌詞)、KRC(KuGou ResourCe,酷狗資源文件)和 QRC(QQ音樂歌詞)。

    目前就通過爬蟲測試發現大部分音樂網站都是使用LRC格式的歌詞

    LRC 格式

    LRC 歌詞格式是世界上最通用的歌詞格式,沒有之一。它是最基本的歌詞格式,幾乎沒有支持其他歌詞格式而不支持這個歌詞格式的播放器。LRC 歌詞格式的特性也是——簡單。

    [ti:奔跑在我孤傲的路上 (Live)] [ar:旅行團] [al:樂人·Live:旅行團樂隊“永遠都會在”巡演杭州站(Live)] [by:] [offset:0] [00:00.00]奔跑在我孤傲的路上 (Live) - 旅行團樂隊 (The LifeJourney) [00:05.81]詞:孔陽/子君 [00:11.62]曲:孔陽/子君 [00:17.43]太陽走在天上 [00:18.79] [00:19.41]我們走在路上 [00:20.77] [00:21.53]走在各自走的方向

    以上是一個示例LRC文件的開頭部分。

    可以看到,首先有一些記錄歌曲及歌詞信息的東東,我們將其稱作“ID 標簽”(ID Tags),它可以包含歌曲名(ti)、專集(al)、歌手(ar)、歌詞創建者(by)、歌詞延遲調整(offset)等信息。
    一眼就可看出,LRC 格式為每行歌詞指定起始時刻,格式為 [分鐘:秒.百分秒]。

    通過Postman請求QQ音樂可以發現,現在使用的也是這一種格式的歌詞

    其實之前在寫NexT主題添加音樂 這篇的博客的時候使用的就是網易云的歌詞接口,得到的歌詞信息也是LRC格式的,有興趣可以點開看看

    TRC 格式

    TRC 格式是由天天動聽制定的一種歌詞格式,可以看作是對 LRC 格式的擴展——為什么我這樣說呢?請看下面我從一 TRC 文件中從頭摘取的文本。

    [ar:胡彥斌] [ti:當你要離開的時候] [al:] [total:243000] [offset:0] [by:ttpod] [00:16.54]<250>當<300>你<1852>要<249>離<452>開<201>的<451>時<3801>候 [00:24.32]<200>我<200>們<1201>走<250>過<250>了<251>無<350>數<350>個<600>路<3851>口

    因此,我們可以下結論,TRC 格式在 LRC 格式基礎上,歌詞正文中每個字的前面增加了時間標記<毫秒數>,每字連續解析,支持了逐字精準?;蛘?#xff0c;上文中“字”可理解為詞,組合在一起當作一個“字”(以下稱作“詞看作字”),這在遇到英文時尤其有用。

    當然,天天動聽老黃歷了,被阿里收購之后,現在也就無從探尋了。不過現在好像蝦米音樂還是使用這種格式的歌詞哈

    歌曲文件

    在電腦上下載一首歌曲,查看文件信息,會發現一個我們平常不留意的普通文件竟然會包含這么多的信息。

    ID3標簽

    通過KMPlayer查看媒體信息可以看到以下信息,當然也包含了歌曲的封面圖片

    其實這些信息都是通過在MP3文件末尾額外的數據空間來保存。說到這里就不得不說一下音頻文件的ID3標簽了

    ID3,一般是位于一個mp3文件的開頭或末尾的若干字節內,附加了關于該mp3的歌手,標題,專輯名稱,年代,風格等信息,該信息就被稱為ID3信息,ID3信息分為兩個版本,v1和v2版。 其中:v1版的ID3在mp3文件的末尾128字節,以TAG三個字符開頭,后面跟上歌曲信息。 v2版一般位于mp3的開頭,可以存儲歌詞,該專輯的圖片等大容量的信息. ——百度百科

    讀寫ID3標簽

    既然知道了MP3文件中的信息是ID3標簽,那我們能否自己通過代碼讀寫ID3標簽呢?當然是可以的。
    主要通過使用 JAudiotagger 對MP3文件進行操作就可以完成。

    步驟

    一、Maven直接引入Jaudiotagger或者使用jar包

    <!-- https://mvnrepository.com/artifact/org/jaudiotagger --> <dependency><groupId>org</groupId><artifactId>jaudiotagger</artifactId><version>2.0.3</version> </dependency>

    二、使用代碼操作
    這里以Java實現了一個簡單的例子:

    import entity.CopyrightInfoSave; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.audio.mp3.MP3File; import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.datatype.Artwork; import org.jaudiotagger.tag.id3.AbstractID3v2Tag; import org.jaudiotagger.tag.id3.ID3v23Tag;import java.io.File; import java.io.FileInputStream;/** *@author donlex *@since 2019/08/18 13:35 */ public class demo {/***讀取MP3文件的ID3標簽信息*/public static void readId3Tag() throws TagException, ReadOnlyFileException, CannotReadException, InvalidAudioFrameException, IOException {String url = "F:/Easier/QQDownload/660027.mp3";File sourceFile = new File(url);MP3File file = (MP3File) AudioFileIO.read(sourceFile);Tag tag = file.getTag();MP3AudioHeader mp3AudioHeader = file.getMP3AudioHeader();//歌曲碼率String bitRate = mp3AudioHeader.getBitRate();//獲取MP3時長int trackLength = mp3AudioHeader.getTrackLength();int min = trackLength / 60;int second = trackLength % 60;String length = min + ":" + second;System.out.println(bitRate +" -- "+length);}/***設置ID3標簽進入MP3文件中*copyrightInfoSave是一個實體*/public static void structAudioTag(CopyrightInfoSave copyrightInfoSave,String filePath,String lyricPath,String coverPath) throws Exception{MP3File f = (MP3File) AudioFileIO.read(new File(filePath));ID3v23Tag tag;AbstractID3v2Tag tagV2=f.getID3v2Tag();if(tagV2 instanceof ID3v23Tag){tag=(ID3v23Tag)tagV2;}else{tag = new ID3v23Tag(tagV2);}tag.setField(FieldKey.ARTIST, copyrightInfoSave.getSingername());tag.setField(FieldKey.ALBUM, copyrightInfoSave.getAlbumsname());tag.setField(FieldKey.TITLE, copyrightInfoSave.getSongname());tag.setField(FieldKey.COMMENT, "");String lyric = readToString(lyricPath);tag.setField(FieldKey.LYRICS,lyric);// 設置歌曲封面圖片tag.deleteArtworkField();Artwork newArtwork=Artwork.createArtworkFromFile(new File(coverPath));tag.setField(newArtwork);tag.addField(newArtwork);f.setID3v2Tag(tag);f.save();}/***讀取歌詞文件,并返回string類型*/public static String readToString(String fileName) {String encoding = "UTF-8";File file = new File(fileName);Long filelength = file.length();byte[] filecontent = new byte[filelength.intValue()];try {FileInputStream in = new FileInputStream(file);in.read(filecontent);in.close();return new String(filecontent, encoding);} catch (Exception e) {e.printStackTrace();return null;}} }

    更多例子可以查看官方的Example

    參考資料:

    • [1] MP3歌曲亂碼和ID3標簽
    • [2] 初步分析 LRC、TRC、KRC、QRC、KSC 和 KAJ 歌詞格式

    總結

    以上是生活随笔為你收集整理的歌词LRC、歌曲文件ID3标签与JAudiotagger的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。