2009-08-12 16 views
20

Sto realizzando Braid in Java. Se si riavvolge l'ora, il suono viene riprodotto all'indietro. Come riprodurre un file WAV all'indietro? Forse con un flusso con qualcosa come previous()? Sul sito di Braid puoi vedere cosa intendo.Riproduci file WAV indietro

Aggiornamento: Risolto! Vedi il mio post.

+3

+1 perché amo Braid :-) – ChssPly76

+2

+1 per i tuoi punti persi persi :-) –

+0

grazie. questa taglia era un errore –

risposta

13

YEEEEEEESSSSS !!!!!!!!

ho risolto da solo (14 anni !!)
ho scritto questa classe:

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); 
    } 
} 

E poi:

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--; 
} 
+0

@Martijn Courteaux great :) – ant

+0

@Martijn Puoi dire cosa è auline in questa linea ... "auline.write (frameStream.getFrame (frame), 0, frameStream.frameSize());" – Waqas

+1

È l'audiocanale della scheda audio. È un'istanza di 'SourceDataLine'. Dai un'occhiata a questo esempio: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml –

2

Se il WAV contiene PCM, invertire l'ordine dei campioni PCM. Se contiene qualche altro formato, può essere molto più complesso; probabilmente è più semplice convertirlo prima in PCM.

Per ulteriori informazioni sul formato WAV, vedere this site.

+0

Grazie per la rapida risposta. Ma non so come farlo con i PCM. Forse puoi scrivere un esempio o un sito dove posso trovare alcune informazioni? –

+1

Ho aggiunto un collegamento a una descrizione del formato WAV; se hai problemi, fai domande specifiche sulle parti che hai difficoltà a capire. – bdonlan

+0

Grazie proverò qualcosa. E un sito fantastico. –

2

Utilizzare Windows Sound Recorder (in Start -> Programmi -> Accessori -> Intrattenimento).

Ha una funzione (Effetti (menu) -> Indietro) per invertire un file .WAV. È possibile salvare il file invertito con un nome diverso e quindi aprire quello appropriato nel programma.

+0

sono su molti file audio (+50) per invertirli tutti. Ho pensato già, ma ... –