2009-08-12 27 views
20

Estoy haciendo Braid en Java. Si rebobina la hora, el sonido se reproduce hacia atrás. ¿Cómo reproducir un archivo WAV al revés? ¿Tal vez con una secuencia con algo como previous()? En el sitio de Braid puedes ver a qué me refiero.Reproducir archivo WAV hacia atrás

Actualización: Resuelto! Ver mi propia publicación.

+3

+1 porque amo trenza :-) – ChssPly76

+2

+1 por sus puntos de representante perdidos :-) –

+0

gracias. esta recompensa fue un error –

Respuesta

13

YEEEEEEESSSSS !!!!!!!!

Lo resuelto por mí mismo (14 años !!)
He escrito esta clase:

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

Y luego:

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 genial :) – ant

+0

@Martijn ¿Puedes decirnos qué es auline en esta línea ... "auline.write (frameStream.getFrame (frame), 0, frameStream.frameSize()); – Waqas

+1

Es el canal de audio de la tarjeta de sonido. Es una instancia de 'SourceDataLine'. Eche un vistazo a este ejemplo: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml –

2

Si el WAV contiene PCM, invierta el orden de las muestras de PCM. Si contiene algún otro formato, puede ser mucho más complejo; probablemente sea más fácil simplemente convertirlo a PCM primero.

Para obtener más información sobre el formato WAV, consulte this site.

+0

Gracias por su rápida respuesta. Pero no sé cómo hacer eso con los PCM. Tal vez puedas escribir un ejemplo o un sitio donde pueda encontrar información. –

+1

Agregué un enlace a una descripción del formato WAV; si tiene problemas, haga preguntas específicas sobre las partes que tiene problemas para entender. – bdonlan

+0

Gracias, intentaré algo. Y un sitio muy bueno –

2

Use Windows Sound Recorder (en Inicio -> Programas -> Accesorios -> Entretenimiento).

Tiene una función (Efectos (menú) -> Reversa) para invertir un archivo .WAV. Puede guardar el archivo invertido con un nombre diferente y luego abrir el apropiado en su programa.

+0

están en muchos archivos de sonido (+50) para invertirlos todos. Pensé ya en ello, pero ... –

Cuestiones relacionadas