/*
* Copyright (c) 2008, 2009, 2010, 2011 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work. If not, see <http://www.gnu.org/licenses/>.
*/
package com.tulskiy.musique.audio.formats.mp4;
import java.util.ArrayList;
import java.util.List;
import org.jaudiotagger.audio.generic.GenericAudioHeader;
import org.jaudiotagger.audio.mp4.Mp4FileReader;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.TagField;
import org.jaudiotagger.tag.mp4.Mp4FieldKey;
import org.jaudiotagger.tag.mp4.Mp4Tag;
import org.jaudiotagger.tag.mp4.field.Mp4DiscNoField;
import org.jaudiotagger.tag.mp4.field.Mp4TrackField;
import com.tulskiy.musique.audio.AudioFileReader;
import com.tulskiy.musique.playlist.Track;
import com.tulskiy.musique.playlist.TrackData;
/**
* Author: Denis Tulskiy
* Date: 11.08.2009
*/
public class MP4FileReader extends AudioFileReader {
@Override
public Track readSingle(Track track) {
Mp4FileReader reader = new Mp4FileReader();
try {
org.jaudiotagger.audio.AudioFile audioFile = reader.read(track.getTrackData().getFile());
copyHeaderFields((GenericAudioHeader) audioFile.getAudioHeader(), track);
org.jaudiotagger.tag.Tag tag = audioFile.getTag();
copyCommonTagFields(tag, track);
copySpecificTagFields(tag, track);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Couldn't read file: " + track.getTrackData().getFile());
}
return track;
}
@Override
public boolean isFileSupported(String ext) {
return (ext.equalsIgnoreCase("mp4") || ext.equalsIgnoreCase("m4a"));
}
@Override
protected void copySpecificTagFields(Tag tag, Track track) {
Mp4Tag mp4Tag = (Mp4Tag) tag;
TrackData trackData = track.getTrackData();
Mp4TrackField trackField = (Mp4TrackField) mp4Tag.getFirstField(Mp4FieldKey.TRACK);
if (trackField != null) {
if (trackField.getTrackNo() != null) {
trackData.addTrack(trackField.getTrackNo().intValue());
}
if (trackField.getTrackTotal() != null) {
trackData.addTrackTotal(trackField.getTrackTotal().intValue());
}
}
Mp4DiscNoField discField = (Mp4DiscNoField) mp4Tag.getFirstField(Mp4FieldKey.DISCNUMBER);
if (discField != null) {
if (discField.getDiscNo() != null) {
trackData.addDisc(discField.getDiscNo().intValue());
}
if (discField.getDiscTotal() != null) {
trackData.addDiscTotal(discField.getDiscTotal().intValue());
}
}
List<TagField> genreFields = new ArrayList<TagField>();
genreFields.addAll(mp4Tag.get(Mp4FieldKey.GENRE_CUSTOM));
genreFields.addAll(mp4Tag.get(Mp4FieldKey.GENRE_ITUNES));
for (TagField genreField : genreFields) {
trackData.addGenre(genreField.toString());
}
}
}