Kotlin Mp3文件標簽信息讀取和寫入

原文:Mp3文件標簽信息讀取和寫入(Kotlin) - Stars-One的雜貨小窩
【Kotlin Mp3文件標簽信息讀取和寫入】最近準備抽空完善了自己的星之小說下載器(JavaFx應用 ),發現下載下來的mp3文件沒有對應的標簽
也是了解可以通過mpatric這個庫來實現標簽的讀取和寫入,下面介紹一下關于mp3標簽和貼上對應的代碼示例
標簽介紹在研究過程,發現mp3音樂標簽主要有以下幾種格式:

  • ID3v1
  • ID3v2(目前常用)
  • APEv2
ID3v1位于文件尾部,不支持封面,不支持一些特殊字符,長度短,但兼容老設備 。
ID3v2ID3v1的后繼替代者,位于文件頭部 , 支持封面和特殊字符,長度任意 。推薦使用 。
APEv2位于文件尾部(同時與ID3v1存在時,在ID3v1之前),同樣支持封面和特殊字符 , 但不推薦用于mp3 。
常用的主要是ID3v2.而ID3v2格式又可具體分為3種:
  • ID3v2.4 UTF-8
  • ID3v2.3 UTF-16
  • ID3v2.3 ISO-8859-1
推薦用ID3v2.4 UTF-8 , 如果設備不支持可退一步用ID3v2.3 UTF-16 , 如果設備仍不支持可再退一步用ID3v2.3 ISO-8859-1 。
如果數碼設備不支持,那么再試APEv2或ID3v1 。根據設備支持情況進行調整就可以 。
使用引入依賴:
<dependency><groupId>com.mpatric</groupId><artifactId>mp3agic</artifactId><version>0.9.1</version></dependency>@Testfun testRead() {val mp3Path = "D:\\temp\\music-download-test\\封印されし神々(東方風神録) - Whirling Truth.mp3"val mp3File = Mp3File(mp3Path)if (mp3File.hasId3v2Tag()) {val id3v2Tag = mp3File.id3v2Tagprintln("唱片歌曲數量: " + id3v2Tag.track)println("藝術家: " + id3v2Tag.artist)println("歌曲名: " + id3v2Tag.title)println("唱片名: " + id3v2Tag.album)println("歌曲長度:" + mp3File.lengthInSeconds + "秒")println("碼率: " + mp3File.bitrate + " kbps " + if (mp3File.isVbr) "(VBR)" else "(CBR)")println("專輯插畫類型" + id3v2Tag.albumImageMimeType)println("發行時間: " + id3v2Tag.year)println("流派: " + id3v2Tag.genre + " (" + id3v2Tag.genreDescription + ")")println("注釋: " + id3v2Tag.comment)println("歌詞: " + id3v2Tag.lyrics)println("作曲家: " + id3v2Tag.composer)println("發行公司: " + id3v2Tag.publisher)println("Original artist: " + id3v2Tag.originalArtist)println("Album artist: " + id3v2Tag.albumArtist)println("版權: " + id3v2Tag.copyright)println("URL: " + id3v2Tag.url)println("編碼格式: " + id3v2Tag.encoder)//專輯插畫val albumImageData = https://www.huyubaike.com/biancheng/id3v2Tag.albumImageif (albumImageData != null) {println("專輯插圖長度: " + albumImageData.size + " bytes")println("專輯插圖類型: " + id3v2Tag.albumImageMimeType)}val imgFile = File("D:\\temp\\output.jpg")imgFile.writeBytes(albumImageData)}}@Testfun testWrite() {//todo m4a轉MP3//val mp3Path = "D:\\temp\\music-download-test\\Romantic Night.mp3"val mp3Path = "D:\\temp\\music-download-test\\test.mp3"val imgFile = File("D:\\temp\\music-download-test\\109951167834013257.jpg")val mp3File = Mp3File(mp3Path)val tag = mp3File.id3v2Tag//歌曲名tag.title = mp3File.filename//歌手tag.artist = "張三"http://唱片名(專輯)tag.album = "張三的專輯"tag.setAlbumImage(imgFile.readBytes(), MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(imgFile))mp3File.save("D:\\temp\\music-download-test\\output.mp3")}之后測試,在window系統右鍵屬性就可以看到顯示了對應的屬性
API大全Mp3File對象方法方法名說明getFrameCount()獲取MP3文件幀數getStartOffset()獲取起始設置getEndOffset()獲取結束設置getLengthInMilliseconds()獲取MP3長度,單位毫秒getLengthInSeconds()獲取MP3長度,單位秒isVbr()是否為VBR編碼,不是為 CBR編碼getBitrate()獲取碼率getBitrates()獲取碼率 , 返回map,key為碼率,value為 MutableInteger 對象getChannelMode()獲取渠道模式isCopyright()是否有版權getEmphasis()獲取強調信息getLayer()獲取壓縮級別getModeExtension()獲取模式擴展isOriginal()是否是原版getSampleRate()獲取音頻采樣率getVersion()獲取版本hasXingFrame()判斷是否有 xing幀getXingOffset()獲取xing設置getXingBitrate()獲取xing比特率hasId3v1Tag()判斷是否有3v1本版標簽getId3v1Tag()獲取3v1本版標簽setId3v1Tag(ID3v1 var1)設置3v1本版標簽removeId3v1Tag()移除3v1本版標簽hasId3v2Tag()判斷是否有3v2本版標簽getId3v2Tag()獲取3v2本版標簽setId3v2Tag(ID3v2 var1)設置3v2本版標簽removeId3v2Tag()移除3v2本版標簽hasCustomTag()判斷是否有自定義標簽getCustomTag()獲取自定義標簽setCustomTag(byte[] var1)設置自定義標簽removeCustomTag()移除自定義標簽save(String var1)保存mp3文件ID3v1對象方法方法名說明getVersion()獲取版本getTrack()獲取唱片歌曲數量setTrack(String var1)設置唱片歌曲數量getArtist()獲取藝術家setArtist(String var1)設置藝術家getTitle()獲取歌曲名setTitle(String var1)設置歌曲名getAlbum()獲取唱片名setAlbum(String var1)設置唱片名getYear()獲取發行時間setYear(String var1)設置發行時間getGenre()獲取流派setGenre(int var1)設置流派getGenreDescription(); 獲取流派描述getComment(); 獲取注釋setComment(String var1)設置注釋toBytes()轉換為字節數組ID3v2對象方法(ID3v2為ID3v1的子類)方法名說明getPadding()判斷是否填充setPadding(boolean var1)設置是否填充hasFooter()判斷是否有頁腳setFooter(boolean var1)設置頁腳hasUnsynchronisation()判斷是否有不同步setUnsynchronisation(boolean var1)設置是否有不同步getBPM()獲取每分鐘節拍數setBPM(int var1)設置每分鐘節拍數getGrouping()獲取分組setGrouping(String var1)設置分組getKey()獲取調號,它關系到我們整首歌曲的音高范圍setKey(String var1)設置調號getDate()獲取日期setDate(String var1)設置日期getComposer()獲取作曲家setComposer(String var1)設置作曲家getPublisher()獲取發版者setPublisher(String var1)設置發版者getOriginalArtist()獲取原創藝術家setOriginalArtist(String var1)設置原創藝術家getAlbumArtist()獲取專輯藝術家setAlbumArtist(String var1)設置專輯藝術家getCopyright()獲取版權信息setCopyright(String var1)設置版權信息getArtistUrl()獲取藝術家url地址setArtistUrl(String var1)設置藝術家url地址getCommercialUrl()獲取廣告url地址setCommercialUrl(String var1)設置廣告url地址getCopyrightUrl()獲取版權url地址setCopyrightUrl(String var1)設置版權url地址getAudiofileUrl()獲取音頻文件路徑setAudiofileUrl(String var1)設置音頻文件路徑getAudioSourceUrl()獲取音頻資源路徑setAudioSourceUrl(String var1)設置音頻資源路徑getRadiostationUrl()獲取廣播url地址setRadiostationUrl(String var1)設置廣播url地址getPaymentUrl()獲取付款url地址setPaymentUrl(String var1)設置付款url地址getPublisherUrl()獲取發版url地址setPublisherUrl(String var1)設置發版url地址getUrl()獲取MP3地址setUrl(String var1)設置MP3地址getPartOfSet()獲取部分配置信息setPartOfSet(String var1)設置部分配置信息isCompilation()獲取是否匯編setCompilation(boolean var1)設置是否匯編getChapters()獲取章節setChapters(ArrayList var1)設置章節getChapterTOC()獲取章節目錄setChapterTOC(ArrayList var1)設置章節目錄getEncoder()獲取編碼格式setEncoder(String var1)設置編碼格式getAlbumImage()專輯插畫setAlbumImage(byte[] var1, String var2)設置專輯插畫setAlbumImage(byte[] var1, String var2, byte var3, String var4)設置專輯插畫clearAlbumImage()清除專輯插畫getAlbumImageMimeType()專輯插畫類型getWmpRating()獲取評分setWmpRating(int var1)設置評分getItunesComment()獲取調音方式setItunesComment(String var1)設置調音方式getLyrics()獲取歌詞setLyrics(String var1)設置歌詞setGenreDescription(String var1)設置類型說明getDataLength()獲取數據長度getLength()獲取長度getObseleteFormat()獲取過時的格式getFrameSets()獲取幀組clearFrameSet(String var1)清除幀組參考

推薦閱讀