[DirectX] AudioVideoPlayback

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Darkronight.

    [DirectX] AudioVideoPlayback

    Hi,

    Ich habe problem mit DirectX.AudioVideoPlayback. Wie kann ich verhindern das 1 datei mehrmals abgespielt wird. Habe das mit einer Listbox versucht zuunterbinden aber es geht leider. Und ich weiß auch nicht mehr weiter wie es gehen soll.

    VB.NET-Quellcode

    1. 'Play
    2. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    3. Try
    4. If ListBox1.SelectedItem = ListBox1.SelectedIndex Then
    5. AudioDatei = New Audio(ListBox1.SelectedItem)
    6. AudioDatei.Play()
    7. Timer1.Start()
    8. Else
    9. AudioDatei.Stop()
    10. End If
    11. Catch ex As Exception
    12. End Try
    13. End Sub
    Alles schön und gut aber was bringt es mir das Option Strict On weil wenn ich das rein mache kommen überall fehler obwohl der code geht. Und das mit List(Of verstehe ich nicht wirklich ich habe zwar etwas gefunden im netz aber dort war es schlecht erklärt bis garnicht.
    Solange du Option Strict On hast und der Code geht, dann ist es OK...
    Hinzu kommt, dass man vieles immer optimieren kann, was auch noch eine Qualitätssteigerung wäre...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also ich habe Von Vb verbesserungs vorschläge bekommen und zwar ich soll CStr oder CInt vor einige sachen machen ist das ok oder falsch ?


    Das mit list(of) hab ich einfach versucht irg. wie weiter zukommen aber es ich nicht so wirklich das ware. Nicht wundern wenn der code komplett falsch sein sollte ich habe einfach auf gut glück losgelegt.

    VB.NET-Quellcode

    1. Dim listtmp As New List(Of String)
    2. listtmp.Add(CStr(ListBox1.SelectedItem))
    3. For Each listtmp In ListBox1.ListBox1.Container.Components
    4. AudioDatei.Stop()
    5. Next

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

    Das kommt drauf an. Wenn der Wert bereits ein String ist, würde es DirectCast(value, String) wahrscheinlich mehr bringen, da das lediglich angibt, dass ein Wert vom Typ X auch vom Typ X ist und somit als solcher angesehn werden kann:

    VB.NET-Quellcode

    1. Dim obj As Object = "TestString"
    2. Dim strv1 As String = obj ' FALSCH!!
    3. Dim strv2 As String = DirectCast(obj, String) ' RICHTIG!!

    CStr würde ebenfalls gehen, ich denke aber, dass DirectCast effizienter ist, was die Laufzeit angeht, da es bei CType ebenfalls so ist:

    VB.NET-Quellcode

    1. Dim pt As Point = New Point(128, 256)
    2. Dim szv1 As Size = pt 'FALSCH!!
    3. Dim szv2 As Size = DirectCast(pt, Size) ' FALSCH!
    4. Dim szv3 As Size = CType(pt, Size) 'RICHTIG!!

    Da Size nicht das gleiche wie Point ist, aber eine Umwandlung ermöglicht wurde, da der Public Shared Widening Operator CType für Point festgelegt wurde:

    VB.NET-Quellcode

    1. Public Shared Widening Operator CType(ByVal point As Point) As Size
    2. Return New Size(point.X, point.Y)
    3. End Operator

    CStr, CInt, CUInt usw. sind eben solche CType-Anweisungen, die speziell für String, Int32/Integer und UInt32/UInteger existieren (sowie für alle anderen primitiven Typen, wie Long, Short, String, usw.).



    Edit zu Edit:

    VB.NET-Quellcode

    1. If listtmp.Contains(DirectCast(ListBox1.SelectedItem, String)) Then
    2. 'Liste enthaelt das Item
    3. Else
    4. 'nicht
    5. End If


    Gruß
    ~blaze~
    @~blaze~
    Danke für die umfangreiche erklärung und für deine hilfe.


    Irg. was mache ich immer noch falsch es wird die datei immer noch mehrfach abgespielt ?(

    VB.NET-Quellcode

    1. 'Play
    2. Dim listtmp As New List(Of String)
    3. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    4. AudioDatei = New Audio(DirectCast(ListBox1.SelectedItem, String))
    5. listtmp.Add(DirectCast(ListBox1.SelectedItem, String))
    6. If listtmp.Contains(DirectCast(ListBox1.SelectedItem, String)) Then
    7. AudioDatei.Stop()
    8. Else
    9. AudioDatei.Play()
    10. End If
    11. End Sub

    VB.NET-Quellcode

    1. If listtmp.Contains(DirectCast(ListBox1.SelectedItem, String)) Then
    2. If AudioDatei IsNot Nothing Then
    3. AudioDatei.Stop()
    4. End If
    5. Else
    6. AudioDatei = New Audio(DirectCast(ListBox1.SelectedItem, String))
    7. AudioDatei.Play()
    8. listtmp.Add(DirectCast(ListBox1.SelectedItem, String))
    9. End If

    Ich würde das mal so machen. Wenn es dann immer noch nicht funktioniert, müsstest du eventuell etwas mehr Code zeigen. Instanzierst du die Liste eventuell noch an anderen Orten?

    Gruß
    ~blaze~