Java 声音 API 初始化

标签 java javasound

我使用以下代码在游戏中播放声音。

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.IOException;

public class AudioController {

    public static void playback(String fileName) 
        throws LineUnavailableException, UnsupportedAudioFileException, IOException {
        AudioInputStream ais = AudioSystem.getAudioInputStream(AudioController.class.getClassLoader().getResourceAsStream("sounds/"+fileName));

        AudioFormat format = ais.getFormat();
        DataLine.Info info = new DataLine.Info(Clip.class, format);
        Clip clip = (Clip) AudioSystem.getLine(info);

        clip.open(ais);
        clip.start();
    }
}

问题是:如果第一次播放声音,应用程序会挂起一小段时间,因为需要完成某种初始化工作。此后播放的每个声音都不会表现出这种行为。如何防止这种情况发生?

最佳答案

我也遇到过这个问题,我的经验是,这与剪辑的大小无关,而是与您第一次尝试启动剪辑时加载许多类有关由于加载许多 JavaSound 类的开销。

如果您将参数 -verbose:class 添加到 java,您也可能会看到此问题。

对我有用的是有一个没有任何音频的silent.wav 文件。我在主声音开始之前预先播放它,它让一切都准备好了。

关于Java 声音 API 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291725/

相关文章:

java - WAV 到 MP3 - Java 库示例

java - 切割一个波形文件

java - 是否有Java库可以通过编程方式删除.mp3音频文件的一部分?

java - 在哪里可以找到所有可能的 Java 编译时错误的列表?

可以使用dls或sf2文件的java合成器

java - 在 Java 中捕获扬声器输出

java - 请求后发生 "javax.ws.rs.NotFoundException: HTTP 404 Not Found"

java - 在多线程执行期间使用 TestNG 生成 Cucumber ExtentReport

java - 无法编译程序

java - hibernate 映射在我的代码中不起作用