@Override public void setWmpRating(final int rating) { if (rating >= 0 && rating < 6) { invalidateDataLength(); final ID3v2PopmFrameData frameData = new ID3v2PopmFrameData(useFrameUnsynchronisation(), rating); final byte[] bytes = frameData.toBytes(); addFrame(createFrame(ID_RATING, bytes), true); } }
@Override public int getDataLength() { if (dataLength == 0) { dataLength = calculateDataLength(); } return dataLength; }
@Override public void clearAlbumImage() { clearFrameSet(obseleteFormat ? ID_IMAGE_OBSELETE : ID_IMAGE); }
@Override public void setChapters(ArrayList<ID3v2ChapterFrameData> chapters) { if (chapters != null) { invalidateDataLength(); boolean first = true; for (ID3v2ChapterFrameData chapter : chapters) { if (first) { first = false; addFrame(createFrame(ID_CHAPTER, chapter.toBytes()), true); } else { addFrame(createFrame(ID_CHAPTER, chapter.toBytes()), false); } } } }
private int getGenre(String text) { if (text != null && text.length() > 0) { try { return extractGenreNumber(text); } catch (NumberFormatException e) { // match genre description String description = extractGenreDescription(text); return ID3v1Genres.matchGenreDescription(description); } } return -1; }
@Override public String getGenreDescription() { ID3v2TextFrameData frameData = extractTextFrameData(obseleteFormat ? ID_GENRE_OBSELETE : ID_GENRE); if (frameData == null || frameData.getText() == null) { return null; } String text = frameData.getText().toString(); if (text != null) { int genreNum = getGenre(text); if (genreNum >= 0 && genreNum < ID3v1Genres.GENRES.length) { return ID3v1Genres.GENRES[genreNum]; } else { String description = extractGenreDescription(text); if (description != null && description.length() > 0) { return description; } } } return null; }
protected int unpackFrames(byte[] bytes, int offset, int framesLength) { int currentOffset = offset; while (currentOffset <= framesLength) { ID3v2Frame frame; try { frame = createFrame(bytes, currentOffset); addFrame(frame, false); currentOffset += frame.getLength(); } catch (InvalidDataException e) { break; } } return currentOffset; }
@Override public byte[] getAlbumImage() { ID3v2PictureFrameData frameData = createPictureFrameData(obseleteFormat ? ID_IMAGE_OBSELETE : ID_IMAGE); if (frameData != null) return frameData.getImageData(); return null; }
@Override public String getComment() { ID3v2CommentFrameData frameData = extractCommentFrameData(obseleteFormat ? ID_COMMENT_OBSELETE : ID_COMMENT, false); if (frameData != null && frameData.getComment() != null) return frameData.getComment().toString(); return null; }
@Override public ArrayList<ID3v2ChapterTOCFrameData> getChapterTOC() { if (obseleteFormat) { return null; } return extractChapterTOCFrameData(ID_CHAPTER_TOC); }
@Override public ArrayList<ID3v2ChapterFrameData> getChapters() { if (obseleteFormat) { return null; } return extractChapterFrameData(ID_CHAPTER); }
@Override public void setChapterTOC(ArrayList<ID3v2ChapterTOCFrameData> toc) { if (toc != null) { invalidateDataLength(); boolean first = true; for (ID3v2ChapterTOCFrameData ct : toc) { if (first) { first = false; addFrame(createFrame(ID_CHAPTER_TOC, ct.toBytes()), true); } else { addFrame(createFrame(ID_CHAPTER_TOC, ct.toBytes()), false); } } } }
@Override public String getGenreDescription() { ID3v2TextFrameData frameData = extractTextFrameData(obseleteFormat ? ID_GENRE_OBSELETE : ID_GENRE); if (frameData == null || frameData.getText() == null) { return null; } String text = frameData.getText().toString(); if (text != null) { int genreNum = getGenre(text); if (genreNum >= 0 && genreNum < ID3v1Genres.GENRES.length) { return ID3v1Genres.GENRES[genreNum]; } else { String description = extractGenreDescription(text); if (description != null && description.length() > 0) { return description; } } } return null; }
private int getGenre(String text) { if (text != null && text.length() > 0) { try { return extractGenreNumber(text); } catch (NumberFormatException e) { // match genre description String description = extractGenreDescription(text); return ID3v1Genres.matchGenreDescription(description); } } return -1; }
protected int unpackFrames(byte[] bytes, int offset, int framesLength) { int currentOffset = offset; while (currentOffset <= framesLength) { ID3v2Frame frame; try { frame = createFrame(bytes, currentOffset); addFrame(frame, false); currentOffset += frame.getLength(); } catch (InvalidDataException e) { break; } } return currentOffset; }
@Override public String getAlbumImageMimeType() { ID3v2PictureFrameData frameData = createPictureFrameData(obseleteFormat ? ID_IMAGE_OBSELETE : ID_IMAGE); if (frameData != null && frameData.getMimeType() != null) return frameData.getMimeType(); return null; }
@Override public String getItunesComment() { ID3v2CommentFrameData frameData = extractCommentFrameData(obseleteFormat ? ID_COMMENT_OBSELETE : ID_COMMENT, true); if (frameData != null && frameData.getComment() != null) return frameData.getComment().toString(); return null; }
@Override public ArrayList<ID3v2ChapterTOCFrameData> getChapterTOC() { if (obseleteFormat) { return null; } return extractChapterTOCFrameData(ID_CHAPTER_TOC); }
@Override public ArrayList<ID3v2ChapterFrameData> getChapters() { if (obseleteFormat) { return null; } return extractChapterFrameData(ID_CHAPTER); }
@Override public void setAudiofileUrl(String url) { if (url != null && url.length() > 0) { invalidateDataLength(); ID3v2WWWFrameData frameData = new ID3v2WWWFrameData(useFrameUnsynchronisation(), url); addFrame(createFrame(ID_AUDIOFILE_URL, frameData.toBytes()), true); } }