2012-01-31 114 views
1

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

实施例:

导入: “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; 
} 

这就是我如何导入文件并保存结果。

+0

很酷。你有问题吗?任何代码都显示你已经尝试了什么? – 2012-01-31 13:05:20

+0

我的问题是如何混合'AudioInputStream'文件。 – rec 2012-01-31 16:04:55

回答

2

混合两个音频流可以是作为取样品的总和一样简单,即

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

这假设音频被在LPCM编码有相同的样本大小和频率。如果音频不是LPCM(如μ律或A律),则需要考虑非线性编码的公式。如果样本大小不同,您必须转换为相同的大小。如果采样频率不同,则必须重新采样。

+0

+1 @Joni Salonen另外的建议是使用乘法和除法来控制混合的比例,例如,在你的例子中,这将是50-50,如果不是将结果除以2,那么你需要提升空间。 – therobyouknow 2012-01-31 13:35:07

+0

对不起,我不明白它是如何工作的。 我想混合例如: 'AudioInputStream clip1 = AudioSystem.getAudioInputStream(files.get(0)); AudioInputStream clip2 = AudioSystem.getAudioInputStream(files.get(1));' – rec 2012-01-31 15:36:11

+0

我也面临同样的问题。 http://stackoverflow.com/questions/9908724/how-to-mix-two-pcm-streams-into-single-mp4-file – 2012-03-29 06:35:15