Fixed bad header reading for wav files

This commit is contained in:
Harrison Deng 2017-04-22 19:53:34 -05:00
parent 3afbf3a671
commit ca8316892a

View File

@ -6,6 +6,8 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidParameterException;
import com.badlogic.gdx.Gdx;
public class WavInfo {
private int channels;
private double sampleRate;
@ -28,43 +30,48 @@ public class WavInfo {
}
protected void getHeaderInfo() throws IOException {
if (!readBytesToString(4).equals("RIFF")) { //4
if (!readBytesToString(4).equals("RIFF")) { //4 for RIFF tag
throw new InvalidParameterException("RIFF tag not found in header.");
}
dataSize = littleEndianIntBytes(); //4
dataSize = littleEndianIntBytes(); //4 for Chunk size
if (!readBytesToString(4).equals("WAVE")) { //4
if (!readBytesToString(4).equals("WAVE")) { //4 for WAVE tag
throw new InvalidParameterException("WAVE format tag not found.");
}
if (!readBytesToString(4).equals("fmt ")) { //4
if (!readBytesToString(4).equals("fmt ")) { //4 for 'fmt '
throw new InvalidParameterException("fmt header not found.");
}
if (readStream.readByte() != 16) { //1
if (littleEndianIntBytes() != 16) { //subchunk1size (4 bytes)
throw new InvalidParameterException("Data not pcm?");
}
readStream.skipBytes(3); //3
if (readStream.readByte() != 1) { //1
if (readStream.readByte() != 1) { //1 pcm
throw new InvalidParameterException("Data not pcm?");
}
readStream.skipBytes(1); //1
readStream.skip(1); //1
channels = readStream.readByte(); //1
readStream.skipBytes(1); //1
channels = readStream.readByte(); //1 channel count
readStream.skip(1); //1
sampleRate = littleEndianIntBytes(); //4
sampleRate = littleEndianIntBytes(); //4 sample rate
byteRate = littleEndianIntBytes(); //4
readStream.skipBytes(38); //38
readStream.skip(4); //38
// System.out.println(readBytesToString(4).equals("data"));
if (!readBytesToString(4).equals("data")) { // 4
Gdx.app.debug("Audio", "sample rate: " + sampleRate);
Gdx.app.debug("Audio", "Data chunk size: " + dataSize);
Gdx.app.debug("Audio", "Channel count: " + channels);
throw new InvalidParameterException("initial data section tag not found on wav: " + fileName);
}
readStream.skip(4);
}
protected void initDataStream() {