提高java中声音文件的播放速度

我正在寻找有关如何使用Java及其声音API提高声音文件播放速度的信息。

我目前正在使用剪辑和AudioInputStream来播放文件,但如果这意味着我可以提高播放速度,我将很乐意改变它。

我通过使用线性插值来做到这一点。 当您逐步增加样本时,请使用小数距离创建要流式传输的值。

例如,如果您降落在1.25(在值为10的样本和值为30的样本之间),则输出值为15。

以原始速度的整数(2,3,4 ..)进行回放的粗略方式是跳过原始输入流的每个这么多样本。 EG对于双倍速度,跳过两个中的一个,对于三倍速度,跳过3个中的2个。

AcceleratePlayback.java

 import javax.swing.JOptionPane; import javax.sound.sampled.*; import java.net.URL; import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.util.Date; class AcceleratePlayback { public static void main(String[] args) throws Exception { int playBackSpeed = 1; if (args.length>0) { try { playBackSpeed = Integer.parseInt(args[0]); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } int skip = playBackSpeed-1; System.out.println("Playback Rate: " + playBackSpeed); URL url = new URL("http://pscode.org/media/leftright.wav"); System.out.println("URL: " + url); AudioInputStream ais = AudioSystem.getAudioInputStream(url); AudioFormat af = ais.getFormat(); int frameSize = af.getFrameSize(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[2^16]; int read = 1; while( read>-1 ) { read = ais.read(b); if (read>0) { baos.write(b, 0, read); } } System.out.println("End entire: \t" + new Date()); byte[] b1 = baos.toByteArray(); byte[] b2 = new byte[b1.length/playBackSpeed]; for (int ii=0; ii 

输入/输出示例

 prompt> java AcceleratePlayback Playback Rate: 1 URL: http://pscode.org/media/leftright.wav End entire: Mon Apr 25 20:54:55 EST 2011 End sub-sample: Mon Apr 25 20:54:55 EST 2011 prompt> java AcceleratePlayback 2 Playback Rate: 2 URL: http://pscode.org/media/leftright.wav End entire: Mon Apr 25 20:55:20 EST 2011 End sub-sample: Mon Apr 25 20:55:20 EST 2011 prompt> java AcceleratePlayback 3 Playback Rate: 3 URL: http://pscode.org/media/leftright.wav End entire: Mon Apr 25 20:55:36 EST 2011 End sub-sample: Mon Apr 25 20:55:36 EST 2011 prompt>