1

アプリを org.blinkenlights.jid3 から jaudiotagger に移行しています。ほとんどの mp3 タグの実装に成功しましたが、POPM タグに苦労しています。フレームを取得してPOPMを読み取ろうとしています。コードが 3 つの方法を認識するため、正しい方法のように見えます。

(Long irating = popmframe.getRating();
Long cnt = popmframe.getCounter();
String mail = popmframe.getEmailToUser()). 

FrameBodyPOPM popmframe = id3v24tag.getFrame( ); の括弧内には何を入れればよいでしょうか。JID3 を使用すると、次のような結果が得られました。

try {

                ID3V2_3_0Tag ID3V2_3_0Tag =     (org.blinkenlights.jid3.v2.ID3V2_3_0Tag) MediaFile.getID3V2Tag();
                if (null != ID3V2_3_0Tag) {
                    for (int i = 0; i < ID3V2_3_0Tag.getPOPMFrames().length; i++) {
                        if (ID3V2_3_0Tag.getPOPMFrames()[i] != null) {
                            rating = ID3V2_3_0Tag.getPOPMFrames()[i].getPopularity();
                            break;
                        }
                    }
                }
                rating = rating / 50;
            } catch (ID3Exception e) {
                e.printStackTrace();
            }

jaudiotagger を使用して、これまでのところ次のコードがあります。

          try {
        MP3File musicFile = (MP3File) AudioFileIO.read(SourceFile);

        if (musicFile != null && musicFile.hasID3v2Tag()) {
            ID3v24Tag id3v24tag = musicFile.getID3v2TagAsv24();
            FrameBodyPOPM popmframe = id3v24tag.getFrame(??????);
            Long irating = popmframe.getRating();
            Long cnt = popmframe.getCounter();
            String mail = popmframe.getEmailToUser();

        }
    } catch (CannotReadException | IOException | TagException
            | ReadOnlyFileException | InvalidAudioFrameException e5) {
        throw e5;
    }

疑問符の場合は文字列を報告しますが、「POPM」などの文字列を入力すると、必要と報告されます: org.jaudiotagger.tag.id3.framebody FramebodyPOPM 、見つかりました java.lang.Object

jaudiotagger ライブラリを使用して POPM タグを読み書きする方法を示すことができる人はいますか?

更新:値はフレーム識別子であるべきだと思うので、

FrameBodyPOPM popmframe = (FrameBodyPOPM) id3v24tag.getFrame(ID3v24Frames.FRAME_ID_POPULARIMETER);

コンパイルはできますが、エラーになります:

java.lang.ClassCastException: org.jaudiotagger.tag.id3.ID3v24Frame cannot be cast to org.jaudiotagger.tag.id3.framebody.FrameBodyPOPM

しかし、popmframe を ID3v24Frame にすると、3 つのメソッドが使用できなくなるので、FrameBodyPOPM が正しい方法だと思います。

4

1 に答える 1

0

問題を解決しました。以下のコードは期待どおりに動作します。

         try {
        MP3File musicFile = (MP3File) AudioFileIO.read(SourceFile);

        if (musicFile != null && musicFile.hasID3v2Tag()) {
            ID3v23Frame frame = (ID3v23Frame) musicFile.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_POPULARIMETER);
            FrameBodyPOPM body = (FrameBodyPOPM) frame.getBody();
            String mail = body.getEmailToUser();
            Long irating = body.getRating();
            Long cnt = body.getCounter();
        }
    } catch (CannotReadException | IOException | TagException
            | ReadOnlyFileException | InvalidAudioFrameException e5) {
        throw e5;
    }
于 2016-11-18T16:46:09.790 に答える