2010-10-21 14 views
12

Zasadniczo potrzebuję sposobu na wyjście do bieżącego wyjścia audio i sprawdzenie poziomu dźwięku, tj. Muszę mieć możliwość sprawdzenia, czy coś jest odtwarzane na urządzeniu audio, czy nie.Jak programowo uzyskać aktualny poziom dźwięku?

Nie muszę sprawdzać ustawienia głośności, ale rzeczywisty poziom dźwięku odtwarzanego strumienia audio.

Niestety, pytałam o tym, jak to zrobić w systemie Windows w Visual Studio 2008.

@mikerobi: To tworzy część mojego rozumowania - jeśli jest ona wyświetlana na liczniku głośności systemu, musi istnieć być numerem systemowym, który może go odzyskać.

+0

Nie rozumiem negatywnych reakcji, na pewno jest sposób na to, jaki dźwięk jest odtwarzany? Nie wiem, czy będzie łatwo wyodrębnić i użyteczne informacje z tego strumienia, ale te komentarze nie wskazują na plakat w dobrym kierunku. –

+0

+1, teraz, gdy wspomniana jest platforma. Od wersji Windows Vista/7 mamy interfejsy API Core Audio (http://msdn.microsoft.com/en-us/library/dd370784%28VS.85%29.aspx), ale z pewnością nigdy ich nie użyłem. Spróbujmy oznaczyć tag 'windows-api' i zobaczyć, kogo narysujemy.:) –

+0

Może znajdziesz coś tutaj http://www.dreamincode.net/forums/topic/45693-controlling-sound-volume-in-c%23/#/ – BrunoLM

Odpowiedz

2

To jest dobre pytanie. Odpowiedź, w przypadku 32-bitowych aplikacji dla systemu Windows, polega na podłączeniu do pliku winmm.dll i innych bibliotek sterowania audio niskiego poziomu. W języku C# chcę utworzyć klasy otoki zawierający metody extern prototypy:

public class MyAudioWrapper 
{ 
    [DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")] 
    public extern void GetWaveVolume(IntPtr devicehandle, out int Volume); 

    ... 
} 

Wystarczy popatrzeć na this link dla listy metod Windows Audio; możesz użyć miksera lub tylko kontrolera wave-out, aby ustawić głośność. To, czego chcesz użyć, będzie dyktować biblioteki do zaimportowania. Będziesz musiał zbadać, jak najlepiej zdefiniować prototyp i jak uzyskać uchwyt do urządzenia audio/miksera.

+1

Lepszą odpowiedzią dla Vista i nie tylko jest otwieranie strumienia audio w trybie sprzężenia zwrotnego i przechwytywanie z tego. –

2

Oto pomocny link invokations Windows API, a tutaj jest dokładnie to, czego szukasz:

http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume


Ponieważ wymóg zmianie i nie trzeba poziom dźwięku proponuję Pomocne może być:

Myślę, że musisz przeczytać, co jest odtwarzane w strumieniu wyjściowym i analizując dane w niektórych algorytmach, możesz mieć możliwość decydowania o pogodzie, w którym coś jest odtwarzane lub nie. Aby to zrobić, trzeba się MMDevice API

http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx

Nie chcę cię do discorage ale wierzcie mi, to nie będzie łatwe do osiągnięcia, jeśli nie są zaznajomieni z kodem niezarządzanym.

  • Musisz wypełnić wiele struktur w każdym wywołaniu.
  • Musisz wykonać wywołania w określonej kolejności.
  • Zbieranie odniesień do struktur.

Nawet jeśli tego dokonasz, nie możesz przewidzieć wyniku działania urządzenia. Powodzenia.

Powiązane problemy