Zmiana głosności "Master volume"

0

Jak zmienić za pomoca kawałka kodu głośność dzwieków w systemie tzw. "Master volume"

No próbowałem WaveOutSetVolume ale to zmienia tylko "Wave"

Próbowałem auxSetVolume(UINT(5), ...) ale to w ogolę nie działa.
Testowałem na windows 7 i XP

0

ten kod zadziała pod xp
pod nowsze systemy: http://stackoverflow.com/questions/3437050/how-to-adjust-master-volume-in-vista-xp

btw - czemu chcesz komuś zmieniać master volume? bardzo nieładnie

1

Do tego posta dołączyłem dwa proste programy z kodem źródłowym i exekami. Stworzone pod Delphi 7. W archiwum volume.rar jest kod, który działał - z tego co pamiętam mi jeszcze bez problemów pod Windows XP, ale wieki go nie uruchamiałem. Na moim Windows 7 Ultimate 64 bit, jednak nie działa w ogóle. Oczywiście taki lamer jak ja sam by go nie wymyślił, było to wygooglowane kiedyś.

Natomiast w załączniku volume_windows_7.rar jest kod, który polecił tutaj @unikalna_nazwa wraz z wygooglowanymi modułami i odpowiednim rzutowaniem typu na IInterface, bo inaczej kod podany w google się nie kompilował u mnie.

Mimo usilnych starań i mozolnego przetłumaczenia kodu z C++ na stronie: http://www.codeproject.com/Tips/233484/Change-Master-Volume-in-Visual-Cplusplus i różnych kombinacji nie udało mi się aby funkcja GetMasterVolumeLevel zwrociła mi w zmiennej coś innego niż zero lub po początkowych ustawieniach volume na wartości poza zakresem od 0.0 do 1.0 (takie są właściwe z tego co zauwazyłem). Dałem jak w kodzie z volume.rar, głośnośc na 65535.0 i wtedy ta funkcja GetMasterVolumeLevel zwróciła mi -64. Czyli niby coś tam działa. Ale nie umiem zmusić tego do odczytania prawidłowej głośności czyli na przykład dla 100% - 1.0 i tym podobnych. Może ktoś z Was ma sprawdzony pod Delphi 7 kod, który działa. Fajnie było by to mieć ogarnięte na przyszłośc. Żeby też odczytać głośność. Bez używania choćby bass.dll, bo to za pewne jedna z alternatywnych metod.

A i wiadomo, że nie ma co userowi na chama ustawiać master volume, ale jeżeli nie robi się to za jego plecami i daje mu informację, której będzie świadom to nie widzę problemu. Po to chyba między innymi powstały te interface'y i metody aby móc z nich skorzystać. Jak ktoś z Was wpadnie jak ustalić głośnośc "masterową" przy użyciu interface'ów z tych modułów, które dołaczyłem do volume_windows_7.rar archiwum, to dajcie proszę znać. Wtedy można było by dopracować program, tak aby przy starcie ustawił pasek przewijania na odpowiednią pozycję względem takiej wartości procentowej jaką mamy aktualnie w systemie. W kodzie z volume.rar i kiedyś pod XP, o ile pamiętam to działało mi raczej bez większych problemów.

0

Przetestowałem przykład "7" w windows "8" i też działa OK.
Chce zmienić "master volume" bo moj program bedzie powłoką na komputerze i nie bedzie dostepu do panelu sterowania czy paska zadań ;)

A ja mam pytanie odnośnie skryptu
build.bat

Co musi być ustawione aby projekt sie kompilował , wszak kompilator musi wiedzieć gdzie sa pliki DCU wiec na poczatek krzyczy o brak forms.DCU

0

Plik build.bat jest robiony pod kątem moich preferencji i Delphi 7. Builduje się nim i pakuje UPX'em projekty bez problemów. Testowane wielokrotnie w wielu moich projektach. Ale możesz zrobić to po swojemu. Nie powinno nic "krzyczeć" o brak forms.dcu - to moduł dostępny w domyślnej ścieżce. Używam w swoich projektach podkatalogu DCU żeby mi przy kompilacji z pod IDE, gdzie nie usuwam *.dcu nie zaśmiecało katalogu z projektem. Oczywiście ścieżkę do katalogu z outputem dla skompilowantch unitów i inne ustawienia - możesz sobie pozmieniać w opcjach projektu, wedle swoich upodobań. Pozostaje jednak nadal kwestia prawidłowego odczytania aktualnie ustawionego poziomu głośności przy starcie programu. Może ktoś z Was wie, co może być nie tak, że zmienna zwraca prawie zawsze zero. Lub w jednym z przypadków, jak wspomniałem zwróciła -64 przy przekroczeniu zakresu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1