微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AudioSystem 成功播放 Clip,但只有一次 - LineUnavailableException

如何解决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 举报,一经查实,本站将立刻删除。