簡體   English   中英

使用Linux時沒有JAVA聲音控制嗎?

[英]No JAVA sound control when I'm using Linux?

我正在使用JAVA聲音API,並且試圖在混音器和線路上獲得一些控件(至少是音量),但是似乎沒有控件。 這是我正在使用的部分代碼:

        for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) {
        //System.out.println("MixerInfo : "+mixerInfo.getName());
        if (mixerInfo.getName().compareTo("PulseAudio Mixer")==0) {
            System.out.println("Java Sound Audio Engine : "+AudioSystem.getMixer(mixerInfo));
            mixer=AudioSystem.getMixer(mixerInfo);
            System.out.println("\t Controls supported by Mixer:");
            for(Control c : mixer.getControls()) {
                System.out.println("\t =>" + c);
            }
            System.out.println("\t TargetLine availabe for this mixer : ");
            for (Line.Info i : mixer.getTargetLineInfo()) {
                System.out.println("\t => "+i);
                System.out.println("\t\t Controls supported by Target Line :");
                try {
                    for (Control c : AudioSystem.getLine(i).getControls()) {
                        System.out.println("\t\t =>"+c);
                    }
                } catch (LineUnavailableException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println("--------------------------");
            //break;
        } else {
            //System.out.println("Other Mixer : "+AudioSystem.getMixer(mixerInfo));
            System.out.println("Other Sound Audio Engine : "+AudioSystem.getMixer(mixerInfo));
            mixer2=AudioSystem.getMixer(mixerInfo);
            System.out.println("\t Controls supported by Mixer:");
            for(Control c : mixer2.getControls()) {
                System.out.println("\t =>" + c);
            }
            System.out.println("\t TargetLine availabe for this mixer :");
            for (Line.Info i : mixer2.getSourceLineInfo()) {
                System.out.println("\t => "+i);
                System.out.println("\t\t Controls supported by Target Line :");
                try {
                    for (Control c : AudioSystem.getLine(i).getControls()) {
                        System.out.println("\t\t =>"+c);
                    }
                } catch (LineUnavailableException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println("--------------------------");

        }
    }

這是在控制台中產生的結果:

Java聲音音頻引擎:混音器支持的org.classpath.icedtea.pulseaudio.PulseAudioMixer@1404d1控件:

該混音器的TargetLine可用:

=>接口TargetDataLine支持42種音頻格式以及0到1000000字節的緩沖區

目標行支持的控件:


其他聲音音頻引擎:com.sun.media.sound.DirectAudioDevice@13b8dae

混音器支持的控件:

該混音器的TargetLine可用:

=>接口SourceDataLine支持512種音頻格式,以及至少32個字節的緩沖區

目標行支持的控件:

=>接口剪輯,支持512種音頻格式以及至少32個字節的緩沖區

目標行支持的控件:


其他聲音音頻引擎:com.sun.media.sound.DirectAudioDevice@1cad7c3混音器支持的控件:

該混音器的TargetLine可用:

=>接口SourceDataLine支持24種音頻格式,以及至少32個字節的緩沖區

目標行支持的控件:

=>接口剪輯,支持24種音頻格式以及至少32個字節的緩沖區

目標行支持的控件:


其他聲音音頻引擎:com.sun.media.sound.DirectAudioDevice@1a9cf86

混音器支持的控件:

該混音器的TargetLine可用:

=>接口SourceDataLine支持24種音頻格式,以及至少32個字節的緩沖區

目標行支持的控件:

=>接口剪輯,支持24種音頻格式以及至少32個字節的緩沖區

目標行支持的控件:


其他聲音音頻引擎:com.sun.media.sound.PortMixer@17fd320混音器支持的控件:

該混音器的TargetLine可用:

=>麥克風升壓源端口

目標行支持的控件:

=>捕獲源端口

目標行支持的控件:

=>數字源端口


可能是什么問題?

注意:我不是在Windows操作系統上,而是在Xubuntu(linux)操作系統上。 這就是為什么我沒有Java聲音音頻引擎但有PulseAudioMixer的原因。

我也發現安德魯在評論中對各行支持不一的說法是正確的。 此外,如果存在音量控制,通常也不理想。 它只能隨着音頻數據的每個緩沖區加載而改變音量,因此快速變化往往會導致緩沖區之間的電平跳變較大,進而導致咔嗒聲或拉鏈效果。

我建議編寫自己的控件。 在Java教程中,有一個很好的示例可以用作起始結構,該部分稱為使用文件和格式轉換器 在“讀取聲音文件”標題下有一個簡短的代碼示例。 注意評論:

// Here, do something useful with the audio data that's 
// now in the audioBytes array... 

那時,您可以將字節轉換為PCM數據,然后將這些值乘以音量系數(通常是從0到1的浮點數),然后再轉換回字節以進行播放。 您可以編寫自己的緩沖區,使緩沖區變小,或者提出其他方案來分散音量變化,以免突然變化。 而且,可以進行功能,以便從0到1的變化將更緊密地映射感知到的音量。 對於所有這些步驟,您可以查閱StackOverflow上的先前文章。

我只記得Java教程中有關控件的最后一部分。 在那里,他們提到了編寫自己的選項。 不幸的是,他們當時並沒有提供很多示例。

使用PulseAudio時,即使在最新的JDK中,Linux上的JavaSound確實沒有控件。

暫無
暫無

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

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