2009-12-01 5 views
1

Dans linux ce code ne fonctionne pas: j'ai ajouté deux lignesJava: Master Gain non pris en charge exception

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

Est-ce normal? Que dois-je faire pour résoudre ceci?
Dans Windows fonctionne-t-il.

Merci, Martijn.

+0

Cela semble être un problème avec la mise en œuvre du « DATALINE » que vous utilisez. Quel est le type de dataline? j'attendre à ce que getControl() ne lance cette exception que lorsque isControlSupported renvoie false ... – Fortega

+0

Il est possible que votre ligne de données ne soit pas du même type que celle de Windows et Linux. Linux et Windows en déboguant ce code – Fortega

+0

Oui, ce sont les mêmes types de lignes. –

Répondre

3

Pourriez-vous essayer de open() la ligne avant d'essayer d'utiliser des contrôles sur elle. Quelque chose comme ceci:

// 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

Il semble que cela diffère selon la version de JRE.

J'ai un problème similaire et quand je vérifie dataLine.getControls(), j'obtiens un contrôle "MASTER_GAIN" sur Oracle JDK 1.7 et un contrôle "Volume" sur OpenJDK 1.6. Et ce qui l'aggrave ... le "Volume" a une valeur linéaire de 0 ... 65536 alors que le MASTER_GAIN semble avoir un réglage en décibel.

Tant pour le code une fois, exécuter partout :-(

Questions connexes