none
Windows Lautstärke feststellen RRS feed

  • Frage

  • Hallo,

    bei YouTube stört mich die laute Werbung. Auch mitten in Filmen oder am Anfang. Wollte mir etwas schreiben wo ich die Lautstärke auf Zimmerlautstärke begrenzen kann. (Einfacher Windows 8.1 Laptop.)  Unten ist das was ich gefunden habe und was funktioniert.

    Im Code sind es Buttons. Es würde dann über eine Timer Funktion gehen die wenn es lauter wird auf den gewünschten Maximalwert herabregelt und dann wieder auf den Ausgangswert.

    Aber: Wie kann ich die aktuelle Lautstärke feststellen? Fast glaube ich so etwas geht nicht. Also einfach das zu Laute rausnehmen. 

    Grüße

    Markus 

    Imports System.Runtime.InteropServices

    Public Class Form1
       <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
       End Function

      Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long

       Const WM_APPCOMMAND As UInteger = &H319
       Const APPCOMMAND_VOLUME_UP As UInteger = &HA
       Const APPCOMMAND_VOLUME_DOWN As UInteger = &H9
       Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8

       Private Sub Button_Lauter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Lauter.Click
         SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_UP * &H10000)
       End Sub

       Private Sub Button_Leiser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Leiser.Click
         SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_DOWN * &H10000)
       End Sub

       Private Sub Button_TonAus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Ton_Aus.Click
         SendMessage(Me.Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_VOLUME_MUTE * &H10000)
       End Sub

     End Class


    • Bearbeitet Markus222 Montag, 13. Oktober 2014 10:28
    Montag, 13. Oktober 2014 10:26

Antworten

  • Hallo Markus,

    Wollte heute morgen beim Kaffee nur mal den Code ganz oben im Thema der der Lauter und Leiser stellt in eine Windows Store App kopieren.

    ich für meinen Teil glaube, dass sich die restliche Diskussion damit erst einmal erübrigt haben dürfte.

    Nichts für ungut aber entweder willst Du programmieren und beschäftigst dich damit oder eben nicht. Für "Ich will irgendwas zusammenklicken bzw. zusammenkopieren und das muss dann auch überall funktionieren" gibt es sicher andere Anlaufstellen.

    Wenn Du dir also selbst im Klaren bist, was Du eigentlich machen willst, melde dich nochmal hier, bedenke dann aber bitte auch, dass eine Windows Store/Phone App etwas komplett anderes ist als bspw. eine WinForms Anwendung. Daher kannst Du in vielen Fällen nicht davon ausgehen, dass etwas, was auf a funktioniert, das auch auf b tun wird.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 4. November 2014 08:08
    Moderator
  • Hallo Markus,

    deine Vorgehensweise ist ein Paradebeispiel, warum ich jedem raten würde, beim Programmieren mit einer Konsole anzufangen. Die GUI ist unter Windows in extrem viele Teile untergliedert, die Teilweise zu 100% inkompatibel zu einander sind.
    Es dauert erfahrungsgemäß einige Zeit bis man da durchsieht und das Wichtigste versteht.

    Windows Store Apps haben keinen Zugriff auf die nativen Windows Funktionen. Auch ein Handle wirst du so in der Art nicht finden. Beides sind Systeme, die Windows seit Jahren hat und die in den Apps endgültig heraus fielen, weil man sie i.d.R. nicht braucht.

    Das es nicht geht habe ich oben übrigens schon mal geschrieben.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Dienstag, 4. November 2014 16:07
    Moderator

Alle Antworten

  • Hallo Markus,

    mit einem Timer macht das wohl wenig Sinn denke ich.

    Ich würde versuchen (falls der Laptop ein internes Micro hat) den Lautstärkepegel über das Micro zu erfassen und bei entsprechend hohem Pegel die Lautstärke runter zu nehmen. Man könnte damit mal rum experimentieren. Vielleicht geht das ja.

    Gruß


    Jens Gerber

    Montag, 13. Oktober 2014 11:53
  • Hallo Jens,

    es war einfach nur eine Idee. Hatte Windows 8.1 erworben und dachte ich versuche mal eine sogenannte Windows Store App. Was kann man dafür nehmen. Nun gut mich stört die laute Werbung bei YouTube. Kennst du das?

    Wenn ich das auf einen (abstrakten) Wert begrenzen könnte. Das war die Idee. In den Store stellen würde ich es nicht. Nur um mal so was zu machen. Wenn es funktioniert vielleicht dann kostenlos.

    Also die laute Werbung oder laute Sequenzen in Filmen. Wenn man in einer Mietwohnung mit mehreren Parteien wohnt und morgens um 5 bei der Hausarbeit YouTube Videos ansieht muss man dauert rennen und nachregeln.

    Montag, 13. Oktober 2014 13:07
  • Hallo,
    dein Code zielt auf verschiedene WinAPI Funktionen ab. Auf diese könntest du aus Store Apps heraus schon mal gar nicht zugreifen. Diese sind dahin gehend schon eingeschränkt.

    Theoretisch sollte es in einer Desktopanwendung möglich sein, irgendwie heraus zu bekommen wenn eine Audioausgabe ihre Lautstärke ändert. Der Lautstärkemixer von Windows bekommt das schließlich auch irgendwie hin. Sobald nun die Lautstärke ein gewisses Level übersteigt könntest du den Regler entsprechend manipulieren.

    Die APIs von Windows sind aber meist sehr komplex. Unter Audio and Video erfährst du so ziemlich alles was zu Medien gehört. Das Problem dürfte aber ein vernünftig funktionierendes Event für die Lautstärkeänderung sein. Ein Timer wäre zunächst keine saubere Programmierlösung und weiterhin könnte diese unter Umständen nicht schnell genug reagieren. Als einzige Alternative sehe ich die von Jens vorgeschlagene Mikrofonmethode an.

     


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 13. Oktober 2014 13:28
    Moderator
  • Hallo Markus,

    wenn du gut programmieren kannst, dann solltest du dir mal die BASS-Komponente anschauen. Zu finden bei www.un4seen.com

    Mit Bass.Net kannst du richtig richtig viel anstellen, was mit Sound zu tun hat. Mit dieser Bibliothek könntest du so etwas problemlos programmieren. Problem ist nur, ab wann wird denn laut zu laut? Stell dir mal vor, in dem YouTube-Video wird sich in Zimmerlautstärke unterhalten, aber dann fällt ein Stift runter und in dem Video fangen 50 Leute an lauthals zu lachen. Aber "deine Idee" pegelt dann plötzlich den Ton runter. Das würdest selbst du als störend empfinden.

    Aber, bitte, probiere es aus.

    Aber vielleicht sollte man auch erwähnen, das YouTube komplett kostenlos ist. Aber wer finanziert denn diese irren vielen High-Tech-Server und Programmierer? Ich nenne dir mal ein super simples Beispiel: Meine Lebensgefährtin und ich, sind letzte Woche, auf den völlig bekloppten Gedanken gekommen, mit 40 und 41 Jahren, zu lernen, wie man einen Zauberwürfel löst. Haben uns auch dann einen für 15 Euro gekauft. Gelernt, haben wir das mit einem YouTube-Video. Und da kommt EINMAL in diesen 44-Minütigen-Video vor, dass eine Mercedes-Werbung kommt. Na mein Gott, der ist doch nun wirklich zu verkraften ;-)

    So, zurück zu deiner Fragestellung: Mit Bass.Net kannst du wirklich sehr sehr viel machen. Aber dein Vorhaben wird scheitern. Denn, wie schon gesagt, ab wann wird zu laut zu laut? Was ist wenn in dem YouTube-Video ein Schrei vorkommt? Eine Explosion? Ein lauter Lacher etc. Das Video wäre dann "unansehbar" weil ständig "dein Programm denkt" es wäre Werbung.

    Gruß
    Andy

    Mittwoch, 15. Oktober 2014 21:28
  • Hallo Andy,

    das war nett.

    Auch wenn es ein bisschen nach Werbung klingt..

    Bitte verzeih. Zur Zeit habe ich keine Zeit dafür. Und programmiere auch nicht. Ich denke ich würde so etwas gerne einfach mal machen. Also das Beschriebene. Was du verstanden hast. Ganz genau. Wenn das Lachen über den gewählten Wert hinaus geht ist es leiser. Weisst du? Es bleibt auf dem gewähltem Wert. Timer 1 Millisekunde.

    Es ist so ich wohne in einem Plattenbau und hier hört man jede Lebensäußerung im Beton (Hier gibt es eine Rechtscheibüberprüfung, schön danke!) und so kam ich drauf. Im Grunde ging es mir aber nur darüber wie das mit den Windows Store Apps ist. Wie gesagt kaum Zeit. Hoffe ich schaffe es so etwas zu machen. Aber Wie so etwas geht das weiss ja keiner.

    Deinen Tipp gucke ich mir an. Wenn es kostet scheidet es eher aus.


    • Bearbeitet Markus222 Mittwoch, 15. Oktober 2014 21:55
    Mittwoch, 15. Oktober 2014 21:52
  • Auch wenn es ein bisschen nach Werbung klingt..

    Bitte verzeih. Zur Zeit habe ich keine Zeit dafür. Und programmiere auch nicht.

    Erstens habe ich keine Werbung gemacht, sondern dir EINEN TIPP gegeben.

    Zweitens: Wenn du nicht programmierst, und erst recht nicht kannst, was willst du dann hier?

    (Den Rest von meinen Text habe ich gerade gelöscht, ich glaube, ich wurde ausfallend)

    Gruß
    Andy

    Mittwoch, 15. Oktober 2014 22:31
  • Andreas,

    ja. Den Tipp gucke ich mir natürlich an. Und ich habe schon gesehen das es für nicht kommerzielle Zwecke frei ist!

    Ich programmiere zur Zeit nicht. Aber das möchte ich gern machen! Was oben steht. Du brauchst schon nicht ausfallend werden.

    Guck ein paar Punkte habe ich auch. Vielleicht kann man meine Beiträge sehen. Das war ziemlich im grünen Bereich. Und so soll es sein. Sind immer nur Missverständnisse. Es ist die Zeit. Wie ich mich da bei dem BASS zurechtfinden kann. 

    Mittwoch, 15. Oktober 2014 22:48
  • Markus,

    du kannst BASS benutzen! Deine Anfrage war "Privat". Und dafür kannst du Bass bzw. Bass.Net nutzen. Es sei denn, du willst ein Programm schreiben, was du VERKAUFEN möchtest. Lies dir mal einfach mal alles durch:-)

    Sorry das ich kurz davor war ausfallend zu werden, aber, ich bleibe dabei, das was du dir wünscht, geht nicht! Es geht (meiner Meinung nach) entweder nur laut, oder nur leise. Es gibt natürlich noch eine andere Lösung, aber die kann und darf ich nicht nenne, weil, komplett illegal!

    Und nochmal (auch wenn es dir nicht gefällt): Das hier ist ein Forum FÜR PROGRAMMIERER! Diese haben hier manchmal ERSNHAFTE LOGISCHE Probleme bei ihren eigenen Programmen. Aber du wirst hier keinen finden, der für dich dein Programm schreibt.

    Es gibt hier, in diesem Forum, sehr sehr viele Leute, welche richtig was drauf haben. Aber diese krass kreativen Leute helfen nur, wenn sie erkenne, dass ,am wirklich hart daran arbeitet und selbst x-fach an die Wand gefahren ist. DANN kommen sie, und geben Code-Snippets.

    Aber es wird hier für dich keiner ein komplettes Programm schreiben, weil du keine Zeit hast!

    Und so bist du (aus meiner Sicht) rübergekommen. Vielleicht liege auch ich falsch...

    Gruß
    Andy

    Mittwoch, 15. Oktober 2014 23:07
  • Andy, die Eingangsfrage war ob und wie ich die aktuelle Lautstärke feststellen kann damit ich im Bedarfsfall APPCOMMAND_VOLUME_DOWN aufrufen kann. Für einen einfachen Standard Windows Rechner. APPCOMMAND_VOLUME_DOWN regelt jeweils etwas herunter. APPCOMMAND_VOLUME_UP regelt jeweils etwas herauf. Das könnte ich benutzen. Nur hatte ich halt keine Möglichkeit gefunden wie das Programm erfahren kann ob das eine oder das andere notwendig ist.

    Die Frage ist also klar. Ob so eine Komponente notwendig ist weiß ich nicht. Es geht mir nur um diese Abfrage. Vielleicht stelle ich diese Frage noch mal im englischsprachigem Forum. Glaube das ist etwas mehr frequentiert.         Danke für deine Kritik. Aber es war nur eine kleine Frage.
    Donnerstag, 16. Oktober 2014 06:01
  • Hallo Markus,

    Andy, die Eingangsfrage war ob und wie ich die aktuelle Lautstärke feststellen kann damit ich im Bedarfsfall APPCOMMAND_VOLUME_DOWN aufrufen kann. Für einen einfachen Standard Windows Rechner. APPCOMMAND_VOLUME_DOWN regelt jeweils etwas herunter. APPCOMMAND_VOLUME_UP regelt jeweils etwas herauf.

    In der folgenden Diskussion hatte der Fragestellende den gleichen Ansatz und scheint eine Lösung gefunden zu haben (C# Dlls). Hoffentlich hilft sie auch in Deinem Fall:

    About Getting the Runtime Sound Volume Level in C#

    Grüße,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 23. Oktober 2014 07:53
    Administrator
  • Hallo Dimitar,

    danke für deine Antwort. Hatte länger nicht mich darum gekümmert.

    Wollte heute morgen beim Kaffee nur mal den Code ganz oben im Thema der der Lauter und Leiser stellt in eine Windows Store App kopieren.

    Es kam die Fehlermeldung:

    Error 3 'Handle' is not a member of 'App1.MainPage'. 

    Wie ist das nun mit diesen Anwendungen? Wenn es bei dieser Idee nur darum geht mal so eine App zu schreiben um zu sehen wie das geht, wie kommt man dann in die Lage diese Meldung zu deuten?

    Ist also obiger Code in Windows Store Apps nicht möglich? Oder geht es, nur anders?


    • Bearbeitet Markus222 Dienstag, 4. November 2014 06:05
    Dienstag, 4. November 2014 06:05
  • Hallo Markus,

    Wollte heute morgen beim Kaffee nur mal den Code ganz oben im Thema der der Lauter und Leiser stellt in eine Windows Store App kopieren.

    ich für meinen Teil glaube, dass sich die restliche Diskussion damit erst einmal erübrigt haben dürfte.

    Nichts für ungut aber entweder willst Du programmieren und beschäftigst dich damit oder eben nicht. Für "Ich will irgendwas zusammenklicken bzw. zusammenkopieren und das muss dann auch überall funktionieren" gibt es sicher andere Anlaufstellen.

    Wenn Du dir also selbst im Klaren bist, was Du eigentlich machen willst, melde dich nochmal hier, bedenke dann aber bitte auch, dass eine Windows Store/Phone App etwas komplett anderes ist als bspw. eine WinForms Anwendung. Daher kannst Du in vielen Fällen nicht davon ausgehen, dass etwas, was auf a funktioniert, das auch auf b tun wird.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 4. November 2014 08:08
    Moderator
  • Hallo Stefan,

    es ging mir darum ob und wie ich diesen SendMessage vielleicht doch in einer Windows Store App verwenden kann.

    In Windows Form Anwendungen kann als erstes Argument Me.Handle mitgegeben werden. Vielleicht kann man diesen Handle in einer Windows Store App herausbekommen?

    Bei einer Google Suche fand ich das unter dem folgenden Link:

    How to get "Window Handle for Windows Store Apps" using win32 API?

    Unten im letzten Beitrag ruft der Autor

    NativeMethods.GetWindowThreadProcessId(nextWindow, out procId)

    auf. Meine Frage ist auch:
    Wie kann ich nun herausfinden ob und wie dieser GetWindowThreadProcessId in einer Windows Store App geht?

    Im Netz ist eine Fülle von Infos. Aber wenn man so eine spezielle Fragestellung hat. Also fragte ich halt hier.

    Nichts für ungut.

    Grüße
    Markus

    Dienstag, 4. November 2014 08:21
  • Hallo Markus,

    deine Vorgehensweise ist ein Paradebeispiel, warum ich jedem raten würde, beim Programmieren mit einer Konsole anzufangen. Die GUI ist unter Windows in extrem viele Teile untergliedert, die Teilweise zu 100% inkompatibel zu einander sind.
    Es dauert erfahrungsgemäß einige Zeit bis man da durchsieht und das Wichtigste versteht.

    Windows Store Apps haben keinen Zugriff auf die nativen Windows Funktionen. Auch ein Handle wirst du so in der Art nicht finden. Beides sind Systeme, die Windows seit Jahren hat und die in den Apps endgültig heraus fielen, weil man sie i.d.R. nicht braucht.

    Das es nicht geht habe ich oben übrigens schon mal geschrieben.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Dienstag, 4. November 2014 16:07
    Moderator