Play WAV file backward
I'm making Braid in Java. If you rewind the time, the sound plays backward.
How to play a WAV file backwards? Maybe with a stream with something like previous()
?
On the site of Braid can you see what I mean.
Update: Solved! See my own post.
Solution 1:
YEEEEEEESSSSS!!!!!!!!
I solved it by myself (14 years old!!)
I've written this class:
import java.io.IOException;
import javax.sound.sampled.AudioInputStream;
/**
*
* @author Martijn
*/
public class FrameBuffer {
private byte[][] frames;
private int frameSize;
public FrameBuffer(AudioInputStream stream) throws IOException {
readFrames(stream);
}
public byte[] getFrame(int i) {
return frames[i];
}
public int numberFrames()
{
return frames.length;
}
public int frameSize()
{
return frameSize;
}
private void readFrames(AudioInputStream stream) throws IOException {
frameSize = stream.getFormat().getFrameSize();
frames = new byte[stream.available() / frameSize][frameSize];
int i = 0;
for (; i < frames.length; i++)
{
byte[] frame = new byte[frameSize];
int numBytes = stream.read(frame, 0, frameSize);
if (numBytes == -1)
{
break;
}
frames[i] = frame;
}
System.out.println("FrameSize = " + frameSize);
System.out.println("Number frames = " + frames.length);
System.out.println("Number frames read = " + i);
}
}
And then:
FrameBuffer frameStream = new FrameBuffer(austream); //austream is the audiostream
int frame = frameStream.numberFrames() - 1;
while (frame >= 0) {
auline.write(frameStream.getFrame(frame), 0, frameStream.frameSize());
frame--;
}
Solution 2:
If the WAV contains PCM, reverse the order of the PCM samples. If it contains some other format it can be a lot more complex; probably easiest to just convert it to PCM first.
For more information on the WAV format, see this site.
Solution 3:
Use Windows Sound Recorder (in Start --> Programs --> Accessories --> Entertainment).
It has a feature (Effects (menu) --> Reverse) to reverse a .WAV file. You could save the reversed file with a different name, and then open the appropriate one in your program.