Předmět Autor Datum
Java stuck. Mám najítý tento kód: Mixer.Info[] mixers = AudioSystem.getMixerInfo(); //System.out.…
Flash_Gordon 25.02.2017 18:43
Flash_Gordon
To proto, ze na tyhle veci Java opravdu neni...
MaSo 25.02.2017 20:57
MaSo
Možná na tyhle věci není, ale silně pochybuji, že to nejde vůbec. Java umí pracovat s operačním syst…
MichalDM 25.02.2017 22:39
MichalDM
A co nějaká extérní knihovna?
MichalDM 25.02.2017 21:32
MichalDM
Ovládání systémové úrovně zvuku není jednoduché ani přes mateřský .NET V podstatě seriózní zdroje s… poslední
Flash_Gordon 25.02.2017 22:58
Flash_Gordon

Java stuck.

Mám najítý tento kód:

                 Mixer.Info[] mixers = AudioSystem.getMixerInfo();
		        //System.out.println("There are " + mixers.length + " mixer info objects");
		        for (Mixer.Info mixerInfo : mixers) {
		            //System.out.println("mixer name: " + mixerInfo.getName());
		            Mixer mixer = AudioSystem.getMixer(mixerInfo);
		            Line.Info[] lineInfos = mixer.getTargetLineInfo(); // target, not source  
		            //changes all the volumes
		 
		            for (Line.Info lineInfo : lineInfos) {
		                //System.out.println("  Line.Info: " + lineInfo);
		                Line line = null;
		                boolean opened = true;
		                try {
		                    line = mixer.getLine(lineInfo);
		                    opened = line.isOpen() || line instanceof Clip;
		                    if (!opened) {
		                        line.open();
		                    }
		                    FloatControl volCtrl = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN);
		                    //System.out.println(volCtrl.getMinimum());
		                    volCtrl.setValue(10.0f);  // do the trick
		                    //System.out.println("    volCtrl.getValue() = " + volCtrl.getValue());
		                } catch (LineUnavailableException ex) {
		                    ex.printStackTrace();
		                } catch (IllegalArgumentException iaEx) {
		                    //System.out.println("  -!-  " + iaEx);
		                } finally {
		                    if (line != null && !opened) {
		                        line.close();
		                    }
		                }
		            }
		        }

Bohužel, tento kód mi ale prakticky nefunguje.
Sice to ve zdroji zvaká, až jsem se pořádně lekl (zvukovka Xonar DX).
Nikde toto téma není pořádně dořešené, spíše jsou názory, že to jde jen přes nativní utilitu třetí strany.
2390172

Java je nedodělek. :-p A teď do mě.

Ovládání systémové úrovně zvuku není jednoduché ani přes mateřský .NET

V podstatě seriózní zdroje se odkazují na šikovného borečka:
http://www.dreamincode.net/forums/topic/45693-cont rolling-sound-volume-in-c%23/
Což je rozsáhlejší nízkoúrovňové handlování Win32API.
Nebo na nircmd.html to je ovládání systémových záležitostí přes CMD rozhraní aplikace

Existuje snad obezlička, kterou jsem našel.
Některé multimediální klávesnice mají klávesu pro přímé ubírání či přidávání hlasitosti.
Vyvolat takovou klávesu je možné v nativní knihovně kódem:

  private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
        private const int APPCOMMAND_VOLUME_UP = 0xA0000;
        private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
        private const int WM_APPCOMMAND = 0x319;
        static IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
...
...
...        //následně třeba:

           SendMessageW(handle, WM_APPCOMMAND, handle,
           (IntPtr)APPCOMMAND_VOLUME_DOWN);  // ubere hlasitost

Což je řešení, které umožňuje udělat na tvé aplikaci dvě tlačítka + a - a tak může poklikáváním zesilovat ubírat system volume.

Zpět do poradny Odpovědět na původní otázku Nahoru