已编辑的ID3标记未在Windows资源管理器中显示

时间:2014-03-19 15:35:06

标签: java api mp3 id3

我正在开发一个查看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);
         }
     }         
}

就像我不知道那里有程序做同样的事情,但我希望将其添加为我的程序的功能。它不是关于功能,而是关于学习如何制作程序来实现这一目标。

1 个答案:

答案 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));
}