Verzögerung bei Soundwiedergabe mit My.Computer.Aduio.Play

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Verzögerung bei Soundwiedergabe mit My.Computer.Aduio.Play

    Hallo
    Ich habe gerade eine Funktion gefunden zum abspielen von Sounds
    My.Computer.Audio.Play(My.Resources.EANNotfound, AudioPlayMode.Background)
    Diese habe ich nun in meiner EAN Code Suche eingebaut. Die EAN Code Suche habe ich über das KeyPress Event realisiert.
    Nach druck auf Enter werden die letzten 13 (oder 12, oder 8 - je nach Einstellung) eingegebenen Ziffern zu einer Kette zusammengefügt und nach dieser wird dann das DataSet durchforstet.
    Auf die Art funktioniert das ganze mit jedem Barcode Scanner, oder das ein Control (Textbox, o.ä.) ausgewählt sein muss.
    Wenn der EANCode gefunden wurde wird der Artikel im DataSet selektiert, wird der Code nicht gefunden, erscheint eine Userform, mit entsprechender Meldung, die nach 1 Sek wieder verschwindet. Das ganze wird nun mit Tönen untermalt.


    VB.NET-Quellcode

    1. Private Sub StartEANSearch()
    2. 'Variablendeklaration
    3. 'Ean Codes für EAN 13 zusammenbauen
    4. If SearchEAN13 AndAlso Ean.Length > 12 Then
    5. If Ean.Length > 13 Then
    6. EAN13 = Ean.Substring(0, 13) 'EAN auf 13 Zeichen runtertrimmen
    7. Else
    8. EAN13 = Ean
    9. End If
    10. End If
    11. 'Nach EAN13 suchen - und Sub verlassen, wenn gefunden
    12. If EANSearch(EAN13) Then
    13. My.Computer.Audio.Play(My.Resources.EANfound, AudioPlayMode.Background)
    14. Ean = ""
    15. If AutoIncrement Then AddAmount()
    16. IncreaseAmount()
    17. Exit Sub
    18. End If
    19. 'Suche nach EAN12 und EAN8 - je nach Einstellungen - nach dem gleichen Prinzip
    20. My.Computer.Audio.Play(My.Resources.EANnotfound, AudioPlayMode.Background)
    21. Dim Messageform As New frmMessage
    22. With Messageform
    23. .SetDisplayText = "Ean Code " & Ean & " wurde nicht gefunden."
    24. .SetDisplayTime = 1
    25. .SetAutoClose = True
    26. .ShowDialog()
    27. End With
    28. Ean = ""
    29. End Sub


    Es kommt jedoch bei der Wiedergabe des Sounds zu einer kleinen Verzögerung.
    Schön sieht man das, wenn kein EAN gefunden wurde. Nun wird der Sound gespielt und danach die frmMessage für 1 Sekunden angezeigt.
    Der Sound setzt aber erst kurz bevor die Form wieder geschlossen wird ein, also mit knapp 1 Sekunde Verzögerung. Bei den beiden Dateien in den Ressourcen handelt es sich um wav Dateien, die Wiedergabe des Sounds startet im MediaPlayer unmittelbar.
    Kann man dies irgendwie beschleunigen?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    DerSmurf schrieb:

    VB.NET-Quellcode

    1. My.Computer.Audio.Play(My.Resources.EANnotfound, AudioPlayMode.Background)
    Ändere mal den Parameter AudioPlayMode.Background testweise zu WaitToComplete.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ändert leider auch nichts.
    Natürlich wird jetzt erst der Sound wiedergegeben und dann die Form angezeigt.
    Allerdings kommt der Sound immer noch etwas verzögert - ca. eine halbe Sekunde (habe nicht nachgemessen)

    Außerdem habe ich noch Systemsounds probiert, um auszuschließen, dass es an den Dateien in den Ressourcen liegt.
    Aber ​ My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk) bringt keine Verbesserung.
    @DerSmurf Dann probier mal die .NET-Variante:
    System-Sounds:

    VB.NET-Quellcode

    1. System.Media.SystemSounds.Asterisk.Play()
    Eigene Sounds:

    VB.NET-Quellcode

    1. Using soundPlayer = New SoundPlayer(@"c:\Windows\Media\tada.wav")
    2. soundPlayer.Play() ' oder soundPlayer.PlaySync()
    3. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Super. Das scheint mir etwas schneller zu gehen.
    Sollte mir so reichen. Hauptsache der Ton ist schneller als der Barcode Scanner.

    Edit: noch eine Frage dazu.
    Wird der Soundplayer automatisch disposed, auch wenn kein End Using erfolgt, oder habe ich nach einer größeren Bestellung 300 Soundplayer?
    Beispiel:

    VB.NET-Quellcode

    1. Private sub test
    2. Using Soundplayer = new SoundPlayer(@"C:\windows\media\tada.wav")
    3. 'EAN Code Suche
    4. 'EAN Code gefunden
    5. Soundplayer.play()
    6. exit sub
    7. end using


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DerSmurf“ ()

    DerSmurf schrieb:

    oder habe ich nach einer größeren Bestellung 300 Soundplayer
    Die Frage ist, ob er und wenn ja mit welchen unmanaged Ressourcen er arbeitet. Eine WAVE sieht iwie danach aus.
    Wenn eine Klasse IDisposable implementiert, solltest Du auch die Instanz disposen, und das geht nun mal am besten mit Using.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!