是否可以在不使用任何第三方库的情况下在java中将.wav
文件从22050 khz重新采样到44100 khz?
也许使用AudioInputStream
?
编辑:因为看起来如果没有第三方库,就不可能轻松实现重新采样的第三方库吗?
答案 0 :(得分:4)
由于您现在接受第三方图书馆,这是我的建议
有很多第三方库允许您重新采样音频wav文件,对我而言,在我的情况下(我最近使用过)最友好的第三方库是Jave 你需要做的就是包括罐子。不像其他库那样繁琐的安装
Jave有一个名为
的方法public void setSamplingRate(java.lang.Integer bitRate)
允许您使用给定的比特率重新采样音频。
答案 1 :(得分:3)
它可能,快速和肮脏。只需要在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);
}
}
}
这个简短的黑客示例将创建一个副本,其中源中指定的文件的采样率减半。我认为它非常自我解释。
答案 2 :(得分: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。请记住使用旧值进行计算,但输出新值。
答案 3 :(得分:0)
否...您可以尝试编写新的wav文件,其中新的样本按相邻样本的平均值计算。原油,但也许就足够了。
如果您接受第三方库,JSSRC似乎是一个不错的选择。但是,你需要自己构建.jar。
答案 4 :(得分:0)
是的,使用AudioInputstream有效。你可以在这里找到一些示例代码:
http://www.jsresources.org/examples/SampleRateConverter.html
不要担心Tritonius,该信息不再与较新版本的Java相关。只要您坚持使用* .wav文件,就可以使用本机Java重新采样,无需任何第三方库。
此外,本常见问题解答回答了Java中与大多数音频相关的问题。它可能不是最新的,但大多数信息仍然相关。