¿Se puede usar Java Sound para controlar el volumen del sistema?

Java Sound ofrece FloatControlinstancias para varias funciones de línea de sonido, y tanto a MASTER_GAIN&VOLUME control de tipo.

¿Se pueden usar estos controles para cambiar el volumen del sistema?

Respuesta 1

agregue la siguiente línea justo después de que la Línea se inicialice. Esto es necesario para abrir la línea.

boolean opened = line.isOpen() || line instanceof Clip;
if(!opened){
    System.out.println("Line is not open, trying to open it...");
    line.open();
    opened = true;
}
Respuesta: 2

intente esto no lo decepcionará ... podemos modificar el ejemplo superior en consecuencia.

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

public class SoundMeter {

JFrame j;

public SoundMeter() {
    j = new JFrame("SoundMeter");
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    j.setLayout(new BoxLayout(j.getContentPane(), BoxLayout.Y_AXIS));
    printMixersDetails();
    j.setVisible(true);
}
public void printMixersDetails(){
    javax.sound.sampled.Mixer.Info[] mixers = AudioSystem.getMixerInfo();
    System.out.println("There are " + mixers.length + " mixer info objects");  
    for(int i=0;i<mixers.length;i++){
        Mixer.Info mixerInfo = mixers[i];
        System.out.println("Mixer Name:"+mixerInfo.getName());
        Mixer mixer = AudioSystem.getMixer(mixerInfo);
        Line.Info[] lineinfos = mixer.getTargetLineInfo();
        for(Line.Info lineinfo : lineinfos){
            System.out.println("line:" + lineinfo);
            try {
                Line line = mixer.getLine(lineinfo);
                line.open();
                if(line.isControlSupported(FloatControl.Type.VOLUME)){
                    FloatControl control = (FloatControl) line.getControl(FloatControl.Type.VOLUME);
                    System.out.println("Volume:"+control.getValue());   
                    JProgressBar pb = new JProgressBar();
                    // if you want to set the value for the volume 0.5 will be 50%
                    // 0.0 being 0%
                    // 1.0 being 100%
                    control.setValue((float) 0.5);
                    int value = (int) (control.getValue()*100);
                    pb.setValue(value);
                    j.add(new JLabel(lineinfo.toString()));
                    j.add(pb);
                    j.pack();
                }
            } catch (LineUnavailableException e) {
                e.printStackTrace();
            }
        }
    }
}
public static void main(String[] args) {
    new SoundMeter();
}
}
Respuesta: 3

Recientemente estaba enfocando el mismo problema. Al final decidí escribir un pequeño programa llamado VolumeChanger.exe en C ++ y llamarlo desde java. Funciona genial. Puedes llamar a un exe desde java con

Process process = new ProcessBuilder(vcpath,"-u").start();

wehre vcpath es la ruta a su archivo exe (podría ser real, por supuesto).

Si estás interesado en cómo usé esta herramienta, visítame en muteFritz

Si está interesado en todo el código fuente, no dude en enviarme un PM ...

Respuesta: 4

Tengo un problema muy simple que esperaba poder resolver con el enlace diferido de GWT. Tengo una gran cantidad de código que se programó para las interfaces org.w3c.dom. *. No quiero cambiar esto ...

Mi servlet de Java parece quejarse de que no puede encontrar un archivo que está incluido en el paquete (marktest). Estoy usando Eclipse (Indigo) para desarrollar y Tomcat7. Aquí está el error: GRAVE: Error ...

Después de compilar el siguiente código en Eclipse usando una Mac: import java.io. *; Public class Filer {public static void main (String [] args) lanza IOException {File f1; ...

Estoy buscando una buena herramienta para escribir pruebas de regresión para nuestra GUI Java Swing. Encontré jemmy2 y estoy realmente satisfecho con él. Sin embargo, hay un pequeño inconveniente: como muestran los ejemplos jemmy, yo ...