首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jaudiotagger POPULARIMETER标签

jaudiotagger POPULARIMETER标签
EN

Stack Overflow用户
提问于 2016-11-18 00:00:01
回答 1查看 272关注 0票数 1

我正在将我的应用程序从使用org.blinkenlights.jid3迁移到jaudiotagger。我已经成功地实现了大多数mp3标签,但正在努力使用POPM标签。我正在尝试通过获取帧来读取POPM。它似乎是正确的方法,因为代码识别了这三种方法

代码语言:javascript
复制
(Long irating = popmframe.getRating();
Long cnt = popmframe.getCounter();
String mail = popmframe.getEmailToUser()). 

我应该在括号中放什么FrameBodyPOPM popmframe = id3v24tag.getFrame( );。使用JID3我实现了如下结果:

代码语言:javascript
复制
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编写了以下代码:

代码语言:javascript
复制
          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.jaudio otagger.tag.id3.framebody FramebodyPOPM,found java.lang.Object

有谁可以演示如何使用jaudiotagger库来读写POPM标签?

更新:我认为这个值应该是一个框架标识符,所以

代码语言:javascript
复制
FrameBodyPOPM popmframe = (FrameBodyPOPM) id3v24tag.getFrame(ID3v24Frames.FRAME_ID_POPULARIMETER);

编译,但会导致错误:

代码语言:javascript
复制
java.lang.ClassCastException: org.jaudiotagger.tag.id3.ID3v24Frame cannot be cast to org.jaudiotagger.tag.id3.framebody.FrameBodyPOPM

但是如果我将popmframe设为ID3v24Frame,这3个方法就不再可用了,所以我认为FrameBodyPOPM是正确的方法。

EN

回答 1

Stack Overflow用户

发布于 2016-11-19 00:46:10

已解决问题。下面的代码按预期工作。

代码语言:javascript
复制
         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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40659509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档