1

そのため、アプリで音楽ファイルのタグを編集しようとしています。これがコードです

TagOptionSingleton.getInstance().setAndroid(true);
AudioFile f = AudioFileIO.read(sel);
Tag tag = f.getTag();
tag.setField(FieldKey.TITLE, "ABC");
f.commit();

AudioFileIO.write(f)代わりに試しましf.commit()たが、行った変更がファイルに反映されません。彼らはまだ同じ古いデータを持っています。

JAudioTagger のいくつかのバージョンを試しましたが、うまくいきません。誰か助けてください。前もって感謝します !!

4

1 に答える 1

1

少し遅れていることはわかっていますが、次のように機能します(他のタグにも同じフレームワークを使用しています

     public String getmp3TrackTitleTag(File SourceFile)
        throws Exception {
    String TrackTitle = null;
    try {
        MP3File musicFile = (MP3File) AudioFileIO.read(SourceFile);
        if (musicFile != null && musicFile.hasID3v2Tag()) {
            ID3v24Tag id3v24 = (ID3v24Tag) musicFile.getID3v2TagAsv24();
            TrackTitle = id3v24.getFirst(ID3v24Frames.FRAME_ID_TITLE);
        }
    } catch (CannotReadException | IOException | TagException
            | ReadOnlyFileException | InvalidAudioFrameException e5) {
        throw e5;
    }
    return TrackTitle;
}

そしてタイトルを設定する

      public String setmp3TrackTitleTag(File SourceFile, String strTrackTitle)
        throws Exception {
    String error = null;
    AbstractID3v2Tag v2tag = null;

    try {
        MP3File musicFile = (MP3File) AudioFileIO.read(SourceFile);
        if (musicFile != null && musicFile.hasID3v2Tag()) {
            v2tag = musicFile.getID3v2Tag();
            try {
                v2tag.setField(FieldKey.TITLE, strTrackTitle);
                musicFile.setTag(v2tag);
                musicFile.commit();
            } catch (KeyNotFoundException e) {
                e.printStackTrace();
                error = e.getMessage();
            } catch (FieldDataInvalidException e) {
                e.printStackTrace();
                error = e.getMessage();
            } catch (CannotWriteException e) {
                e.printStackTrace();
                error = e.getMessage();
            }
        }
    } catch (CannotReadException | IOException | TagException
            | ReadOnlyFileException | InvalidAudioFrameException e5) {

        throw e5;
    }
    return error;
}
于 2016-11-16T17:21:16.157 に答える