CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Regulacja dzwięku w Vista i Win7

Regulacja dzwięku w Vista i Win7

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Regulacja dzwięku w Vista i Win7

Nowy postprzez tru64 » środa, 31 sierpnia 2011, 13:02

Witam
Mam problem z regulacją głośności głównej w systemach Vista i W7, mianowicie nie działa MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, w VisualBasic używa się do tego jakiejś pliku nagłówkowego chyba endpointvolume.h
Czy ma ktoś z tym doświadczenie?
Avatar użytkownika
tru64
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): środa, 31 sierpnia 2011, 12:26
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win7 x64
Kompilator: RAD 2009 Ent.
Gadu Gadu: 0
    Windows VistaFirefox

Re: Regulacja dzwięku w Vista i Win7

Nowy postprzez Cyfrowy Baron » środa, 31 sierpnia 2011, 18:42

Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Regulacja dzwięku w Vista i Win7

Nowy postprzez tru64 » piątek, 2 września 2011, 00:38

Hmmm jak popatrzyłem na te wątki to mnie głowa rozbolała.

Trochę pogrzebałem i mam zoptymalizowany kod:
KOD cpp:     UKRYJ  
#include <mmdeviceapi.h>
#include <endpointvolume.h>



Odczyt poziomu głośności dla Vista i Win7 (ciekawe czy to działa na XP?)

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        IMMDeviceEnumerator *deviceEnumerator = NULL;
        CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
                                                  __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
        IMMDevice *defaultDevice = NULL;

        deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
        deviceEnumerator->Release();
        deviceEnumerator = NULL;

        IAudioEndpointVolume *endpointVolume = NULL;
        defaultDevice->Activate(__uuidof(IAudioEndpointVolume),
                 CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
        defaultDevice->Release();
        defaultDevice = NULL;

        // -------------------------
        float currentVolume = 0;
        endpointVolume->GetMasterVolumeLevelScalar(&currentVolume);

        Label1->Caption=currentVolume;
}


w przypadku wykorzystania >GetMasterVolumeLevelScalar(&currentVolume); Wartość wyświetlana w przedziale od 0 do 1
jeśli napiszemy to tak: >GetMasterVolumeLevel(&currentVolume); Wartość w dB

Jeśli chcemy ustawić nową wartość to należy to pozmieniać endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);

Proste, krótkie i czytelne :geek:
Avatar użytkownika
tru64
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): środa, 31 sierpnia 2011, 12:26
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win7 x64
Kompilator: RAD 2009 Ent.
Gadu Gadu: 0
    Windows 7Opera

Re: Regulacja dzwięku w Vista i Win7

Nowy postprzez Cyfrowy Baron » piątek, 2 września 2011, 05:00

tru64 napisał(a):Hmmm jak popatrzyłem na te wątki to mnie głowa rozbolała.


Niby od czego cię głowa rozbolała?!? :lol: Miałeś tam podane dwie funkcje SetVolume i GetVolume, którym wystarczyło podać jako argument identyfikator sterownika dźwięku, któremu chcesz sprawdzać i regulować dźwięk. Prościej już się chyba nie da... :D
Dodatkowo podano sposób na bieżące odczytywanie poziomu dźwięku, bez ręcznego pobierania.

Twojego kodu nie sprawdzałem, ale już na pierwszy rzut oka widać, że on tylko odczytuje poziom głośności jedynie głównego sterownika dźwięku.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Regulacja dzwięku w Vista i Win7

Nowy postprzez tru64 » piątek, 2 września 2011, 14:56

True, to jak to zrobiłeś jest przydatne i pomocne, czyta wszytko co potrzeba z miksera- zależnie od potrzeb. Do czytania i zapisu głośności głównej wolę moją wersje. Teraz tylko sprawdzić na XP i zrobione.
Dziękuje za pomoc.
Avatar użytkownika
tru64
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): środa, 31 sierpnia 2011, 12:26
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win7 x64
Kompilator: RAD 2009 Ent.
Gadu Gadu: 0
    Windows VistaFirefox

Re: Regulacja dzwięku w Vista i Win7

Nowy postprzez Cyfrowy Baron » piątek, 2 września 2011, 17:08

tru64 napisał(a):eraz tylko sprawdzić na XP i zrobione.


No niestety na WinXP to nie działa, co tym bardziej nie dziwi, że w pliku pomocy masz napisane:


Requirements

Client: Windows Vista




U mnie w Win XP wyrzuca błąd: Access violation at address...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron