繁体   English   中英

在JAVA中有效播放.wav文件

[英]Effectively playing .wav files in JAVA

我正在编写一个程序,单击一下按钮即可播放.wav文件。 目前,我一直在这样做:

  1. 加载/打开文件。
  2. 播放文件。
  3. 关闭文件。

这发生在单独的线程中。

这样做很好,我也没问题,但是我读过某个地方,每次需要时加载文件都可能会使程序变慢,并可能引起各种麻烦。 他们说把这些文件放在缓存中比较聪明,但是我不确定该怎么做(我想我也在StackOverflow中读过,但是我不太确定)。

提前致谢。

这取决于您如何播放文件,但是假设您将文件作为字节流加载,则只需将文件内容存储为字节数组,然后将其放入缓存即可。

再次加载文件时,您从缓存中检索字节数组,并从中创建输入流。

像这样的伪代码:

byte[] cachedFile = cache.get(filename);
if( cachedFile != null ) {
   cachedFile = loadFile( filename);
   cache.put( filename, cachedFile );
}

InputStream stream = new ByteArrayInputStream(cachedFile);
play(stream);

请注意,这只是一些基本方法,您需要将同步添加到缓存访问,异常处理,缓存逐出策略(如果缓存可能太大)等。

除此之外,您还可以研究文件的内存映射,这提供了一个折衷方案:您不必在播放文件之前先读取整个文件,而在播放时直接读取流。 因此,您只需阅读播放器所需的零件。 由于较低的硬盘吞吐量,这可能仍比内存中的数据慢,但由于在给定时间只需要文件中的一定数量的数据,这甚至可能并不明显。 使用这种方法,您将不需要缓存,并且可以减少内存需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM