package ch.retorte.intervalmusiccompositor.decoder; import java.io.File; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.tag.flac.FlacTag; import org.jaudiotagger.tag.vorbiscomment.VorbisCommentFieldKey; import org.jaudiotagger.tag.vorbiscomment.VorbisCommentTag; import ch.retorte.intervalmusiccompositor.spi.bpm.BPMReaderWriter; /** * @author nw */ public class FlacBPMReaderWriter implements BPMReaderWriter { private FlacFileProperties flacFile = new FlacFileProperties(); @Override public Integer readBPMFrom(File file) { try { org.jaudiotagger.audio.AudioFile f = AudioFileIO.read(file); FlacTag tag = (FlacTag) f.getTag(); VorbisCommentTag ovtag = tag.getVorbisCommentTag(); String bpmTag = ovtag.getFirst(VorbisCommentFieldKey.BPM); if (!bpmTag.equals("")) { return Integer.valueOf(bpmTag); } } catch (Exception e) { // nop } return null; } @Override public void writeBPMTo(Integer bpm, File file) { try { org.jaudiotagger.audio.AudioFile f = AudioFileIO.read(file); FlacTag tag = (FlacTag) f.getTag(); VorbisCommentTag ovtag = tag.getVorbisCommentTag(); ovtag.setField(ovtag.createField(VorbisCommentFieldKey.BPM, String.valueOf(bpm))); f.commit(); } catch (Exception e) { // nop } } @Override public boolean isAbleToReadWriteBPM(File file) { return flacFile.isOfThisType(file); } }