Java resample .wav声音文件没有第三方库

问题描述:

是否有可能重新取样.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); 
    } 
} 

} 

这个简短砍死例如将创建与源中指定的文件减半采样率的副本。我认为它很自我解释。

+3

包com.sun不是官方Java API的一部分。这个程序不保证能够跨越各种平台和版本。请参阅http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html – 2013-03-26 22:14:41

是的,使用AudioInputstream的作品。你可以在这里捕捉一些示例代码:

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

不要担心Tritonius,信息不再是有关对Java的新版本。只要您坚持使用* .wav文件,您就可以使用本地Java进行重新采样,无需任何第三方库。

此外,Java中的大多数音频相关问题都由本FAQ解答。它可能不是最新的,但大部分信息仍然相关。

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