Problem mit *.wer-Datei

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

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    Hab den Übeltäter gefunden. Jedenfalls kam jetzt nach paar Stunden ein Fehler. Zwar ohne dass mein AV meckert, aber das liegt wohl daran dass VS den Fehler davor schon abgefangen hat denke ich...

    Tritt hier in Zeile 4 auf:

    VB.NET-Quellcode

    1. Private Sub AktualisiereAbspielFortschritt(ByVal sender As Object, ByVal e As EventArgs)
    2. Dim Position As Long = Bass.BASS_ChannelGetPosition(stream)
    3. NeueAbspielPosition = Position
    4. AktuellerAbspielFortschritt = CInt(Position)
    5. AktuellGespielteZeit = GespielteZeit(stream)
    6. AktuellVerbleibendeZeit = VerbleibendeZeit(stream)
    7. End Sub


    Und zwar krieg ich da diesen Fehler:

    System.OverflowException
    Die arithmetische Operation hat einen Überlauf verursacht.

    Was ich jetzt mache ist klar:
    Ich rufe diese Sub einfach nicht mehr auf, wenn die Musik ein Stream ist und nicht eine Datei von Platte...

    Aber was heisst das genau? Dass Position nicht im Bereich -32768 bis 32768 ist?

    __________________

    Was die Metadaten angeht:

    GetFromURL liefert auch so einige Formate:

    This method first tries to get streaming header information via BASS_TAG_ICY and BASS_TAG_HTTP. Then it tries the following tags in that order: BASS_TAG_META, BASS_TAG_OGG, BASS_TAG_APE and BASS_TAG_WMA.

    Aber ob es jetzt sein kann, dass AV da meckert, ist natürlich ein Punkt, da müsste ich mal den Ian fragen ob er da tastsächlich nochmal eine erneute Verbindung aufbaut.

    Auch bietet mir da ChannelGetTags noch eine Stange mehr Formate, aber ich bekomme da einen Fehler in Zeile 4 wenn ichs so mache wie im Docs-Beispiel:

    System.InvalidCastException: "Ungültige Konvertierung von der Zeichenfolge StreamTitle='G-UNIT FEAT. JOE - in Typ Long.".

    Versteh ich nicht, was will er denn mit Long? tags ist doch ein String-Array?

    VB.NET-Quellcode

    1. Dim tag As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META)
    2. Dim tags As String() = Utils.IntPtrToArrayNullTermUtf8(tag)
    3. If tags IsNot Nothing Then
    4. For Each tag In tags
    5. Console.WriteLine("Tag: {0}" + ControlChars.Lf, tag)
    6. Next tag
    7. End If

    kafffee schrieb:

    Die arithmetische Operation hat einen Überlauf verursacht.


    Da: CInt(Position)

    Position ist ein Long
    Range von Long: -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
    Range von Integer: -2.147.483.648 bis 2.147.483.647

    Was wenn "Position" zu niedrig oder zu hoch ist? Dann fliegt dir genau sowas um die Ohren wegen dem CInt.


    PS
    @kafffee

    VB.NET-Quellcode

    1. Dim tag As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META)
    2. Dim tags As String() = Utils.IntPtrToArrayNullTermUtf8(tag)
    3. If tags IsNot Nothing Then
    4. For Each tag In tags
    5. Console.WriteLine("Tag: {0}" + ControlChars.Lf, tag)
    6. Next tag
    7. End If

    Du hast "tag" 2 mal definiert. Einmal als IntPtr und einmal nutz du es als String in der Schleife¿?

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    DTF schrieb:

    Du hast "tag" 2 mal definiert. Einmal als IntPtr und einmal nutz du es als String in der Schleife¿?

    mmmmhhh klar :) jetzt gehts... muss man den String dann halt noch parsen...

    Mal noch ne Frage:

    Macht das Sinn, das z.B. so zu machen?:

    VB.NET-Quellcode

    1. Dim tag As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META Or BASSTag.BASS_TAG_OGG Or BASSTag.BASS_TAG_ID3)


    oder würdest du bei jedem prüfen, ob es was zurückgibt, weil du hattest ja erwähnt, dass du das so machst bzw. hab ich so verstanden...

    VB.NET-Quellcode

    1. If Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META) IsNot Nothing Then
    2. 'Ausgabe
    3. ElseIf Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_OGG) IsNot Nothing Then
    4. 'Ausgabe
    5. [...]
    6. End If


    Edit: Anstatt die Abspielposition bei Streams zu deaktivieren, kann ich ja zusätzlich noch AktuellerAbspielFortschritt As Long machen. Einen Datentyp mit unendlicher Range gibt es ja nach meiner Recherche nicht??

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

    kafffee schrieb:

    Macht das Sinn, das z.B. so zu machen?:


    Doku!
    Parameters
    handleType: System.Int32 The channel handle...a HMUSIC or HSTREAM.
    tagsType: Un4seen.Bass.BASSTag The tags/headers wanted... one of the following (see BASSTag):


    kafffee schrieb:

    Einen Datentyp mit unendlicher Range gibt es ja nach meiner Recherche nicht??


    Schon durch den Speicher der irgendwann ausgeht geht das garnicht. Aber gibt noch größere z.B. BigInteger. Kannst auch selbst einen machen.

    BASS_ChannelGetTags gibt doch IntPtr, da prüfe ich ob das 0(IntPtr.????) ist.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Könnte man so nennen, aber richtig wäre ein Werte-Typ. Also eine Struktur wo dann die ganzen operatoren implementiert sind und eine variable für den Wert drin ist. So kannste dir auch was machen um Apfel + Birne zu rechnen.
    learn.microsoft.com/en-us/dotn…how-to-define-an-operator
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „DTF“ ()