我正在开发一个查看mp3文件并检查它是否有ID3数据的程序。如果缺少某些数据,它将查询EchoNest(音乐数据库)以获取更多数据。
我的问题是,当我更新ID3标签时,Windows资源管理器似乎无法识别它(即当文件位于“详细信息”视图中时,艺术家,标题,专辑列为空白)。 当我第二次在文件上运行我的程序时,我的程序会找到元数据,就像它在一个首先包含所有数据的文件中找到的那样。
我正在使用此处找到的ID3标记库: http://javamusictag.sourceforge.net/
我有什么遗失的吗?
public void writeData(boolean pForce)
{
if (mIsUpdated || pForce)
{
try
{
File file = new File(mPath);
RandomAccessFile destFile = new RandomAccessFile(file, "rw");
ID3v1 tag = new ID3v1();
tag.setAlbum(mAlbum);
tag.setArtist(mArtist);
tag.setTitle(mTitle);
tag.write(destFile);
}
catch (FileNotFoundException ex)
{
System.out.println("No File Found At " + mPath);
}
catch (IOException ex)
{
System.out.println("Error when writting to file: " + mPath);
}
}
}
就像我不知道那里有程序做同样的事情,但我希望将其添加为我的程序的功能。它不是关于功能,而是关于学习如何制作程序来实现这一目标。
答案 0 :(得分:0)
您是否尝试过使用ID3v2标签,因为当我从Windows中的音乐文件中读取标签(带有该库)时,只有v2似乎有效。希望它有所帮助
编辑: 如果这不起作用,我使用question在另一个mp3agic上找到了这个:(图片内容与专辑图片有关)
Mp3File song = new Mp3File(filename);
if (song.hasId3v2Tag()){
ID3v2 id3v2tag = song.getId3v2Tag();
byte[] imageData = id3v2tag.getAlbumImage();
//converting the bytes to an image
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageData));
}