Java: исключение Master Gain не поддерживается - PullRequest
1 голос
/ 01 декабря 2009

В 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 это работает.

Спасибо, Мартейн.

Ответы [ 2 ]

3 голосов
/ 02 декабря 2009

Не могли бы вы попробовать 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 голос
/ 23 октября 2013

Похоже, что это зависит от версии JRE.

У меня похожая проблема, и когда я проверяю dataLine.getControls (), я получаю элемент управления «MASTER_GAIN» в Oracle JDK 1.7 и элемент управления «Громкость» в OpenJDK 1.6. И что еще хуже ... "Volume" имеет линейное значение от 0 ... 65536, в то время как MASTER_GAIN, кажется, имеет значение децибела.

Вот тебе и код, беги везде: - (

...