2016-11-17 6 views
1

내 앱이 org.blinkenlights.jid3을 사용하여 jaudiotagger로 마이그레이션 중입니다. 나는 mp3 태그의 대부분을 성공적으로 구현했지만 POPM 태그로 어려움을 겪고 있습니다. 프레임을 gettting하여 POPM을 읽으려고합니다. 코드는 세 가지 방법을 recongnises으로 올바른 방법으로 나타나는 I는 브래킷 FrameBodyPOPM popmframe = id3v24tag.getFrame 넣어야 무엇jaudiotagger 인기 태그 태그

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

(); 다음과 같이 나는 결과를 달성 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, 찾을 java.lang.Object

jaudiotagger 라이브러리를 사용하여 POPM 태그를 읽고 쓰는 방법을 보여줄 수있는 사람은 누구입니까?

갱신 :

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

하지만 할 경우 ID3v24Frame을 popmframe, 3 방법은 다음과 같습니다 나는 값이 너무

FrameBodyPOPM popmframe = (FrameBodyPOPM) id3v24tag.getFrame(ID3v24Frames.FRAME_ID_POPULARIMETER); 
오류가

컴파일하지만 결과 프레임 식별자해야한다고 생각합니다 더 이상 사용할 수 없으므로 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

을 읽었을 때 반복적 인 문제인 것으로 보입니다. 표준 자바가 아닌 안드로이드 자바 용으로 개발 되었기 때문에 현재 불완전한 자바 구현 때문에 안드로이드에서 실행되는 몇 가지 문제가 있습니다. –