Как использовать JaudioTagger для записи данных?
Я пытаюсь использовать JaudioTagger 2.2.3
редактировать теги аудио файла, но до сих пор я не добился никакого успеха. это тестовый код для изменения тега Artist 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_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?
- Есть ли способ использовать Mp3agic в качестве альтернативы Jaudiotagger?
- Или есть какой-то другой эффективный способ оставить этих двоих?
Я также использовал JaudioTagger-android, но та же проблема сохраняется. заранее спасибо!
1 ответ
За ошибку при выполнении
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.