Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Play WAV file backward

Tags:

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.

like image 280
Martijn Courteaux Avatar asked Aug 12 '09 17:08

Martijn Courteaux


1 Answers

I solved it by myself

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--;  } 
like image 51
Martijn Courteaux Avatar answered Nov 07 '22 06:11

Martijn Courteaux