簡體   English   中英

JLayer 播放時改變音量 (JavaZoom)

[英]JLayer Change volume while playing (JavaZoom)

我構建了一個播放 web 音樂 stream 的 JLayer,它工作正常,除了音量。 我不能讓它改變。

我已經嘗試了以下方法,但音量始終保持不變,沒有錯誤:

public synchronized void setVolume(float vol) {
    Line.Info source = Port.Info.SPEAKER;

    if (AudioSystem.isLineSupported(source)) {
        try {
            Port outline = (Port) AudioSystem.getLine(source);
            outline.open();

            FloatControl volumeControl = (FloatControl) outline.getControl(FloatControl.Type.VOLUME);
            System.out.println("volume: " + volumeControl.getValue());

            volumeControl.setValue(vol);
            System.out.println("new volume: " + volumeControl.getValue());

        } catch (LineUnavailableException ex) {
            System.err.println("source not supported");
            ex.printStackTrace();
        }
    }
}


/*public synchronized void setVolume(double vol) {
    try {
        Mixer.Info[] infos = AudioSystem.getMixerInfo();
        for (Mixer.Info info : infos) {
            Mixer mixer = AudioSystem.getMixer(info);
            if (mixer.isLineSupported(Port.Info.SPEAKER)) {
                Port port = (Port) mixer.getLine(Port.Info.SPEAKER);
                port.open();
                if (port.isControlSupported(FloatControl.Type.VOLUME)) {
                    FloatControl volume = (FloatControl) port.getControl(FloatControl.Type.VOLUME);
                    volume.setValue((float) (vol / 100));
                }
                port.close();
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}*/

我的經驗是,Java 支持的各種Controls的實現有些成敗。 我不清楚為什么會這樣。 也許它與操作系統或特定機器支持的功能有關?

無論如何,對於交易量, MASTER_GAIN通常是交易量的最佳選擇。

Java 教程部分關於使用控件的結尾部分討論了直接操作音頻數據。 我推薦這個選項,但是在使用 JavaZoom 代碼時獲取數據可能會出現問題,並且可能涉及調整庫的源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM