2012-01-31 155 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