Java:Master Gain不支持异常

时间:2009-12-01 17:13:44

标签: java linux audio volume

在linux中,此代码不起作用:我添加了两行

// Added two lines.
DataLine.Info info = new DataLine.Info( SourceDataLine.class, audioFormat );
SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine( info );
// Adjust the volume on the output line.
if( dataLine.isControlSupported( FloatControl.Type.MASTER_GAIN)) {
    // If inside this if, the Master_Gain must be supported. Yes?
    FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
    // This line throws an exception. "Master_Gain not supported"
    volume.setValue( 100.0F );
}

这是正常的吗?我该怎么做才能解决这个问题? 在Windows中它可以正常工作。

谢谢,Martijn。

2 个答案:

答案 0 :(得分:3)

在尝试使用控件之前,您是否可以尝试open()该行。像这样:

// Added two lines.
DataLine.Info info = new DataLine.Info( SourceDataLine.class, audioFormat );
SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine( info );
dataLine.open();
// Adjust the volume on the output line.
if( dataLine.isControlSupported( FloatControl.Type.MASTER_GAIN)) {
    // If inside this if, the Master_Gain must be supported. Yes?
    FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
    // This line throws an exception. "Master_Gain not supported"
    volume.setValue( 100.0F );
}

答案 1 :(得分:1)

它看起来有所不同,具体取决于JRE版本。

我遇到了类似的问题,当我检查dataLine.getControls()时,我在Oracle JDK 1.7上获得了一个“MASTER_GAIN”控件,在OpenJDK 1.6上获得了一个“Volume”控件。更糟糕的是......“音量”的线性值从0到65536,而MASTER_GAIN似乎有一个分贝设置。

代码一次,到处运行: - (