如何使用JaudioTagger写入数据?

时间:2018-01-25 08:09:06

标签: android audio jaudiotagger mp3agic

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

mp3文件的Artist标记的测试代码
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类似的错误 此外,如果任何人有任何其他音频标签的扫描仪,请告诉我,我也使用了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的替代品?
  • 或者还有其他任何有效的方法可以留下这两个吗?

我也使用了JaudioTagger-android,但同样的问题仍然存在。 提前谢谢!

1 个答案:

答案 0 :(得分: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的存储访问框架