从 Java 加入两个 WAV 文件?

发布于 2024-07-14 18:06:54 字数 252 浏览 10 评论 0原文

在 Java 1.6 中连接两个 WAV 文件的最简单方法是什么? (频率相同,没有什么花哨的。)

(这可能太简单了,但是我的 Google-fu< /a> 今天在这个问题上似乎很弱。)

What's the simplest way to concatenate two WAV files in Java 1.6? (Equal frequency and all, nothing fancy.)

(This is probably sooo simple, but my Google-fu seems weak on this subject today.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

呆头 2024-07-21 18:06:54

这是准系统代码:

import java.io.File;
import java.io.IOException;
import java.io.SequenceInputStream;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class WavAppender {
    public static void main(String[] args) {
        String wavFile1 = "D:\\wav1.wav";
        String wavFile2 = "D:\\wav2.wav";

        try {
            AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
            AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));

            AudioInputStream appendedFiles = 
                            new AudioInputStream(
                                new SequenceInputStream(clip1, clip2),     
                                clip1.getFormat(), 
                                clip1.getFrameLength() + clip2.getFrameLength());

            AudioSystem.write(appendedFiles, 
                            AudioFileFormat.Type.WAVE, 
                            new File("D:\\wavAppended.wav"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Here is the barebones code:

import java.io.File;
import java.io.IOException;
import java.io.SequenceInputStream;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class WavAppender {
    public static void main(String[] args) {
        String wavFile1 = "D:\\wav1.wav";
        String wavFile2 = "D:\\wav2.wav";

        try {
            AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
            AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));

            AudioInputStream appendedFiles = 
                            new AudioInputStream(
                                new SequenceInputStream(clip1, clip2),     
                                clip1.getFormat(), 
                                clip1.getFrameLength() + clip2.getFrameLength());

            AudioSystem.write(appendedFiles, 
                            AudioFileFormat.Type.WAVE, 
                            new File("D:\\wavAppended.wav"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
冷了相思 2024-07-21 18:06:54

WAV 标头应该不会太难解析,如果我阅读 此标头说明 正确地,您可以从第二个 WAV 中删除前 44 个字节,然后将这些字节简单地附加到第一个 WAV 中。 之后,您当然应该更改第一个 WAV 的一些标头字段,以便它们包含正确的新长度。

The WAV header should be not be too hard to parse, and if I read this header description correctly, you can just strip the first 44 bytes from the second WAV and simply append the bytes to the first one. After that, you should of course change some of the header fields of the first WAV so that they contain the correct new length.

愁以何悠 2024-07-21 18:06:54

我通过 < 上的“代码示例和应用程序”链接找到了 (AudioConcat) a href="http://java.sun.com/products/java-media/sound/" rel="nofollow noreferrer">此处。

I found this (AudioConcat) via the "Code Samples & Apps" link on here.

丶情人眼里出诗心の 2024-07-21 18:06:54

如果两个 WAV 文件的波形头格式不完全相同,您就会遇到挑战。

如果两个文件上的波形格式不相同,您将必须找到一种方法来对它们进行变形以使它们匹配。

这可能涉及 MP3 转码或其他类型的转码(如果其中之一是使用 MP3 编解码器编码的)。

Your challenge though occurs if the two WAV files don't have the exact same format in the wave header.

If the wave formats on the two files aren't the same, you're going to have to find a way to transmogrify them so they match.

That may involve an MP3 transcode or other kinds of transcoding (if one of them is encoded with an MP3 codec).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文