Pregunta

En Linux el código no funciona: He añadido dos líneas

// 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 );
}

¿Es esto normal? ¿Qué tengo que hacer para solucionar esto?
En las ventanas Cómo funciona.

Gracias, Martijn.

¿Fue útil?

Solución

Podría tratar de open() la línea antes de intentar utilizar los controles en él. Algo como esto:

// 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 );
}

Otros consejos

Parece que difiere dependiendo de la versión de JRE.

Estoy teniendo un problema similar y cuando compruebo dataLine.getControls (), aparece un "MASTER_GAIN" Control de Oracle JDK 1.7 y un control de "Volumen" en OpenJDK 1.6. Y lo que lo hace peor ... el "volumen" tiene un valor lineal de 0 ... 65536 mientras que el MASTER_GAIN parece tener un entorno de decibelios.

Esto en cuanto a código una vez, ejecuta en todas partes: - (

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top