gpt4 book ai didi

java - 在 Java 中播放声音一段时间后停止工作

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:33 24 4
gpt4 key购买 nike

我已经实现了一个简单的 Java 声音播放器 (.wav),它运行良好,只是在播放 50-60 个声音后它就停止工作了。

代码类似于 Playing .mp3 and .wav in Java? ,但无论如何我都会在这里发布我的:

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class NewWavPlayer {
private URL url;
private AudioInputStream audio;

public NewWavPlayer(URL url) {
this.url = url;
}

public void play() {
try
{
InputStream audioSrc = url.openStream();
InputStream bufferedIn = new BufferedInputStream(audioSrc);
audio = AudioSystem.getAudioInputStream(bufferedIn);
Clip clip = AudioSystem.getClip();
clip.open(audio);
clip.start();
} catch(Exception e) {
System.err.println(e);
}
}
}

一段时间后我得到的错误是:

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.

javax.sound.sampled.LineUnavailableException: line with format PCM_UNSIGNED 22050.0 Hz, 8 bit, mono, 1 bytes/frame,  not supported.

但这没有意义,因为之前播放过相同的声音(或其他已经正确播放的声音)。我在 Linux Ubuntu 15.04 上运行它,其他用户在其他 SO 上也经历过同样的情况。

我尝试用线程重新实现它,但遇到了同样的错误。我想知道下一步应该采取哪些步骤。

最佳答案

我看到的一件事是您没有关闭您的输入流。您可能已经用完了句柄。在finally子句中关闭输入流,即

public void play() {
InputStream audioSrc = null;
InputStream bufferedIn = null;
try {
audioSrc = url.openStream();
bufferedIn = new BufferedInputStream(audioSrc);
audio = AudioSystem.getAudioInputStream(bufferedIn);
Clip clip = AudioSystem.getClip();
clip.open(audio);
clip.start();
} catch(Exception e) {
System.err.println(e);
} finally {
if (bufferedIn != null) {
bufferedIn.close();
}
if (audioSrc != null) {
audioSrc.close();
}
}

如果您的操作系统已用完句柄,您可能必须重新启动系统。上述内容将确保不再发生这种情况。

希望这有帮助!

关于java - 在 Java 中播放声音一段时间后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33819731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com