声音输出缓冲区刷新

时间:2012-03-24 05:13:33

标签: java

我有一个通过GlassFish中的java类播放wav文件的jsp。我使用过SourceDataline方法:

start();
drain();
close();

正确播放wav文件。为了停止我使用:

stop();
flush();
close();

但播放继续输出缓冲区内的其余数据。我浏览了www.oracle.com上有关SourceDataline方法的文档。据说flush()将丢弃SourceDataline对象内的数据,但不会丢弃输出缓冲区内的数据。

现在我想从输出缓冲区中清除数据,以便在下次启动时不会重叠声音。 我也搜索了JavaScript,但没有帮助。

1 个答案:

答案 0 :(得分:0)

这主要是在黑暗中拍摄,但可行:TargetDataLine.read的文档说:

  

从数据线的输入缓冲区读取音频数据。 (...)但是,如果在读取请求的数量之前数据行已关闭,停止,排空或刷新,则该方法不再阻塞,而是返回到目前为止读取的字节数。

因此,也许您可​​以尝试访问正在使用的TargetDataLine(可能使用Mixer.getTargetLines)并尝试对它们采取行动(停止,刷新等)。但是,我不确定是否会有这样的副作用(或者即使它可能存在)。

您可以分享有关您的问题的其他信息吗?你提到过jsp,GlassFish和JavaScript,所以我猜你要么使用Applet来播放文件,要么只是使用Java来混合服务器端,但是发送结果文件要由浏览器处理。这是否正确?