private void initId3v1Tag(SeekableByteChannel seekableByteChannel) throws IOException { ByteBuffer byteBuffer = ByteBuffer.allocate(ID3v1Tag.TAG_LENGTH); seekableByteChannel.position(getLength() - ID3v1Tag.TAG_LENGTH); byteBuffer.clear(); int bytesRead = seekableByteChannel.read(byteBuffer); if (bytesRead < ID3v1Tag.TAG_LENGTH) throw new IOException("Not enough bytes read"); try { id3v1Tag = new ID3v1Tag(byteBuffer.array()); } catch (NoSuchTagException e) { id3v1Tag = null; } }
public void packTag(byte[] bytes) { Arrays.fill(bytes, (byte) 0); try { BufferTools.stringIntoByteBuffer(TAG, 0, 3, bytes, 0); } catch (UnsupportedEncodingException e) { } packField(bytes, title, TITLE_LENGTH, TITLE_OFFSET); packField(bytes, artist, ARTIST_LENGTH, ARTIST_OFFSET); packField(bytes, album, ALBUM_LENGTH, ALBUM_OFFSET); packField(bytes, year, YEAR_LENGTH, YEAR_OFFSET); if (genre < 128) { bytes[GENRE_OFFSET] = (byte) genre; } else { bytes[GENRE_OFFSET] = (byte) (genre - 256); } if (track == null) { packField(bytes, comment, COMMENT_LENGTH_V1_0, COMMENT_OFFSET); } else { packField(bytes, comment, COMMENT_LENGTH_V1_1, COMMENT_OFFSET); String trackTemp = numericsOnly(track); if (trackTemp.length() > 0) { int trackInt = Integer.parseInt(trackTemp); if (trackInt < 128) { bytes[TRACK_OFFSET] = (byte) trackInt; } else { bytes[TRACK_OFFSET] = (byte) (trackInt - 256); } } } }
@Override public byte[] toBytes() { byte[] bytes = new byte[TAG_LENGTH]; packTag(bytes); return bytes; }
public ID3v1Tag(byte[] bytes) throws NoSuchTagException { unpackTag(bytes); }
private void unpackTag(byte[] bytes) throws NoSuchTagException { sanityCheckTag(bytes); title = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, TITLE_OFFSET, TITLE_LENGTH)); artist = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, ARTIST_OFFSET, ARTIST_LENGTH)); album = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, ALBUM_OFFSET, ALBUM_LENGTH)); year = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, YEAR_OFFSET, YEAR_LENGTH)); genre = bytes[GENRE_OFFSET] & 0xFF; if (genre == 0xFF) { genre = -1; } if (bytes[TRACK_MARKER_OFFSET] != 0) { comment = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, COMMENT_OFFSET, COMMENT_LENGTH_V1_0)); track = null; } else { comment = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, COMMENT_OFFSET, COMMENT_LENGTH_V1_1)); int trackInt = bytes[TRACK_OFFSET]; if (trackInt == 0) { track = ""; } else { track = Integer.toString(trackInt); } } }
public ID3v1Tag(byte[] bytes) throws NoSuchTagException { unpackTag(bytes); }
private void unpackTag(byte[] bytes) throws NoSuchTagException { sanityCheckTag(bytes); title = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, TITLE_OFFSET, TITLE_LENGTH)); artist = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, ARTIST_OFFSET, ARTIST_LENGTH)); album = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, ALBUM_OFFSET, ALBUM_LENGTH)); year = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, YEAR_OFFSET, YEAR_LENGTH)); genre = bytes[GENRE_OFFSET] & 0xFF; if (genre == 0xFF) { genre = -1; } if (bytes[TRACK_MARKER_OFFSET] != 0) { comment = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, COMMENT_OFFSET, COMMENT_LENGTH_V1_0)); track = null; } else { comment = BufferTools.trimStringRight(BufferTools.byteBufferToStringIgnoringEncodingIssues(bytes, COMMENT_OFFSET, COMMENT_LENGTH_V1_1)); int trackInt = bytes[TRACK_OFFSET]; if (trackInt == 0) { track = ""; } else { track = Integer.toString(trackInt); } } }
private void initId3v1Tag(SeekableByteChannel seekableByteChannel) throws IOException { ByteBuffer byteBuffer = ByteBuffer.allocate(ID3v1Tag.TAG_LENGTH); seekableByteChannel.position(getLength() - ID3v1Tag.TAG_LENGTH); byteBuffer.clear(); int bytesRead = seekableByteChannel.read(byteBuffer); if (bytesRead < ID3v1Tag.TAG_LENGTH) throw new IOException("Not enough bytes read"); try { id3v1Tag = new ID3v1Tag(byteBuffer.array()); } catch (NoSuchTagException e) { id3v1Tag = null; } }
public void packTag(byte[] bytes) { Arrays.fill(bytes, (byte) 0); try { BufferTools.stringIntoByteBuffer(TAG, 0, 3, bytes, 0); } catch (UnsupportedEncodingException e) { } packField(bytes, title, TITLE_LENGTH, TITLE_OFFSET); packField(bytes, artist, ARTIST_LENGTH, ARTIST_OFFSET); packField(bytes, album, ALBUM_LENGTH, ALBUM_OFFSET); packField(bytes, year, YEAR_LENGTH, YEAR_OFFSET); if (genre < 128) { bytes[GENRE_OFFSET] = (byte) genre; } else { bytes[GENRE_OFFSET] = (byte) (genre - 256); } if (track == null) { packField(bytes, comment, COMMENT_LENGTH_V1_0, COMMENT_OFFSET); } else { packField(bytes, comment, COMMENT_LENGTH_V1_1, COMMENT_OFFSET); String trackTemp = numericsOnly(track); if (trackTemp.length() > 0) { int trackInt = Integer.parseInt(trackTemp); if (trackInt < 128) { bytes[TRACK_OFFSET] = (byte) trackInt; } else { bytes[TRACK_OFFSET] = (byte) (trackInt - 256); } } } }
public void toBytes(byte[] bytes) { packTag(bytes); }
id3v1Tag = mp3file.getId3v1Tag(); } else { id3v1Tag = new ID3v1Tag(); mp3file.setId3v1Tag(id3v1Tag);
@Override public byte[] toBytes() { byte[] bytes = new byte[TAG_LENGTH]; packTag(bytes); return bytes; }
Mp3File mp3file = new Mp3File("SomeMp3File.mp3"); ID3v1 id3v1Tag; if (mp3file.hasId3v1Tag()) { id3v1Tag = mp3file.getId3v1Tag(); } else { // mp3 does not have an ID3v1 tag, let's create one.. id3v1Tag = new ID3v1Tag(); mp3file.setId3v1Tag(id3v1Tag); } id3v1Tag.setTrack("5"); id3v1Tag.setArtist("An Artist"); id3v1Tag.setTitle("The Title"); id3v1Tag.setAlbum("The Album"); id3v1Tag.setYear("2001"); id3v1Tag.setGenre(12); id3v1Tag.setComment("Some comment"); mp3file.save("MyMp3File.mp3");
public void toBytes(byte[] bytes) { packTag(bytes); }
private void updateId3Tags() { ID3Wrapper oldId3Wrapper = new ID3Wrapper(mp3file.getId3v1Tag(), mp3file.getId3v2Tag()); ID3Wrapper newId3Wrapper = new ID3Wrapper(new ID3v1Tag(), new ID3v23Tag()); preProcess(oldId3Wrapper); newId3Wrapper.setTrack(cleanTrack(oldId3Wrapper.getTrack()));