2009-08-12 158 views
20

我正在用Java製作Braid。如果您倒退時間,聲音會向後播放。 如何向後播放WAV文件?也許有類似previous()的流? 在Braid網站上,你可以看到我的意思。向後播放WAV文件

更新:解決!看我自己的帖子。

+3

+1 :-) – ChssPly76 2009-08-12 17:30:18

+2

+1對於您丟失的代表點:-) – 2009-09-12 20:51:38

+0

謝謝。這個賞金是一個錯誤 – 2009-09-12 20:58:05

回答

13

YEEEEEEESSSSS !!!!!!!!

我解決了這個問題由我自己(14歲!)
我寫這個類:

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

然後:因爲我愛編織

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偉大:) – ant 2010-04-20 13:47:37

+0

@Martijn你能告訴什麼是在這一行的auline ...「auline.write(frameStream.getFrame(frame),0,frameStream.frameSize ());」 – Waqas 2012-06-28 04:40:30

+1

這是聲卡的音頻聲道。它是一個'SourceDataLine'實例。看看這個例子:http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml – 2012-06-28 15:21:52

2

如果WAV包含PCM,則顛倒PCM樣本的順序。如果它包含一些其他格式,它可能會更復雜;可能最簡單的就是先將它轉換成PCM。請參閱this site

+0

感謝您的快速回復。但我不知道如何用PCM來做到這一點。也許你可以寫一個例子或一個網站,我可以找到一些信息? – 2009-08-12 17:26:19

+1

我添加了一個指向WAV格式描述的鏈接;如果您遇到問題,請提出有關您無法理解的部分的具體問題。 – bdonlan 2009-08-12 17:34:25

+0

謝謝,我會嘗試一些。和一個非常棒的網站。 – 2009-08-12 17:46:50

2

使用Windows錄音機(在開始 - >程序 - >附件 - >娛樂)。

它有一個功能(效果(菜單) - >反轉)來反轉.WAV文件。您可以使用不同的名稱保存反轉的文件,然後在程序中打開相應的文件。

+0

他們對許多聲音文件(+50)進行全部撤消。我認爲allready它,但... – 2009-08-12 17:24:31