在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。
答案 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似乎有一个分贝设置。
代码一次,到处运行: - (