2009-08-12 5 views
20

Robię Braid w Javie. Jeśli cofniesz czas, dźwięk będzie odtwarzany wstecz. Jak odtworzyć plik WAV do tyłu? Może ze strumieniem z czymś takim jak previous()? W witrynie Braid można zobaczyć, co mam na myśli.Odtwórz plik WAV do tyłu

Aktualizacja: Rozwiązany! Zobacz mój własny post.

+3

+1 bo kocham Braid :-) – ChssPly76

+2

+1 za utracone punkty rep :-) –

+0

dziękuję. ta nagroda była pomyłką. –

Odpowiedz

13

YEEEEEEESSSSS !!!!!!!!

Rozwiązałem to sam (14 lat !!)
Pisałem tę klasę:

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

, a następnie:

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

+0

@Martijn Czy możesz powiedzieć, co jest auline w tej linii ... "auline.write (frameStream.getFrame (frame), 0, frameStream.frameSize()); " – Waqas

+1

To jest audiochannel do karty dźwiękowej. Jest to instancja 'SourceDataLine'. Spójrz na ten przykład: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml –

2

Jeśli WAV zawiera PCM, odwróć kolejność próbek PCM. Jeśli zawiera jakiś inny format, może być dużo bardziej złożony; Najprawdopodobniej najłatwiej jest po prostu przekonwertować go na PCM.

Aby uzyskać więcej informacji o formacie WAV, patrz this site.

+0

Dzięki za szybką odpowiedź. Ale nie wiem, jak to zrobić z PCM. Może możesz napisać przykład lub stronę, na której mogę znaleźć jakieś informacje? –

+1

Dodałem link do opisu formatu WAV; jeśli masz problemy z zadawaniem konkretnych pytań dotyczących części, które masz problemy ze zrozumieniem. – bdonlan

+0

Dzięki temu spróbuję czegoś. I bardzo wspaniała strona. –

2

Użyj Windows Sound Recorder (w Start -> Programy -> Akcesoria -> Rozrywka).

Posiada funkcję (Efekty (menu) -> Odwróć), aby odwrócić plik .WAV. Możesz zapisać odwrócony plik pod inną nazwą, a następnie otworzyć odpowiednią w swoim programie.

+0

są one dla wielu plików dźwiękowych (+50), aby odwrócić je wszystkie. Myślałem, że już to wszystko, ale ... –