我有一个通过GlassFish中的java类播放wav文件的jsp。我使用过SourceDataline方法:
start();
drain();
close();
正确播放wav文件。为了停止我使用:
stop();
flush();
close();
但播放继续输出缓冲区内的其余数据。我浏览了www.oracle.com上有关SourceDataline方法的文档。据说flush()将丢弃SourceDataline对象内的数据,但不会丢弃输出缓冲区内的数据。
现在我想从输出缓冲区中清除数据,以便在下次启动时不会重叠声音。 我也搜索了JavaScript,但没有帮助。
答案 0 :(得分:0)
这主要是在黑暗中拍摄,但可行:TargetDataLine.read
的文档说:
从数据线的输入缓冲区读取音频数据。 (...)但是,如果在读取请求的数量之前数据行已关闭,停止,排空或刷新,则该方法不再阻塞,而是返回到目前为止读取的字节数。
因此,也许您可以尝试访问正在使用的TargetDataLine(可能使用Mixer.getTargetLines
)并尝试对它们采取行动(停止,刷新等)。但是,我不确定是否会有这样的副作用(或者即使它可能存在)。
您可以分享有关您的问题的其他信息吗?你提到过jsp,GlassFish和JavaScript,所以我猜你要么使用Applet来播放文件,要么只是使用Java来混合服务器端,但是发送结果文件要由浏览器处理。这是否正确?