package org.jcodec.codecs.wav;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import org.jcodec.algo.DataConvert;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* Reads integer samples from the wav file
*
* @author The JCodec project
*/
public class WavInput {
private InputStream is;
private WavHeader header;
private byte[] prevBuf;
public WavInput(File file) throws IOException {
is = new BufferedInputStream(new FileInputStream(file));
header = WavHeader.read(is);
}
public int[] read(int samples) throws IOException {
int bufLen = samples * (header.fmt.bitsPerSample >> 3);
if (prevBuf == null || bufLen != prevBuf.length) {
prevBuf = new byte[bufLen];
}
int read = is.read(prevBuf);
if (read == -1)
return null;
int[] conv = DataConvert.fromByte(prevBuf, header.fmt.bitsPerSample, false);
return read == bufLen ? conv : Arrays.copyOf(conv, read / (header.fmt.bitsPerSample >> 3));
}
public void close() throws IOException {
is.close();
}
public WavHeader getHeader() {
return header;
}
}