2013-03-14 53 views
5

是否有可能重新取樣.wav文件從22050 khz到44100 khz在Java中沒有使用任何第三方庫?Java resample .wav聲音文件沒有第三方庫

也許使用AudioInputStream

編輯:既然看起來沒有第三方庫,它很容易做到,第三方庫確實存在以完成重採樣?

回答

0

不......你可以嘗試用新的樣本來編寫新的wav文件,這些新的樣本是以相鄰樣本的平均值計算的。原油,但也許這對你的目的就足夠了。

如果您接受第三方庫,JSSRC似乎是一個不錯的選擇。但是,您需要自己構建.jar。

1

無論您是否希望提高音頻質量,無論是哪種方式,您都需要使用原始樣本創建一個新的.wav文件。如果你想保持原始文件的質量,你可以寫每個樣本兩次。

然而,有一個相當簡單的「提高」質量算法:讀取三個連續的樣本,現在讓我們將它們命名爲a,b和c。設z是a和b之間的額外輸出樣本。

設z =(a + b)/ 2。現在用(a + 2b + c)/ 4代替b。記住用b的舊值來計算z!現在只需將a,z和新的b寫入輸出。

再讀一個樣本,我們稱之爲d。使用(b + c)/ 2計算下一個額外輸出樣本y。使用b的舊值。重新計算c,讓它等於(b + 2c + d)/ 4。將b的新值和y寫入輸出。

你可以計算出猜測,閱讀並重復!EOF。請記住使用舊值計算,但輸出新值。

4

既然你現在正在接受第三方庫,這裏是我的建議

有很多第三方庫,可以讓你重新對音頻wav文件,對我來說,在我的情況(我最近用過)最友好的第三方庫是Jave 所有你需要做的就是包括jar。沒有比較繁瑣像其他圖書館

安裝java的有一個名爲

public void setSamplingRate(java.lang.Integer bitRate) 

方法,它允許你重新取樣與給定的比特率音頻。

1

它可能,快速和骯髒。只需要一些diging的javax.sound API中:

import java.io.File; 

import javax.sound.sampled.AudioFileFormat.Type; 
import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import com.sun.media.sound.WaveFileReader; 
import com.sun.media.sound.WaveFileWriter; 

public class Resample { 

public static void main(String[] argv) { 
    try { 
     File wavFile = new File("C:\\Temp\\test.wav"); 
     File dstFile = new File("C:\\Temp\\test_half.wav"); 
     WaveFileReader reader = new WaveFileReader(); 
     AudioInputStream audioIn = reader.getAudioInputStream(wavFile); 
     AudioFormat srcFormat = audioIn.getFormat(); 

     AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(), 
       srcFormat.getSampleRate()/2, 
       srcFormat.getSampleSizeInBits(), 
       srcFormat.getChannels(), 
       srcFormat.getFrameSize(), 
       srcFormat.getFrameRate()/2, 
       srcFormat.isBigEndian()); 

     AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn); 

     WaveFileWriter writer = new WaveFileWriter(); 
     writer.write(convertedIn, Type.WAVE, dstFile); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 

} 

這個簡短砍死例如將創建與源中指定的文件減半採樣率的副本。我認爲它很自我解釋。

+3

包com.sun不是官方Java API的一部分。這個程序不保證能夠跨越各種平臺和版本。請參閱http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html – 2013-03-26 22:14:41

0

是的,使用AudioInputstream的作品。你可以在這裏捕捉一些示例代碼:

http://www.jsresources.org/examples/SampleRateConverter.html

不要擔心Tritonius,信息不再是有關對Java的新版本。只要您堅持使用* .wav文件,您就可以使用本地Java進行重新採樣,無需任何第三方庫。

此外,Java中的大多數音頻相關問題都由本FAQ解答。它可能不是最新的,但大部分信息仍然相關。

http://www.jsresources.org/faq.html