Как использовать 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.

Другие вопросы по тегам