DataLine.flush()的Javadoc状态
从线路中刷新排队的数据。刷新的数据被丢弃。在某些情况下,并非所有排队的数据都可以丢弃。例如,混音器可以从缓冲区中刷新特定输入行的数据,但仍然会播放输出缓冲区中已经存在的任何未播放数据(混合的结果)。如果您想在重新开始播放或捕获时跳过“陈旧”数据,您可以在暂停一行(正常情况)后调用此方法。(刷新未停止的行是合法的,但在活动行上这样做可能会导致数据不连续,从而导致可察觉的点击。)
这到底是什么意思?
此外,对于重新启动Clip
对象,该站点上的许多人建议使用以下方法:
clip.stop();
clip.setFramePosition(0);
clip.start();
使用上面的代码时,我注意到一个示例剪辑(如果重要的话,大约 15 秒长)不会从一开始就重新启动,并且它的“重新启动位置”不一致。但是,当我尝试
clip.stop();
clip.flush();
clip.setFramePosition(0);
clip.start();
剪辑工作完美,并在声音开始时重新开始。我的问题是,flush() 方法做了什么来解决我之前的问题?另外,为什么我首先遇到了这个问题?