Wyciszenie żródeł dzwięku spoza aplikacji

0

Witam.

Mam pytanie.
Czy jest możliwe jeśli tak to jak
Wyciszenie lub wyłączenie (interesują mnie obie możliwości) dźwięków spoza aplikacji na czas wykonywania przez program określonych procedur.
tzn. wyciszenie / wyłączenie dźwięków pochodzących z you tube, gier itp. Po wykonaniu procedury wszystko by wracało do normy.

0

A czy w Twoja aplikacja ma mieć możliwość odgrywania dźwięków wtedy, kiedy inne źródła są wyciszone?

0

Tak dokładnie

0

Zobacz do tych wątków:

Z tego co można wyczytać, jedni twierdzą że nie da się, bo "co jeśli inna aplikacja też chciałby mieć wyłączność na odgrywanie dźwięku? Która więc ma uzyskać wyłączność?" i tak też argumentują swoje wypowiedzi; Natomiast z drugiej strony, wskazują pewne programy, które taką funkcję posiadają (Mumble, Skype);

Czyli wychodzi na to, że da się i się nie da - ja niestety nie znam odpowiedzi.

0

Jak dla mnie takie coś jest jak najbardziej możliwe do zrealizowania. Jedyne co, to trzeba mieć na uwadze, że coś takiego będzie wymagać Windows 7. Przecież Mikser Głośności pozwala na regulowanie głośności każdego procesu z osobna. Więc musi to być możliwe do realizacji również we własnym programie.

Co do argumentacji co będzie jeśli mamy 2 takie programy. Naturalnie takiego zachowania nie zrobimy w ten sposób, że gdzieś w pętli będziemy wyciszać pozostałe procesy. Jedynie na początku zrobimy mute dla pozostałych procesów, a na koniec un-mute. Wtedy ten kto drugi wyciszy pozostałe dźwięki ten wygrywa.

0

Jakbyś mógł coś na ten temat więcej (windows 8.1 i 10)
Z góry dziękuję

0

A jak wyciszyć własną aplikacje w której są odgrywane dźwięki mp3 za pomocą komponentu TMediaPlayer
Chodzi mi szczególnie o Button "mute" i"'not mute"
chociaż i wyciszanie za pomocą scrollbara też by był fajną rzeczą.

0

Generalnie nie jest to takie proste jakby się wydawało. Będzie potrzeba trochę pobawić się w WinAPI, a radziłbym zacząć od tego artykułu https://msdn.microsoft.com/en-us/library/dd370892(VS.85).aspx

0

Na razie próbuje wyciszyć w aplikacji ale ciągle podkreśla mi Value w ostatniej tutaj linii:
**Undeclared identifier: 'Value' **

Dodałem w uses FMX.Media, FMX.StdCtrls

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Filter:=TMediaCodecManager.GetFilterString ;
 if OpenDialog1.Execute  then
  Begin
  MediaPlayer1.FileName := OpenDialog1.FileName;
  if MediaPlayer1.Media <> nil then
  MediaPlayer1.Play;
  TrackBar1.max := MediaPlayer1.media.Duration;
  TrackBarVolume.Value := MediaPlayer1.Media.Volume;
 end;
end;

0

A jakiego typu jest to TrackBarVolume? Skoro podkreśla tę właściwość to znaczy, że taka nie istnieje;

PS: FMX? Piszesz apkę w FireMonkey, czy na pałę wypełniasz sekcję uses?

0

Potrzebuje w zwykłej aplikacji ale znalazłem tylko taki przykład w necie więc kombinuje trochę z dokumentacji trochę z filmiku

0

TrackBarVolume to komponent TTrackbar

0

No to skoro potrzebujesz to w zwykłej aplikacji to korzystaj z przestrzeni Vcl, a nie FMX.

0

Małymi kroczkami próbuję dojść do sedna
Wyciszyłem dźwięk w ten sposób

WaveOutSetVolume(0, $00000000);

Mam tylko pytanie o wytłumaczenie działania
Wyciszając tak dźwięk jest wyciszony na "amen"
Nie pomoże przesuniecie suwaka w mikserze głośności na full (do góry) dla tej aplikacji
dalej jest wyciszony, nawet gdy wyłączymy i włączymy aplikacje dalej jest wyłączony.

Dopiero wywołując to dźwięk powraca

WaveOutSetVolume(0, $FFFFFFFF);

Dlaczego tak jest? Jak to działa? że przesuniecie dźwięku w mikserze nic nie daje i mimo wyłączenia aplikacji to w jakiś sposób to system zapamiętuje i po ponownym uruchomieniu dalej go nie ma.
i czy w ten sposób można wyłączyć dźwięk dla innej aplikacjo np.: Internet Explorer? i jak jeśli to proste ?

0

Funkcja WaveOutSetVolume dokonuje zmian w ustawieniach urządzenia - dlatego zmiany obowiązują nawet po wyłączeniu aplikacji. Dlatego też jeśli Twoja aplikacja zmienia głośność to powinna również ją przywracać na koniec pracy.

0

Mógłbyś odesłać do jakiegoś źródła tłumaczącego temat tego przechwytywania i zapamiętywania i jak fachowo go na koniec przywracać jak radzisz, w zdarzeniu onClose głównej formy chodzi mi o fachowe rozwiązanie

0

Przecież podałem Ci w poprzednim poście link do tej funkcji... :/

Dobrym sposobem będzie zapamiętanie poziomu głośności przy rozruchu aplikacji oraz jej przywrócenie tuż przed zakończeniem pracy procesu aplikacji. Możesz te operacje wykonać w zdarzeniach TForm.OnCreate oraz TForm.OnDestroy, albo w głównym pliku projektu, na początku i końcu głównego bloku kodu.

Można też zabezpieczyć się, czyli zarejestrować dodatkową procedurę za pomocą AddTerminateProc, która będzie wykonywana, jeśli aplikacja będzie zmuszona do awaryjnego wyłączenia się (Application.Terminate). Oczywiście tylko i wyłącznie w przypadku, gdy przed crashem programu, bieżący poziom głośności został prawidłowo pobrany i zapamiętany.

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