如何在 Scala 中使用 mp3agic 设置和保存 mp3 文件的元数据
How to set and save metadata of mp3 file using mp3agic in Scala
我正在尝试编写自己的 mp3 播放器。我可以使用 mp3agic 从 mp3 文件中读取元数据,所以现在我想修改它。 Mp3agic 显示(在标题 设置 ID3v2 字段值 at mp3agic on GitHub 下)您可以通过修改标签,然后在 mp3 文件上调用保存来实现。
调用保存时出现错误。和另一个错误一样 post
Exception in thread "main" com.mpatric.mp3agic.NotSupportedException: Packing Obselete frames is not supported
at com.mpatric.mp3agic.ID3v2ObseleteFrame.packFrame(ID3v2ObseleteFrame.java:32)
at com.mpatric.mp3agic.ID3v2Frame.toBytes(ID3v2Frame.java:83)
at com.mpatric.mp3agic.AbstractID3v2Tag.packSpecifiedFrames(AbstractID3v2Tag.java:275)
at com.mpatric.mp3agic.AbstractID3v2Tag.packFrames(AbstractID3v2Tag.java:261)
at com.mpatric.mp3agic.AbstractID3v2Tag.packTag(AbstractID3v2Tag.java:227)
at com.mpatric.mp3agic.AbstractID3v2Tag.toBytes(AbstractID3v2Tag.java:218)
at com.mpatric.mp3agic.Mp3File.save(Mp3File.java:450)
at Example$.$anonfun$new(Example.scala:16)
代码
import java.nio.file.Paths
import com.mpatric.mp3agic.Mp3File
object Example extends App {
Paths.get("content").resolve("raw").toFile.listFiles.toList
.find(f => f.isFile && f.getName.endsWith(".mp3"))
.foreach { file =>
val mp3 = new Mp3File(file)
println(mp3.hasId3v1Tag)
println(mp3.hasId3v2Tag)
println(mp3.hasCustomTag)
val tag = mp3.getId3v2Tag
println(tag.getYear)
tag.setComment("Cool song.")
mp3.save(file.getParentFile.toPath.resolve("x.mp3").toFile.getAbsolutePath)
}
}
输出
false
true
false
1973
sbt
scalaVersion := "2.13.1"
libraryDependencies += "com.mpatric" % "mp3agic" % "0.9.1"
我能够在 mp3 文件上设置新的元数据,但我必须创建一个新标签并将所有数据从旧标签复制到它,然后使用新标签保存文件。
我正在尝试编写自己的 mp3 播放器。我可以使用 mp3agic 从 mp3 文件中读取元数据,所以现在我想修改它。 Mp3agic 显示(在标题 设置 ID3v2 字段值 at mp3agic on GitHub 下)您可以通过修改标签,然后在 mp3 文件上调用保存来实现。
调用保存时出现错误。和另一个错误一样 post
Exception in thread "main" com.mpatric.mp3agic.NotSupportedException: Packing Obselete frames is not supported
at com.mpatric.mp3agic.ID3v2ObseleteFrame.packFrame(ID3v2ObseleteFrame.java:32)
at com.mpatric.mp3agic.ID3v2Frame.toBytes(ID3v2Frame.java:83)
at com.mpatric.mp3agic.AbstractID3v2Tag.packSpecifiedFrames(AbstractID3v2Tag.java:275)
at com.mpatric.mp3agic.AbstractID3v2Tag.packFrames(AbstractID3v2Tag.java:261)
at com.mpatric.mp3agic.AbstractID3v2Tag.packTag(AbstractID3v2Tag.java:227)
at com.mpatric.mp3agic.AbstractID3v2Tag.toBytes(AbstractID3v2Tag.java:218)
at com.mpatric.mp3agic.Mp3File.save(Mp3File.java:450)
at Example$.$anonfun$new(Example.scala:16)
代码
import java.nio.file.Paths
import com.mpatric.mp3agic.Mp3File
object Example extends App {
Paths.get("content").resolve("raw").toFile.listFiles.toList
.find(f => f.isFile && f.getName.endsWith(".mp3"))
.foreach { file =>
val mp3 = new Mp3File(file)
println(mp3.hasId3v1Tag)
println(mp3.hasId3v2Tag)
println(mp3.hasCustomTag)
val tag = mp3.getId3v2Tag
println(tag.getYear)
tag.setComment("Cool song.")
mp3.save(file.getParentFile.toPath.resolve("x.mp3").toFile.getAbsolutePath)
}
}
输出
false
true
false
1973
sbt
scalaVersion := "2.13.1"
libraryDependencies += "com.mpatric" % "mp3agic" % "0.9.1"
我能够在 mp3 文件上设置新的元数据,但我必须创建一个新标签并将所有数据从旧标签复制到它,然后使用新标签保存文件。