- public static Optional<Format> identify(InputStream inputStream) throws IOException {
- Bitstream bitstream = new Bitstream(inputStream);
- try {
- Header frame = bitstream.readFrame();
- if (frame == null) {
- return Optional.absent();
+ public static Optional<Metadata> identify(InputStream inputStream) throws IOException {
+ Parser mp3Parser = new Parser(inputStream);
+ Frame frame = mp3Parser.nextFrame();
+ FormatMetadata formatMetadata = new FormatMetadata((frame.channelMode() == SINGLE_CHANNEL) ? 1 : 2, frame.samplingRate(), "MP3");
+ ContentMetadata contentMetadata = new ContentMetadata("");
+ /* check for ID3v2 tag. */
+ Optional<byte[]> id3v2TagBuffer = mp3Parser.getId3Tag();
+ if (id3v2TagBuffer.isPresent()) {
+ byte[] buffer = id3v2TagBuffer.get();
+ ByteArrayInputStream tagInputStream = new ByteArrayInputStream(Arrays.copyOfRange(buffer, 3, buffer.length));
+ try {
+ /* skip “ID3” header tag. */
+ ID3V2Tag id3v2Tag = ID3V2Tag.read(tagInputStream);
+ if (id3v2Tag != null) {
+ contentMetadata = contentMetadata.artist(id3v2Tag.getArtist()).name(id3v2Tag.getTitle());
+ }
+ } catch (ID3Exception id3e1) {
+ id3e1.printStackTrace();
+ } finally {
+ close(tagInputStream, true);