2009-08-12 110 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