如何解决AudioSystem 成功播放 Clip,但只有一次 - LineUnavailableException
我正在使用以下 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
中播放每个剪辑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。