Lautstärke bei 0 bzw 100 begrenzen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von GS-APPS.

    Lautstärke bei 0 bzw 100 begrenzen

    Hallo habe schon seit 2 Tagen intensiv nach einer Funktion gesucht die die Lautstärke auf 0 bzw 100 begrenzt!

    Also meine Gedanken...

    Man sollte die Lautstärke mit einen Klick auf eine PictureBox steuern können:

    1. ABER nicht über 100 und unter 0 (siehe lauter, leiser) kann man das eleganter lösen ohne msgBox?
    2. Wenn man aus dem Mute wiederkommt (siehe stumm) sollte die Lautstärke in den Zustand vor dem "mute-Click" zurückspringen. (derzeit noch zurück auf Grundeinstellung)

    Und 3. was weniger die Lautstärke angeht:
    (siehe Texte von SHOUTcast2) während des laden der Texte friert das Programm ein
    Timer = 60 sekunden

    Ich hoffe ihr wisst wie ich das meine. und vielen vielen dank im Vorraus!

    "leiser"

    VB.NET-Quellcode

    1. Private Sub MinusBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MinusBox.Click
    2. If MediaPlayer.settings.volume = 0 Then
    3. MsgBox("Die Lautstärke ist bereits schon auf 0!", 1, "ACHTUNG")
    4. Else
    5. MediaPlayer.settings.volume = MediaPlayer.settings.volume - 1
    6. TrackBar1.Value = TrackBar1.Value - 1
    7. End If
    8. End Sub


    "stumm"

    VB.NET-Quellcode

    1. Private Sub MuteBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MuteBox.Click
    2. If MediaPlayer.settings.volume >= 1 Then
    3. MediaPlayer.settings.volume = 0
    4. TrackBar1.Value = MediaPlayer.settings.volume
    5. MuteBox.Image = My.Resources.Mute_on
    6. Else
    7. MediaPlayer.settings.volume = 15
    8. TrackBar1.Value = MediaPlayer.settings.volume
    9. MuteBox.Image = My.Resources.Mute_off
    10. End If
    11. End Sub


    "lauter"

    VB.NET-Quellcode

    1. Private Sub PlusBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlusBox.Click
    2. If MediaPlayer.settings.volume = 100 Then
    3. MsgBox("Die Lautstärke ist bereits schon auf 100!", 1, "ACHTUNG")
    4. Else
    5. MediaPlayer.settings.volume = MediaPlayer.settings.volume + 1
    6. TrackBar1.Value = TrackBar1.Value + 1
    7. End If
    8. End Sub


    "Texte von SHOUTcast2"

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim wc As New WebClient()
    3. Dim html As String = wc.DownloadString("http://IP:PORT/7.html?sid=1")
    4. Dim i1 As Integer = html.IndexOf("<body>")
    5. Dim i2 As Integer = html.IndexOf("</body>")
    6. Dim data As String = html.Substring(i1 + 6, i2 - i1 - 6)
    7. Dim fields() As String = data.Split(",")
    8. SC_titel.Text = fields(6)
    9. SC_shoutcast.Text = fields(5) & " kbps / " & fields(0) & " von " & fields(3) & " Hörer"
    10. End Sub


    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [* Neues Thema] klickt.
    CodeTags korrigiert
    ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Mir erschließt sich zwar noch nicht, was das mit WPF im Speziellen zu tun hat, aber wenn man das mal weglässt:
    Warum eine MessageBox, wenn man versucht, über 100 bzw unter 0 zu gehen? Einfach die MessageBox weglassen. Ich fände es ungeheuer nervig, wenn mir jedes mal beim Benutzen der Lauter-Taste, obwohl die Lautstärke auf Max ist, ne Meldung kommt. Kommentier mal als Einstieg die Zeilen 3 in Deiner PlusBox_Click und MinusBox_Click aus.
    Du willst die Lautstärkeeinstellung mithilfe einer PicBox machen. Ist das dann ein Bild eines Lautstärkereglers, bei dem dann die Klickposition die Lautstärke wiederspiegeln soll?
    Das mit Resume-From-Mute: Es gibt 3 Standard-Varianten:
    1. Die ganze Programmlogik in eine Klasse auslagern und bei MuteBox_Click erst die aktuelle Lautstärke in einer Klassenvariable speichern (VolumeBeforeMute = MediaPlayer.settings.volume, dann die Lautstärke auf Null setzen. Am besten noch merken, dass der Player auf Mute geschaltet wurde (per Klassenvariable isMute As Boolean, hier dann isMute = True setzen). Beim erneuten Aufruf isMute = False und Lautstärke aus der zwischengespeicherten Variable holen (MediaPlayer.settings.volume = VolumeBeforeMute).
    2. statische Variablen (semioptimal)
    3. globale Variablen (zur Vollständigkeit; die Beweisführung, dass diese Variante inakzeptabel ist, wurde schon 1000x erfolgreich abgeschlossen)
    Da muss noch einiges im bisherigen Code nachbearbeitet werden (Benutzer stellt Lautstärke auf Null, drückt 2x auf Mute. Oder 1x Mute und dann PlusBox_Click (sollte dann die alte Lautstärke +1 machen und nicht von Null ausgehen)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke erstmal das du so schnell geantwortet hast!
    jetzt kommen wir zum beantworten ;)

    VaporiZed schrieb:

    Mir erschließt sich zwar noch nicht, was das mit WPF im Speziellen zu tun hat, aber wenn man das mal weglässt:

    oh entschuldigung, da hab ich das falsche Label am anfang gewählt! welches müsste ich stattdessen wählen? da werde ich es auch abändern!

    VaporiZed schrieb:

    Warum eine MessageBox, wenn man versucht, über 100 bzw unter 0 zu gehen?

    das ist mnein Problem! Wenn du die in meinem Beitrag mal den Code von lauter bzw leiser anschaust dann wirst du bemerken das er (ohne der MsgBox) immer +1 bzw -1 schaltet und dann die begrenzung von 0 bzw 100 nicht beachtet und somit stürzt das Programm ab da ja der MediaPlayer bzw die Trackbar das minimun von 0 bzw das Maximum von 100 hat!

    VaporiZed schrieb:

    Ist das dann ein Bild eines Lautstärkereglers, bei dem dann die Klickposition die Lautstärke wiederspiegeln soll?

    PlusBox , MinusBox und MuteBox sind alles jeweils eine PictureBox die das das jeweilige Bild anzeigt

    VaporiZed schrieb:

    Das mit Resume-From-Mute: Es gibt 3 Standard-Varianten:
    1. Die ganze Programmlogik in eine Klasse auslagern und bei MuteBox_Click erst die aktuelle Lautstärke in einer Klassenvariable speichern (VolumeBeforeMute = MediaPlayer.settings.volume, dann die Lautstärke auf Null setzen. Am besten noch merken, dass der Player auf Mute geschaltet wurde (per Klassenvariable isMute As Boolean, hier dann isMute = True setzen). Beim erneuten Aufruf isMute = False und Lautstärke aus der zwischengespeicherten Variable holen (MediaPlayer.settings.volume = VolumeBeforeMute).
    2. statische Variablen (semioptimal)
    3. globale Variablen (zur Vollständigkeit; die Beweisführung, dass diese Variante inakzeptabel ist, wurde schon 1000x erfolgreich abgeschlossen)
    Da muss noch einiges im bisherigen Code nachbearbeitet werden (Benutzer stellt Lautstärke auf Null, drückt 2x auf Mute. Oder 1x Mute und dann PlusBox_Click (sollte dann die alte Lautstärke +1 machen und nicht von Null ausgehen)


    ok danke für die Lösungsansätze!

    GS-APPS schrieb:

    das ist mnein Problem! Wenn du die in meinem Beitrag mal den Code von lauter bzw leiser anschaust dann wirst du bemerken das er (ohne der MsgBox) immer +1 bzw -1 schaltet und dann die begrenzung von 0 bzw 100 nicht beachtet und somit stürzt das Programm ab da ja der MediaPlayer bzw die Trackbar das minimun von 0 bzw das Maximum von 100 hat!


    Nein, denn ich sag ja nur: Kommentier die MessageBox weg. Von dem If-Statement hab ich nix gesagt:

    VB.NET-Quellcode

    1. Private Sub PlusBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlusBox.Click
    2. If MediaPlayer.settings.volume = 100 Then
    3. 'MsgBox("Die Lautstärke ist bereits schon auf 100!", 1, "ACHTUNG")
    4. Else
    5. MediaPlayer.settings.volume += 1
    6. TrackBar1.Value += 1
    7. End If
    8. End Sub


    Die Lautsärke wird immer noch erst dann geändert, wenn es noch nicht auf Max ist. Wenn doch, dann passiert nix, eben so, wie es für den Benutzer angenehm wäre bzw. er erwarten würde.

    EDIT:
    Alternativ/Besser:

    VB.NET-Quellcode

    1. Private Sub PlusBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlusBox.Click
    2. If MediaPlayer.settings.volume = 100 Then Exit Sub
    3. MediaPlayer.settings.volume += 1
    4. TrackBar1.Value += 1
    5. End Sub


    Oder auch

    VB.NET-Quellcode

    1. Private Sub PlusBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlusBox.Click
    2. If MediaPlayer.settings.volume < 100 Then
    3. MediaPlayer.settings.volume += 1
    4. TrackBar1.Value += 1
    5. End If
    6. End Sub
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    GS-APPS schrieb:

    Lautstärke mit einen Klick auf eine PictureBox steuern
    Warum willst du das mit einer Picturebox machen, die du als Button missbrauchst? Wenn du einen Button brauchst, nimm die Klasse Button her.
    Da du hier aber einen Werte-Regler brauchst, empfehle ich dir die Klasse TrackBar. Der weißt du als Minimalwert 0 und als Maximalwert 100 zu. Anschließend änderst du im ValueChanged Event den Wert der aktuellen Lautstärke.

    GS-APPS schrieb:

    ohne msgBox?
    Durch Verwendung einer TrackBar bist du das MsgBox'en los ;D
    Außerdem: Bitte kein MsgBox. Nimm lieber MessageBox aus System.Windows.Forms her!

    GS-APPS schrieb:

    Wenn man aus dem Mute wiederkommt (siehe stumm) sollte die Lautstärke in den Zustand vor dem "mute-Click" zurückspringen.
    Da Mute eine Eigenschaft des Players ist (sein sollte), kannst du mit Klick auf den Mute Button und im Click Event des Buttons einfach die Mute Property des Players auf [tt]True setzen[/tt].

    GS-APPS schrieb:

    eleganter lösen
    Siehe oben (TrackBar)

    Lg Radinator

    Edit: Aaarg...lesen, dann schreiben *augen-rollen*
    Hab grad erst realisiert, dass du eine TrackBar bereits verwendest. Dazu aber eine Frage: Warum nimmst du eine Trackbar her, willst aber die Lautstärke immer nich mit einem andern Control regeln? Sieht für mich iwie so aus, als wolltest du ein Auto mit einem Fahrrad antreiben (hoff der Vergleich / die Analogie kommt richtig rüber). Der Regler ist ja zum regeln da und nicht um geregelt zu werden.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    Radinator schrieb:

    Dazu aber eine Frage: Warum nimmst du eine Trackbar her, willst aber die Lautstärke immer nich mit einem andern Control regeln? Sieht für mich iwie so aus, als wolltest du ein Auto mit einem Fahrrad antreiben (hoff der Vergleich / die Analogie kommt richtig rüber). Der Regler ist ja zum regeln da und nicht um geregelt zu werden.


    siehste! jetzt merk ich meinen dummen Denkfehler! ist mir vor lauter basteln garnit aufgefallen! Danke für den Hinweis!

    VaporiZed schrieb:

    EDIT:
    Alternativ/Besser:

    VB.NET-Quellcode

    1. Private Sub PlusBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlusBox.Click
    2. If MediaPlayer.settings.volume = 100 Then Exit Sub
    3. MediaPlayer.settings.volume += 1
    4. TrackBar1.Value += 1
    5. End Sub


    die Lösung find ich gut!

    CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()