if (TDebug.TraceAudioFileReader) TDebug.out(">MpegAudioFileReader.getAudioFileFormat(InputStream inputStream, long mediaLength): begin");
HashMap aff_properties = new HashMap();
HashMap af_properties = new HashMap();
int mLength = (int) mediaLength;
int size = inputStream.available();
PushbackInputStream pis = new PushbackInputStream(inputStream, MARK_LIMIT);
byte head[] = new byte[22];
pis.read(head);
if (TDebug.TraceAudioFileReader)
{
TDebug.out("InputStream : " + inputStream + " =>" + new String(head));
}
// Check for WAV, AU, and AIFF, Ogg Vorbis, Flac, MAC file formats.
// Next check for Shoutcast (supported) and OGG (unsupported) streams.
if ((head[0] == 'R') && (head[1] == 'I') && (head[2] == 'F') && (head[3] == 'F') && (head[8] == 'W') && (head[9] == 'A') && (head[10] == 'V') && (head[11] == 'E'))
{
if (TDebug.TraceAudioFileReader) TDebug.out("RIFF/WAV stream found");
int isPCM = ((head[21]<<8)&0x0000FF00) | ((head[20])&0x00000FF);
if (weak == null)
{
if (isPCM == 1) throw new UnsupportedAudioFileException("WAV PCM stream found");
}
}
else if ((head[0] == '.') && (head[1] == 's') && (head[2] == 'n') && (head[3] == 'd'))
{
if (TDebug.TraceAudioFileReader) TDebug.out("AU stream found");
if (weak == null) throw new UnsupportedAudioFileException("AU stream found");
}
else if ((head[0] == 'F') && (head[1] == 'O') && (head[2] == 'R') && (head[3] == 'M') && (head[8] == 'A') && (head[9] == 'I') && (head[10] == 'F') && (head[11] == 'F'))
{
if (TDebug.TraceAudioFileReader) TDebug.out("AIFF stream found");
if (weak == null) throw new UnsupportedAudioFileException("AIFF stream found");
}
else if (((head[0] == 'M') | (head[0] == 'm')) && ((head[1] == 'A') | (head[1] == 'a')) && ((head[2] == 'C') | (head[2] == 'c')))
{
if (TDebug.TraceAudioFileReader) TDebug.out("APE stream found");
if (weak == null) throw new UnsupportedAudioFileException("APE stream found");
}
else if (((head[0] == 'F') | (head[0] == 'f')) && ((head[1] == 'L') | (head[1] == 'l')) && ((head[2] == 'A') | (head[2] == 'a')) && ((head[3] == 'C') | (head[3] == 'c')))
{
if (TDebug.TraceAudioFileReader) TDebug.out("FLAC stream found");
if (weak == null) throw new UnsupportedAudioFileException("FLAC stream found");
}
// Shoutcast stream ?
else if (((head[0] == 'I') | (head[0] == 'i')) && ((head[1] == 'C') | (head[1] == 'c')) && ((head[2] == 'Y') | (head[2] == 'y')))
{
pis.unread(head);
// Load shoutcast meta data.
loadShoutcastInfo(pis, aff_properties);
}
// Ogg stream ?
else if (((head[0] == 'O') | (head[0] == 'o')) && ((head[1] == 'G') | (head[1] == 'g')) && ((head[2] == 'G') | (head[2] == 'g')))
{
if (TDebug.TraceAudioFileReader) TDebug.out("Ogg stream found");
if (weak == null) throw new UnsupportedAudioFileException("Ogg stream found");
}
// No, so pushback.
else
{
pis.unread(head);
}
// MPEG header info.
int nVersion = AudioSystem.NOT_SPECIFIED;
int nLayer = AudioSystem.NOT_SPECIFIED;
int nSFIndex = AudioSystem.NOT_SPECIFIED;