在java中,是否可以不使用任何第三方库将.wav
文件从22050 khz重新采样为44100 khz?
也许可以使用AudioInputStream
?
编辑:由于似乎没有第三方库很容易实现,那么存在什么第三方库可以进行重采样呢?
既然你现在接受第三方库,这是我的建议
有很多第三方库可以让您对音频wav文件进行重新采样。 对我来说,在我的情况下(我最近使用过),最易于使用的第三方库是Jave,您只需包含jar文件即可,无需像其他库那样繁琐安装。
Jave有一个名为
public void setSamplingRate(java.lang.Integer bitRate)
这个功能可以让你以指定的比特率重新采样音频。
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 audioIn = AudioSystem.getAudioInputStream(wavFile)
来避免引用WaveFileReader。我不确定是否有WaveFileWriter的等效物。 - Adam不行...你可以尝试使用相邻样本的平均值计算出的新样本来编写新的wav文件。虽然粗糙,但也许对你的目的足够了。
如果你接受第三方库,JSSRC似乎是一个不错的选择。不过,你需要自己构建.jar文件。
是的,使用AudioInputStream可以工作。您可以在此处获取一些示例代码:
http://www.jsresources.org/examples/SampleRateConverter.html
不用担心Tritonius,那些信息已经不适用于新版本的Java了。只要使用*.wav文件,你可以使用本地Java进行重新采样,而无需任何第三方库。
此外,大多数与Java相关的音频问题都可以在这个FAQ中找到答案。虽然它可能不是最新的,但大部分信息仍然适用。