Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向后播放WAV文件_Java_Stream_Audio - Fatal编程技术网

Java 向后播放WAV文件

Java 向后播放WAV文件,java,stream,audio,Java,Stream,Audio,我在用爪哇制作。如果你倒带时间,声音会向后播放。 如何向后播放WAV文件?可能是使用类似于previous()的流? 在Braid网站上你能明白我的意思吗 更新:解决!请参阅我自己的帖子。如果WAV包含PCM,请颠倒PCM样本的顺序。如果它包含其他格式,它可能会复杂得多;可能最简单的方法是先将其转换为PCM 有关WAV格式的详细信息,请参阅。使用Windows录音机(在开始-->程序-->附件-->娱乐中) 它具有反转.WAV文件的功能(效果(菜单)->反转)。您可以用不同的名称保存反转后的文件

我在用爪哇制作。如果你倒带时间,声音会向后播放。 如何向后播放WAV文件?可能是使用类似于
previous()
的流? 在Braid网站上你能明白我的意思吗


更新:解决!请参阅我自己的帖子。

如果WAV包含PCM,请颠倒PCM样本的顺序。如果它包含其他格式,它可能会复杂得多;可能最简单的方法是先将其转换为PCM


有关WAV格式的详细信息,请参阅。

使用Windows录音机(在开始-->程序-->附件-->娱乐中)

它具有反转.WAV文件的功能(效果(菜单)->反转)。您可以用不同的名称保存反转后的文件,然后在程序中打开相应的文件。

Yeeessss

我自己解决了(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);
    }
}

它们需要许多声音文件(+50)才能全部反转。我想一切都准备好了,但是…谢谢你的快速回复。但我不知道如何使用PCM。也许你可以写一个例子或一个网站,在那里我可以找到一些信息;如果你有问题,问一些关于你理解困难的部分的具体问题。谢谢,我会试试看。这是一个非常棒的网站。为您丢失的代表积分+1:-)谢谢。这个赏金是个错误如果它被解决了,不要把它放在那里,而是接受一个答案。@Martijn你能告诉我auline在这一行是什么吗。。。“auline.write(frameStream.getFrame(frame),0,frameStream.frameSize());”它是声卡的音频通道。它是一个
SourceDataLine
实例。看看这个例子:@MartijnCourteaux回答得很好。在第二个例子中,当循环完成时,你能告诉我“for(int i=0;i@chiragsaga:
int i
之间的区别吗?就是这样。我这样做是因为我想知道我读了多少帧。请查看println。
 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--;
 }