2016-11-17 64 views
1

我正在使用org.blinkenlights.jid3將應用程序遷移到jaudiotagger。我已經成功實現了大部分的mp3標籤,但我正在努力使用POPM標籤。我正在嘗試通過獲取框架來閱讀POPM。作爲代碼recongnises的三種方法,似乎是正確的方法jaudiotagger POPULARIMETER標記

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

我應該把什麼括號FrameBodyPOPM popmframe = id3v24tag.getFrame();. 使用JID3我所取得的結果如下:使用jaudiotagger

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(); 
      } 

我到目前爲止下面的代碼:

  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,found 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是正確的方法。

回答

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; 
    } 
+0

最後,我放棄了jaudiotagger,因爲我發現有一些java io文件丟失了。這似乎是一個反覆出現的問題,當你閱讀github的評論 – Theo

+0

它是爲標準的Java而不是開發的Java,所以目前有一些問題在android上運行,因爲它們的java實現不完整。 –