package org.jaudiotagger.audio.mp3;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.exceptions.CannotReadException;
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
import org.jaudiotagger.audio.generic.AudioFileReader;
import org.jaudiotagger.audio.generic.GenericAudioHeader;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.TagException;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* Read Mp3 Info (retrofitted to entagged ,done differently to entagged which is why some methods throw RuntimeException)
* because done elsewhere
*/
public class MP3FileReader extends AudioFileReader {
protected GenericAudioHeader getEncodingInfo(RandomAccessFile raf) throws CannotReadException, IOException {
throw new RuntimeException("MP3FileReader.getEncodingInfo should be called");
}
protected Tag getTag(RandomAccessFile raf) throws CannotReadException, IOException {
throw new RuntimeException("MP3FileReader.getEncodingInfo should be called");
}
/**
* @param f
* @return
*/
//Override because we read mp3s differently to the entagged code
public AudioFile read(File f) throws IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException {
MP3File mp3File = new MP3File(f, MP3File.LOAD_IDV1TAG | MP3File.LOAD_IDV2TAG, true);
return mp3File;
}
/**
* Read
*
* @param f
* @return
* @throws ReadOnlyFileException thrown if the file is not writable
* @throws org.jaudiotagger.tag.TagException
*
* @throws java.io.IOException
* @throws org.jaudiotagger.audio.exceptions.InvalidAudioFrameException
*
*/
public AudioFile readMustBeWritable(File f) throws IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException {
MP3File mp3File = new MP3File(f, MP3File.LOAD_IDV1TAG | MP3File.LOAD_IDV2TAG, false);
return mp3File;
}
}