问题描述
我正在使用以下 Java 代码在我的 RaspBerry PI 上的 USB 声卡上播放声音:
restore()
它工作得很好 - 但只有一次。当我再次尝试播放声音时,出现异常:
javax.sound.sampled.LineUnavailableException:行格式为 PCM_SIGNED 44100.0 Hz,16 位,单声道,2 字节/帧,不支持小端。
无论我是想重播剪辑还是播放不同的剪辑,都会引发异常。
理想情况下,我希望能够同时播放多个声音,相互重叠。
可能是什么问题?
解决方法
如果要重放Clip
,通常的方法是将帧位置设置回0,然后调用start。
Clip
应该是一个实例变量,您只加载一次,并保存在内存中。
Clip clip;
public void loadClip() {
clip = ...
}
public void play() {
clip.setFramePosition(0);
clip.start();
}
IDK 正是为什么您的代码不会第二次播放。也许其中一条线以某种方式被捆绑,需要释放才能再次使用。通常 AudioInputStreams
在完成后关闭。也许这与抛出异常的内容有关。但我不清楚,因为您似乎正在创建一个全新的实例。
我建议您不要使用 Clip#play()
,而是使用 Clip#loop(int)
。例如:
clip.loop(0); //will play the clip once,you can play it again by calling loop(0) again
clip.loop(1); //will play,and play one more time after the clip ends (loops once)
clip.loop(Clip.LOOP_CONTINOUSLY); //will play forever.
此外,请确保在不同的 Thread
中播放每个剪辑。