1

我正在尝试使用JaudioTagger 2.2.3编辑音频文件的标签,但到目前为止我还没有取得任何成功。这是更改mp3内部存储中文件的艺术家标签的测试代码

String path;
try
{
  TagOptionSingleton.getInstance().setAndroid(true);
  AudioFile f=AudioFileIO.read(new File(path));
  Tag t=f.getTag();
  t.setField(FieldKey.ARTIST,Str);
  AudioFileIO.write(f);
}catch(CannotReadException e){}
 catch(TagException e){}
 catch(ReadOnlyException e){}
 catch(InvalidAudioFrameException e){}
 catch(CannotWriteException e){}

我的应用程序得到了很好的提升,android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.READ_EXTERNAL_STORAGE 正在 Android 版本中测试Android 6.0 这段代码会抛出InvalidAudioFrameException一条消息

No audio header found within example.mp3

这并不是说音频损坏了,因为它与其他 mp3 也显示出类似的错误 此外,如果有人有任何其他用于音频标记的 wat,请告诉我,我也使用mp3agic了它反复显示:example.mp3:open failed :EROFS(Read only file system)在线

Mp3File mp3file = new Mp3File(filePathStr+"example.mp3");
ID3v1 id3v1Tag;
if (mp3file.hasId3v1Tag()) {
  id3v1Tag =  mp3file.getId3v1Tag();
} else {
  // mp3 does not have an ID3v1 tag, let's create one..
  id3v1Tag = new ID3v1Tag();
  mp3file.setId3v1Tag(id3v1Tag);
    }
  id3v1Tag.setTrack("5");
  id3v1Tag.setArtist("An Artist");
  id3v1Tag.setTitle("The Title");
  id3v1Tag.setAlbum("The Album");
  id3v1Tag.setYear("2001");
  id3v1Tag.setGenre(12);
  id3v1Tag.setComment("Some comment");
  mp3file.save("example.mp3")//error showing in this line

我的问题

  • 如何纠正Jaudiotagger?
  • 有没有办法使用 Mp3agic 作为 Jaudiotagger 的替代品?
  • 还是有任何其他有效的方法离开这两个?

我也使用过 JaaudioTagger-android但同样的问题仍然存在。提前致谢!

4

1 回答 1

0

对于执行时的错误

mp3file.save("example.mp3")

我建议不要直接覆盖旧文件。尝试创建一个新文件,然后删除并重命名以恢复原始文件设置。

song.save(location + "intermed");
File from = new File(location + "intermed");
File file = new File(location);
file.delete();
File to = new File(location);
from.renameTo(to);

当然,您需要添加异常处理等等,如果您没有写权限,这也会失败。如果您使用更新的 Android 版本(我认为高于 4.4)并且您尝试访问 SD 卡,则可能会出现这种情况。然后,需要在运行时授予特定文件夹的写权限,清单写权限是不够的。请参阅 Android 的存储访问框架

于 2018-04-15T11:06:08.373 回答