我正在尝试使用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_STORAGE
和android.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-android,但同样的问题仍然存在。 提前谢谢!
答案 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的存储访问框架。