我使用javax.sound.sampled
包将较高比特率.wav data format
转换为较低比特率,
import javax.sound.sampled.*;
public class Main {
public static void main(String[] args) throws Exception {
AudioFormat af_src = AudioSystem.getAudioInputStream(new java.io.File("myfile.wav")).getFormat();
System.out.println(af_src.getEncoding() + " " + af_src.getSampleRate());
AudioFormat af_tgt = new AudioFormat(8000, 8, 1, true, false);
System.out.println(AudioSystem.isConversionSupported(af_tgt, af_src));
}
}
下面的输出,
44100 PCM
false
您可以根据自己的经验告诉Sun data format conversion
支持JDK 6中的哪些default implementation
吗?
@EDIT
根据@Andrew Thompson
的建议,我在下面进行了测试,
import javax.sound.sampled.*;
public class Main {
public static void main(String[] args) {
float sourceSampleRate = 44100;
int sourceSampleSizeInBits = 16;
int sourceChannels = 2;
AudioFormat sourceAudioFormat = new AudioFormat(sourceSampleRate, sourceSampleSizeInBits, sourceChannels, true, false);
float targetSampleRate = sourceSampleRate / 4;
int targetSampleSizeInBits = sourceSampleSizeInBits / 2;
int targetChannels = sourceChannels / 2;
AudioFormat targetAudioFormat = new AudioFormat(targetSampleRate, targetSampleSizeInBits, targetChannels, true, false);
System.out.println(AudioSystem.isConversionSupported(targetAudioFormat, sourceAudioFormat));
}
}
输出仍然存在:
false
有什么想法吗?
@EDIT 2
JavaSound在data format conversion
上几乎没有任何内容。如果很难找到第三方插件,那就是API用户的使命召唤。
答案 0 :(得分:2)
对JavaSound转换能力的快速调查表明,它主要是未实现的。
OTOH请注意,有一种方法可以转换:
不完美,但我认为声音仍然很容易识别。