java sound API可以进行哪种数据格式转换?

时间:2012-03-20 09:34:15

标签: java javasound

我使用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用户的使命召唤。

1 个答案:

答案 0 :(得分:2)

对JavaSound转换能力的快速调查表明,它主要是未实现的。

OTOH请注意,有一种方法可以转换:

  • 44100采样率至11025.忽略4个样本中的3个。
  • 16位采样到8位。忽略“低”'字节。
  • 立体声到单声道。平均左边和左边的值。右通道。

不完美,但我认为声音仍然很容易识别。