是否可以.wav
在不使用任何第三方库的情况下在 java 中将文件从 22050 khz 重新采样到 44100 khz?
也许使用AudioInputStream
?
编辑:因为似乎没有第三方库就不容易,所以存在哪些第三方库来完成重采样?
由于您现在接受第三方库,这是我的建议
有很多第三方库可以让你重新采样音频 wav 文件,对我来说,就我而言(我最近使用过),最用户友好的第三方库是Jave ,你需要做的就是包含 jar . 不再像其他库那样繁琐的安装
Jave 有一个名为的方法
public void setSamplingRate(java.lang.Integer bitRate)
这允许您使用给定的比特率重新采样音频。
它可能,快速和肮脏。只需要在 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);
}
}
}
这个简短的黑客示例将创建一个副本,其中源中指定的文件的采样率减半。我认为它非常不言自明。
无论您是否希望提高音频质量,无论哪种方式,您都需要使用原始文件的样本创建一个新的 .wav 文件。如果要保持原始文件的质量,可以将每个样本写入两次。
然而,有一个相当简单的算法可以“提高”质量:读取三个连续的样本,我们现在将它们命名为 a、b 和 c。令 z 为 a 和 b 之间的额外输出样本。
令 z=(a+b)/2。现在将 b 替换为 (a + 2b + c)/4。请记住使用 b 的旧值计算 z!现在只将 a、z 和新的 b 写入输出。
再读一个样本,我们称它为 d。使用 (b+c)/2 计算下一个额外的输出样本 y。使用 b 的旧值。重新计算 c,使其等于 (b + 2c + d)/4。将 b 的新值和 y 写入输出。
您可以在 !EOF 中找出猜测、阅读和重复。请记住使用旧值进行计算,但要输出新值。
不...您可以尝试编写新的 wav 文件,其中的新样本计算为相邻样本的平均值。粗略,但也许它足以满足您的目的。
如果您接受第三方库,JSSRC似乎是一个不错的选择。但是,您需要自己构建 .jar。
是的,使用 AudioInputstream 有效。您可以在此处捕获一些示例代码:
http://www.jsresources.org/examples/SampleRateConverter.html
不用担心 Tritonius,该信息不再与 Java 的较新版本相关。只要您坚持使用 *.wav 文件,您就可以使用本机 Java 重新采样,而无需任何第三方库。
此外,此常见问题解答回答了 Java 中大多数与音频相关的问题。它可能不是最新的,但大多数信息仍然是相关的。