2

我正在用 Java 创建这个程序,它导入 X 个音频文件并将它们混合到 1 个音频文件中。

例子:

导入:“Audio1.wav”、“Audio2.wav”。
混合它们。
导出:“Result.wav”

到目前为止,我有导入和导出方法,我的问题是将文件混合到 1 个文件中。

编辑: 一些代码。

private static File openDialog(){
    JFileChooser open = new JFileChooser();
    int returnVal = open.showOpenDialog(open);
    if (returnVal == JFileChooser.APPROVE_OPTION){
        return open.getSelectedFile();
    }
    return open.getSelectedFile();
}
private static File saveDialog(){
    JFileChooser save = new JFileChooser();
    FileFilter filter = new FileNameExtensionFilter("Audio files", ".wav");
    save.setFileFilter(filter);
    //save.addChoosableFileFilter(new AudioFilter());
    int returnVal = save.showSaveDialog(save);
    if (returnVal == JFileChooser.APPROVE_OPTION){
        return save.getSelectedFile();
    }
    return save.getSelectedFile();
}

private static List<File> importFile(File file){
    files.add(file);
    audioElements();
    return files;
}

这就是我导入文件并保存结果的方式。

4

1 回答 1

3

混合两个音频流可以像取样本总和一样简单,即

result[i] = audio1[i] + audio2[i];

这是假设音频以相同的样本大小和频率在 LPCM 中编码。如果音频不是 LPCM(如 µ-law 或 A-law),您需要一个将非线性编码考虑在内的公式。如果样本大小不同,则必须转换为相同大小。如果采样频率不同,则必须重新采样。

于 2012-01-31T13:05:48.077 回答