Re: AudioInputStream does not work properly
Right, that was my question. I thought this was obvious, I'm sorry if it
was not.
Well, I do can compile the code, because it is a class method. I could
post the whole class, it's not that big.
Well, I need the data in an integer buffer to fft it and to display the
data oscilloscope-like.
So here's the whole class:
package test;
import java.io.File;
import java.io.InputStream;
import java.io.IOException;
import javax.sound.sampled.*;
import javax.sound.sampled.AudioFormat.Encoding;
import javax.sound.sampled.spi.AudioFileReader;
import javax.sound.sampled.spi.FormatConversionProvider;
public class WaveFile {
private File f;
public WaveFile(String fileName) {
this(new File(fileName));
}
public WaveFile(File f) {
this.f = f;
}
public AudioInputStream getStream() throws
UnsupportedAudioFileException, IOException {
return AudioSystem.getAudioInputStream(f);
}
public int[] getIntBuffer() throws UnsupportedAudioFileException,
IOException {
AudioInputStream stream = getStream();
int[] buffer = null;
try {
AudioFormat tmpFormat = new AudioFormat(Encoding.PCM_SIGNED,
stream.getFormat().getSampleRate(),
stream.getFormat().getSampleSizeInBits(),
1,
stream.getFormat().getFrameSize(),
stream.getFormat().getSampleRate(),
false);
AudioInputStream tmpStream =
AudioSystem.getAudioInputStream(
tmpFormat, stream);
byte[] buf = new byte[tmpFormat.getFrameSize()];
byte bla1=-1, bla2=3;
System.out.println(bla1 | bla2<<8);
System.out.println(bla1<<8 | bla2);
buffer = new int[(int) tmpStream.getFrameLength()];
if (tmpFormat.getFrameSize() > 1) {
for (int i = 0; i < buffer.length; i++) {
tmpStream.read(buf);
buffer[i] = (int) (buf[0]) | (int) (buf[1]) << 8;
}
} else {
for (int i = 0; i < buffer.length; i++) {
tmpStream.read(buf);
buffer[i] = (int) (buf[0]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
}