* Fixed bug with WAV audio getting truncated on import
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7197 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
b24b3f78d4
commit
c3b060be6d
@ -38,13 +38,13 @@ import com.jme3.audio.AudioStream;
|
||||
import com.jme3.asset.AssetInfo;
|
||||
import com.jme3.asset.AssetLoader;
|
||||
import com.jme3.audio.AudioKey;
|
||||
import com.jme3.asset.TextureKey;
|
||||
import com.jme3.util.BufferUtils;
|
||||
import com.jme3.util.LittleEndien;
|
||||
import java.io.DataInput;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class WAVLoader implements AssetLoader {
|
||||
@ -84,8 +84,7 @@ public class WAVLoader implements AssetLoader {
|
||||
private int dataLength;
|
||||
private float duration;
|
||||
|
||||
private DataInput in;
|
||||
private InputStream stream;
|
||||
private LittleEndien in;
|
||||
|
||||
private boolean adpcm = false;
|
||||
private int predictor;
|
||||
@ -116,7 +115,8 @@ public class WAVLoader implements AssetLoader {
|
||||
|
||||
int expectedBytesPerSec = (bitsPerSample * channels * sampleRate) / 8;
|
||||
if (expectedBytesPerSec != bytesPerSec){
|
||||
logger.warning("Expected "+expectedBytesPerSec+" bytes per second, got "+bytesPerSec);
|
||||
logger.log(Level.WARNING, "Expected {0} bytes per second, got {1}",
|
||||
new Object[]{expectedBytesPerSec, bytesPerSec});
|
||||
}
|
||||
duration = dataLength / bytesPerSec;
|
||||
|
||||
@ -178,17 +178,16 @@ public class WAVLoader implements AssetLoader {
|
||||
ByteBuffer data = BufferUtils.createByteBuffer(dataLength);
|
||||
byte[] buf = new byte[512];
|
||||
int read = 0;
|
||||
while ( (read = stream.read(buf)) > 0){
|
||||
while ( (read = in.read(buf)) > 0){
|
||||
data.put(buf, 0, read);
|
||||
}
|
||||
data.flip();
|
||||
audioBuffer.updateData(data);
|
||||
stream.close();
|
||||
in.close();
|
||||
}
|
||||
|
||||
public Object load(AssetInfo info) throws IOException {
|
||||
this.stream = info.openStream();
|
||||
in = new LittleEndien(stream);
|
||||
this.in = new LittleEndien(info.openStream());
|
||||
|
||||
int sig = in.readInt();
|
||||
if (sig != i_RIFF)
|
||||
@ -219,7 +218,7 @@ public class WAVLoader implements AssetLoader {
|
||||
break;
|
||||
case i_data:
|
||||
if (readStream){
|
||||
audioStream.updateData(stream, duration);
|
||||
audioStream.updateData(in, duration);
|
||||
}else{
|
||||
readDataChunkForBuffer(len);
|
||||
}
|
||||
|
@ -29,7 +29,6 @@
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package com.jme3.util;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
@ -45,7 +44,7 @@ import java.io.InputStreamReader;
|
||||
* assume they come from a LittleEndien input stream. Currently used to read .ms3d and .3ds files.
|
||||
* @author Jack Lindamood
|
||||
*/
|
||||
public class LittleEndien implements DataInput{
|
||||
public class LittleEndien extends InputStream implements DataInput {
|
||||
|
||||
private BufferedInputStream in;
|
||||
private BufferedReader inRead;
|
||||
@ -55,100 +54,112 @@ public class LittleEndien implements DataInput{
|
||||
* stream is wrapped in a BufferedReader automatically.
|
||||
* @param in The input stream to read from.
|
||||
*/
|
||||
public LittleEndien(InputStream in){
|
||||
public LittleEndien(InputStream in) {
|
||||
this.in = new BufferedInputStream(in);
|
||||
inRead=new BufferedReader(new InputStreamReader(in));
|
||||
inRead = new BufferedReader(new InputStreamReader(in));
|
||||
}
|
||||
|
||||
public final int readUnsignedShort() throws IOException{
|
||||
return (in.read()&0xff) | ((in.read()&0xff) << 8);
|
||||
public int read() throws IOException {
|
||||
return in.read();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(byte[] buf) throws IOException {
|
||||
return in.read(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(byte[] buf, int off, int len) throws IOException {
|
||||
return in.read(buf, off, len);
|
||||
}
|
||||
|
||||
public int readUnsignedShort() throws IOException {
|
||||
return (in.read() & 0xff) | ((in.read() & 0xff) << 8);
|
||||
}
|
||||
|
||||
/**
|
||||
* read an unsigned int as a long
|
||||
*/
|
||||
public final long readUInt() throws IOException{
|
||||
return ((in.read()&0xff) |
|
||||
((in.read()&0xff) << 8) |
|
||||
((in.read()&0xff) << 16) |
|
||||
(((long)(in.read()&0xff)) << 24)
|
||||
);
|
||||
public long readUInt() throws IOException {
|
||||
return ((in.read() & 0xff)
|
||||
| ((in.read() & 0xff) << 8)
|
||||
| ((in.read() & 0xff) << 16)
|
||||
| (((long) (in.read() & 0xff)) << 24));
|
||||
}
|
||||
|
||||
public final boolean readBoolean() throws IOException{
|
||||
return (in.read()!=0);
|
||||
public boolean readBoolean() throws IOException {
|
||||
return (in.read() != 0);
|
||||
}
|
||||
|
||||
public final byte readByte() throws IOException{
|
||||
public byte readByte() throws IOException {
|
||||
return (byte) in.read();
|
||||
}
|
||||
|
||||
public final int readUnsignedByte() throws IOException{
|
||||
public int readUnsignedByte() throws IOException {
|
||||
return in.read();
|
||||
}
|
||||
|
||||
public final short readShort() throws IOException{
|
||||
public short readShort() throws IOException {
|
||||
return (short) this.readUnsignedShort();
|
||||
}
|
||||
|
||||
public final char readChar() throws IOException{
|
||||
public char readChar() throws IOException {
|
||||
return (char) this.readUnsignedShort();
|
||||
}
|
||||
public final int readInt() throws IOException{
|
||||
return (
|
||||
(in.read()&0xff) |
|
||||
((in.read()&0xff) << 8) |
|
||||
((in.read()&0xff) << 16) |
|
||||
((in.read()&0xff) << 24)
|
||||
);
|
||||
|
||||
public int readInt() throws IOException {
|
||||
return ((in.read() & 0xff)
|
||||
| ((in.read() & 0xff) << 8)
|
||||
| ((in.read() & 0xff) << 16)
|
||||
| ((in.read() & 0xff) << 24));
|
||||
}
|
||||
|
||||
public final long readLong() throws IOException{
|
||||
return (
|
||||
(in.read()&0xff) |
|
||||
((long)(in.read()&0xff) << 8) |
|
||||
((long)(in.read()&0xff) << 16) |
|
||||
((long)(in.read()&0xff) << 24) |
|
||||
((long)(in.read()&0xff) << 32) |
|
||||
((long)(in.read()&0xff) << 40) |
|
||||
((long)(in.read()&0xff) << 48) |
|
||||
((long)(in.read()&0xff) << 56)
|
||||
);
|
||||
public long readLong() throws IOException {
|
||||
return ((in.read() & 0xff)
|
||||
| ((long) (in.read() & 0xff) << 8)
|
||||
| ((long) (in.read() & 0xff) << 16)
|
||||
| ((long) (in.read() & 0xff) << 24)
|
||||
| ((long) (in.read() & 0xff) << 32)
|
||||
| ((long) (in.read() & 0xff) << 40)
|
||||
| ((long) (in.read() & 0xff) << 48)
|
||||
| ((long) (in.read() & 0xff) << 56));
|
||||
}
|
||||
|
||||
public final float readFloat() throws IOException{
|
||||
public float readFloat() throws IOException {
|
||||
return Float.intBitsToFloat(readInt());
|
||||
}
|
||||
|
||||
public final double readDouble() throws IOException{
|
||||
public double readDouble() throws IOException {
|
||||
return Double.longBitsToDouble(readLong());
|
||||
}
|
||||
|
||||
public final void readFully(byte b[]) throws IOException{
|
||||
public void readFully(byte b[]) throws IOException {
|
||||
in.read(b, 0, b.length);
|
||||
}
|
||||
|
||||
public final void readFully(byte b[], int off, int len) throws IOException{
|
||||
public void readFully(byte b[], int off, int len) throws IOException {
|
||||
in.read(b, off, len);
|
||||
}
|
||||
|
||||
public final int skipBytes(int n) throws IOException{
|
||||
public int skipBytes(int n) throws IOException {
|
||||
return (int) in.skip(n);
|
||||
}
|
||||
|
||||
public final String readLine() throws IOException{
|
||||
public String readLine() throws IOException {
|
||||
return inRead.readLine();
|
||||
}
|
||||
|
||||
public final String readUTF() throws IOException{
|
||||
public String readUTF() throws IOException {
|
||||
throw new IOException("Unsupported operation");
|
||||
}
|
||||
|
||||
public final void close() throws IOException{
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
in.close();
|
||||
}
|
||||
|
||||
public final int available() throws IOException{
|
||||
@Override
|
||||
public int available() throws IOException {
|
||||
return in.available();
|
||||
}
|
||||
}
|
@ -841,7 +841,7 @@ public class LwjglAudioRenderer implements AudioRenderer, Runnable {
|
||||
// allocate channel to this source
|
||||
int index = newChannel();
|
||||
if (index == -1) {
|
||||
logger.log(Level.WARNING, "No channel available to play " + src);
|
||||
logger.log(Level.WARNING, "No channel available to play {0}", src);
|
||||
return;
|
||||
}
|
||||
clearChannel(index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user