2010-11-20 8 views
7

Mam ten kod, aby wyciszyć/wyłączyć wyciszenie głośnościC# uzyskać poziom głośności/precent

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
private const int WM_APPCOMMAND = 0x319; 

[DllImport("user32.dll")] 
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE); 

Chciałbym wiedzieć, w jaki sposób mogę uzyskać poziom głośności/precent bo chcę wiedzieć, czy dźwięk jest już wyciszony lub nie.

Edytuj: lub chciałbym podzielić dźwięk wyciszenia/wyłączenia wyciszenia, więc będę miał dwie funkcje - jedną dla wyciszenia i jedną dla wyciszenia.

dzięki

Odpowiedz

1

nie mogłem zrobić dla wszystkich wersji systemu Windows (XP, Vista & 7).
Mimo to osiągnąłem to dzięki używanym zewnętrznym programom, takim jak NirCmd, i wysłałem polecenie, którego potrzebowałem.

Nie tak dobre rozwiązanie, ale rozwiązało to mój problem.

0

This thread pokazuje jak kontrolować głośność z C#.

Możesz być także zainteresowany w odpowiedzi na to pytanie: Get Master Sound Volume in c#

Zwłaszcza NAudio udało wrapper.

+0

wypróbowałem to i nie działało. – Ron

+1

Co, w szczególności, nie działa? Komentarze w wątku wskazują, że działa. –

+0

użył funkcji GetVolume() i zwrócił 65535, po zmianie głośności zwrócił mi tę samą wartość - 65535. może używam złej funkcji? – Ron

4

Wystarczy popatrzeć na tego projektu http://www.codeproject.com/KB/vista/CoreAudio.aspx

Stworzyli własną kontrolę miksera, który również raporty bieżące volumne i wyciszenia/przywrócenia stanu:

defaultDevice.AudioEndpointVolume.OnVolumeNotification += new AudioEndpointVolumeNotificationDelegate(
    AudioEndpointVolume_OnVolumeNotification); 
// .. snip .. 
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data) 
{ 
    Console.WriteLine("New Volume {0}", data.MasterVolume); 
    Console.WriteLine("Muted  {0}", data.Muted); 
} 

Czy to pomóc?

EDIT: Z tym kodem i klasy z projektu powinno być możliwe włączenie i wyłączenie wyciszenia bezpośrednio (bez przełączania):

MMDeviceEnumerator devEnum = new MMDeviceEnumerator(); 
MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); 
defaultDevice.AudioEndpointVolume.Mute = true; // or false 
+0

Link do CodeProject jest martwy –

+0

To działa cuda. Zauważ, że będziesz musiał odwołać się do NAudio.dll z następującym obszarem nazw: używając NAudio.CoreAudioApi ;. MasterVolumeLevelScalar jest liniową skalą 0-1, natomiast MasterVolumeLevel jest nieliniową skalą. –