【问题标题】:How to get and set (change) ID3 tag (metadata) of audio files?如何获取和设置(更改)音频文件的 ID3 标签(元数据)?
【发布时间】:2012-03-31 05:50:25
【问题描述】:

我正在努力更改 ID3 标签,音频文件中的元数据,例如:

  • 艺术家
  • 标题
  • 专辑

还有核心点,。编辑后的 ​​ID3 标签应该只显示在我的应用程序中。

【问题讨论】:

    标签: android metadata id3 mediastore


    【解决方案1】:

    我认为这就是您正在寻找的 MyID3 library 来设置和获取媒体文件的标签。

    下载此 jar 文件 MyID3_for_android 并将其添加到项目的构建路径中。 这是示例代码。这里pathdata是音频文件的文件路径。

                File src = new File(pathdata);
                MusicMetadataSet src_set = null;
                try {
                    src_set = new MyID3().read(src);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } // read metadata
    
                if (src_set == null) // perhaps no metadata
                {
                    Log.i("NULL", "NULL");
                }
                else
                {
                    try{
                        IMusicMetadata metadata = src_set.getSimplified();
                        String artist = metadata.getArtist();  
                        String album = metadata.getAlbum();  
                        String song_title = metadata.getSongTitle(); 
                        Number track_number = metadata.getTrackNumber(); 
                        Log.i("artist", artist);
                        Log.i("album", album);
                    }catch (Exception e) {
                        e.printStackTrace();
                    }
                    File dst = new File(pathdata);
                    MusicMetadata meta = new MusicMetadata("name");
                    meta.setAlbum("Chirag");
                    meta.setArtist("CS");
                    try {
                        new MyID3().write(src, dst, src_set, meta);
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ID3WriteException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }  // write updated metadata
                }
    

    快乐编码:)

    【讨论】:

    • 当我更改 id3 标签时,它会破坏 mp3 文件并使其无法像 manan 所说的那样播放。
    • @MKJParekh 你的回答帮助了很多程序员,我就是其中之一,但我有不同的问题,也许你有答案。我想连接多个 mp3 文件。有没有可能用 MyID3 实现。如果你有答案,我可以发布一个问题。感谢您的所有帮助
    • 坦率地说@Harsh,我还没有在那个ID3库上工作..只是用它来解决朋友的这个问题,但我建议你应该立即用SO开始一个问题您的问题的完整细节,我相信您会从世界的任何角落得到答案。
    • @MKJParekh 我按照答案中提到的那样做了,但就像 Chirag 说的那样,文件已损坏并且无法播放。标题也没有改变,但是当我调试这个类 metadata.getSongTitle() 返回我改变的名称。你能帮忙吗?
    • 给定网站不包含下载链接,网站也不可用
    【解决方案2】:

    其实 FasteKerinns 的代码还是不错的。你应该改变

    new MyID3().write(src, dst, src_set, meta);

    new MyID3().update(src, src_set, meta);

    这意味着您根本不需要 dst 变量。

    另外,我有这段代码可以刷新在 MediaStore 中修改的歌曲:

     scanner=new MediaScannerConnection(getApplicationContext(),  
                new MediaScannerConnectionClient() {    
    
          public void onScanCompleted(String path, Uri uri) {
                  scanner.disconnect(); 
          }
    
          public void onMediaScannerConnected() {
                  scanner.scanFile(path, "audio/*");    
          }
      });
    
      scanner.connect();
    

    【讨论】:

      【解决方案3】:

      最重要的一点是,编辑后的 ​​ID3 标签只显示在我的应用程序中。

      如果您编辑该文件,那么任何人都会看到它。您可以创建自己的媒体文件数据库(如Android's database)并将修改后的数据存储在那里。

      【讨论】:

      • 所以你说我不应该更改原始数据,而是将它们放在 sqlite db 中,并显示存储的数据
      • 如果您不希望任何其他应用程序可以看到您修改后的 ID3 标签,那么您可以做到这一点的唯一方法是将信息本地存储在例如一个数据库。如果您修改文件,那么每个应用程序都可以看到,因为只有一个文件。您在媒体播放器中看到的 ID3 标签不会立即更改,因为其他应用程序或 Android 的媒体扫描器必须首先重新扫描文件,但它可能会在某个时间点这样做
      • @zapl 是的,但我在 Soni 的回答中找到了更好的解决方案。
      • 是的,你是对的......因为其他可用的图书馆也在做同样的事情......我认为
      【解决方案4】:

      我已经创建了一个示例应用程序,基于上述答案,您可以从这里下载示例实现https://github.com/mickyarun/AndroidSongMetaDataUpdate.git

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 2021-02-11
        • 1970-01-01
        相关资源
        最近更新 更多