Java 中的控制剪辑音量 -> FloatControl Volume 不执行任何操作

Control Clip Volume in Java -> FloatControl Volume does nothing

我正在尝试调整游戏音乐的音量,我尝试了 FloatControl volume = … 但无论我将其设置为什么值(1.0f 或 0.0f),它的音量都是相同的。有什么想法吗?

public static void playGameSound()
    {
        try {
            AudioInputStream gameSound = AudioSystem.getAudioInputStream(new File("src/res/inGame.wav"));
            play = AudioSystem.getClip();
            play.open(gameSound);
            FloatControl volume = (FloatControl) play.getControl(FloatControl.Type.MASTER_GAIN);
            volume.setValue(1.0f);
            play.loop(Clip.LOOP_CONTINUOUSLY);
        }catch (LineUnavailableException | IOException | UnsupportedAudioFileException e){
            e.printStackTrace();
        }
    }

我对各种音频控制线的体验是,它们依赖于客户端计算机的声音系统,因此在哪些有效或无效方面存在很多差异。出于这个原因,我使用 SourceDataLine 作为我的输出并通过将每个声音帧乘以音量因子来控制音量。您可以使用我编写的免费库(或检查其代码来编写您自己的库),该库利用了此方法。主要的 class 被称为 AudioCue 并在 Clip 上紧密建模。