打开相同的wav文件给我一个javax.sound.sampled.LineUnavailableException

时间:2013-03-27 16:55:11

标签: java javasound clip

我有两个相似的wave(类似格式),我用这段代码预加载它们

Clip click1;
Clip click2;

File soundFile = new File("click1.wav");
AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);
DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
click1 = (Clip) AudioSystem.getLine(info);
click1.open(sound);

soundFile = new File("click2.wav");
sound = AudioSystem.getAudioInputStream(soundFile);
info = new DataLine.Info(Clip.class, sound.getFormat());
click2 = (Clip) AudioSystem.getLine(info);
click2.open(sound);

第一个文件是加载,但第二个文件抛出异常:

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
    at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:492)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1278)
    at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:107)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1059)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1149)

我试过在click2的剪辑上设置click1.wav,我也有同样的错误。

我有Ubuntu 11.04,这是java -version

的结果
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode

修改

这是DataLine.Info

的System.out.println的结果

click1 = interface Clip支持格式PCM_SIGNED 11025.0 Hz,16位,单声道,2字节/帧,little-endian

click2 = interface Clip支持格式PCM_SIGNED 11025.0 Hz,16位,单声道,2字节/帧,小端

1 个答案:

答案 0 :(得分:0)

两个令人烦恼的想法:

1)切换文件。错误是否切换到第一次加载?如果没有,那么问题可能是由于下一个建议。

2)不要试图重复使用'info'或'sound',制作新变量。

错误发生在哪一行?我认为Java不允许你重用声音变量。我不清楚原因。我只记得当我尝试重用变量时,在Java允许我这样做之前,我不得不一直回到'soundFile'变量。