From ca8316892aba2b0058722747f47fd1e4a0940373 Mon Sep 17 00:00:00 2001 From: Recrown Date: Sat, 22 Apr 2017 19:53:34 -0500 Subject: [PATCH] Fixed bad header reading for wav files --- core/src/zero1hd/wavedecoder/WavInfo.java | 31 ++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/core/src/zero1hd/wavedecoder/WavInfo.java b/core/src/zero1hd/wavedecoder/WavInfo.java index 7ced666..827f5c6 100755 --- a/core/src/zero1hd/wavedecoder/WavInfo.java +++ b/core/src/zero1hd/wavedecoder/WavInfo.java @@ -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() {