Musik leiser wenn Key gedrückt, nicht dauerhaft leise

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Quakxi.

    Musik leiser wenn Key gedrückt, nicht dauerhaft leise

    Ich bastle gerade an einem Media-Player, welcher wenn man eine vordefinierte Taste drückt leise werden soll, er soll nicht pausieren oder ähnl.
    Dazu verwende ich den Win eigenen Media-Player.

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    2. If GetAsyncKeyState(Keys.T) = pressed Then
    3. hear = True
    4. Player.settings.volume = 10
    5. ElseIf GetAsyncKeyState(Keys.T) <> pressed Then
    6. hear = False
    7. Player.settings.volume = tmp
    8. End If
    9. End Sub


    tmp ist eine Varbiale mit einer definierten Lautstärke. Das ganze funktioniert auch halbwegs, wenn ich "T" dürcke, wird es leise aber bei jedem Tick wird es einmal kurz laut, die Musik hört sich somit sehr abgehackt an.
    Ich kann mir aber nicht vorstellen das es an der Key Abfrage liegt.
    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown:
    Warum polling, nutze das KeyDown-Event o.Ä.

    EDIT: Wer lesen kann ist klar im Vorteil, mein Fehler, sry.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

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

    Könntest du nicht noch eine Variable machen, bspw.

    VB.NET-Quellcode

    1. Dim isVolDown As Boolean = False
    Dann modifizierst du deine Timer-Abfrage so:

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    2. If GetAsyncKeyState(Keys.T) = pressed And Not isVolDown Then
    3. hear = True
    4. Player.settings.volume = 10
    5. isVolDown = True
    6. ElseIf GetAsyncKeyState(Keys.T) <> pressed And isVolDown Then
    7. hear = False
    8. Player.settings.volume = tmp
    9. isVolDown = False
    10. End If
    11. End Sub
    Twitch Viewer Display Chat-, Zuschauer- und Statistiktool für Streamer
    Versuch es so

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    2. Static vol As Integer = 0
    3. If GetAsyncKeyState(Keys.T) <> 0 AndAlso Player.setting.volume <> 10 Then
    4. vol = Player.settings.volume
    5. Player.settings.volume = 10
    6. Else
    7. Player.settings.volume = vol
    8. End If
    9. End Sub
    Ich versteh den Ansatz und finde ihn selbst gut, leider ist VB/Windoof nicht der selben Meinung und macht das gleiche wie vorher. Ich habe das ganze jetzt sehr unschön gelöst, aber es geht, wenn auch nur 100 Timerticks lang, was aber in dem Fall reicht.

    VB.NET-Quellcode

    1. Dim wait As Integer = 0
    2. If GetAsyncKeyState(Keys.T) = pressed Then
    3. hear = True
    4. Player.settings.volume = 10
    5. wait = 100
    6. ElseIf GetAsyncKeyState(Keys.T) <> pressed Then
    7. hear = False
    8. wait -= 1
    9. If wait < 0 Then
    10. Player.settings.volume = tmp
    11. End If
    12. End If

    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown: