diff options
Diffstat (limited to 'src/java')
-rw-r--r-- | src/java/com/jogamp/openal/util/WAVData.java | 9 | ||||
-rw-r--r-- | src/java/com/jogamp/openal/util/WAVLoader.java | 6 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/java/com/jogamp/openal/util/WAVData.java b/src/java/com/jogamp/openal/util/WAVData.java index 94dd002..a69782a 100644 --- a/src/java/com/jogamp/openal/util/WAVData.java +++ b/src/java/com/jogamp/openal/util/WAVData.java @@ -89,7 +89,8 @@ public final class WAVData { * @param bits * @param sampleRate * @param byteOrder - * @param stream An InputStream for the .WAV stream + * @param aIn An InputStream for the .WAV stream + * @param size Amount of data to load from buffer (or zero for all available) * * @return a WAVData object containing the audio data * @@ -98,7 +99,7 @@ public final class WAVData { * @throws IOException If the file can no be found or some other IO error * occurs */ - public static WAVData loadFromStream(InputStream aIn, final int initialCapacity, final int numChannels, final int bits, final int sampleRate, final ByteOrder byteOrder, final boolean loop) + public static WAVData loadFromStream(InputStream aIn, final int initialCapacity, final int numChannels, final int bits, final int sampleRate, final ByteOrder byteOrder, final boolean loop, int size) throws IOException { if( !(aIn instanceof BufferedInputStream) ) { aIn = new BufferedInputStream(aIn); @@ -116,7 +117,9 @@ public final class WAVData { format = ALConstants.AL_FORMAT_STEREO16; } final ByteBuffer buffer = IOUtil.copyStream2ByteBuffer(aIn, initialCapacity); - final int size = buffer.limit(); + if (size==0) { + size = buffer.limit(); + } // Must byte swap in case endianess mismatch if ( bits == 16 && ByteOrder.nativeOrder() != byteOrder ) { diff --git a/src/java/com/jogamp/openal/util/WAVLoader.java b/src/java/com/jogamp/openal/util/WAVLoader.java index ef8d12a..48ff62a 100644 --- a/src/java/com/jogamp/openal/util/WAVLoader.java +++ b/src/java/com/jogamp/openal/util/WAVLoader.java @@ -123,6 +123,7 @@ public class WAVLoader { short sChannels = 0, sSampleSizeInBits = 0; long sampleRate = 0; long chunkLength = 0; + int dataLength = 0; while (!foundData) { final int chunkId = (int)bs.readUInt32(true /* bigEndian */); @@ -150,6 +151,7 @@ public class WAVLoader { throw new ALException("WAV fmt chunks must be before data chunks: "+bs); } foundData = true; + dataLength = Bitstream.uint32LongToInt(chunkLength); break; default: // unrecognized chunk, skips it @@ -160,8 +162,8 @@ public class WAVLoader { final int channels = sChannels; final int sampleSizeInBits = sSampleSizeInBits; final float fSampleRate = sampleRate; - return WAVData.loadFromStream(bs.getSubStream(), riffLenI, channels, sampleSizeInBits, - Math.round(fSampleRate), bigEndian ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN, false); + return WAVData.loadFromStream(bs.getSubStream(), dataLength, channels, sampleSizeInBits, + Math.round(fSampleRate), bigEndian ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN, false, dataLength); } finally { bs.close(); } |