是否有可能重新取樣.wav
文件從22050 khz到44100 khz在Java中沒有使用任何第三方庫?Java resample .wav聲音文件沒有第三方庫
也許使用AudioInputStream
?
編輯:既然看起來沒有第三方庫,它很容易做到,第三方庫確實存在以完成重採樣?
是否有可能重新取樣.wav
文件從22050 khz到44100 khz在Java中沒有使用任何第三方庫?Java resample .wav聲音文件沒有第三方庫
也許使用AudioInputStream
?
編輯:既然看起來沒有第三方庫,它很容易做到,第三方庫確實存在以完成重採樣?
不......你可以嘗試用新的樣本來編寫新的wav文件,這些新的樣本是以相鄰樣本的平均值計算的。原油,但也許這對你的目的就足夠了。
如果您接受第三方庫,JSSRC似乎是一個不錯的選擇。但是,您需要自己構建.jar。
無論您是否希望提高音頻質量,無論是哪種方式,您都需要使用原始樣本創建一個新的.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。請記住使用舊值計算,但輸出新值。
既然你現在正在接受第三方庫,這裏是我的建議
有很多第三方庫,可以讓你重新對音頻wav文件,對我來說,在我的情況(我最近用過)最友好的第三方庫是Jave 所有你需要做的就是包括jar。沒有比較繁瑣像其他圖書館
安裝java的有一個名爲
public void setSamplingRate(java.lang.Integer bitRate)
方法,它允許你重新取樣與給定的比特率音頻。
它可能,快速和骯髒。只需要一些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);
}
}
}
這個簡短砍死例如將創建與源中指定的文件減半採樣率的副本。我認爲它很自我解釋。
是的,使用AudioInputstream的作品。你可以在這裏捕捉一些示例代碼:
http://www.jsresources.org/examples/SampleRateConverter.html
不要擔心Tritonius,信息不再是有關對Java的新版本。只要您堅持使用* .wav文件,您就可以使用本地Java進行重新採樣,無需任何第三方庫。
此外,Java中的大多數音頻相關問題都由本FAQ解答。它可能不是最新的,但大部分信息仍然相關。
包com.sun不是官方Java API的一部分。這個程序不保證能夠跨越各種平臺和版本。請參閱http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html – 2013-03-26 22:14:41