Cover Probleme mit der Bass.dll

  • VB.NET

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

    Cover Probleme mit der Bass.dll

    Hallo zusammen,
    bin gerade dabei, eine Musiksoftware auf Basis der Bass.dll zu entwickeln und soweit funktioniert das auch ganz gut.

    Wenn ich über meine Funktion zum Auslesen von Tags nun ein neues Cover zuweisen will, sieht das so aus:

    VB.NET-Quellcode

    1. Cover.Image = Tags.PictureGetImage(0)


    Beim ersten Mal funktioniert das mit dem Zuweisen des Covers auch gut, aber danach wird das zuerst ausgelesene Cover einfach beibehalten.

    Habe schon versucht, vorher noch ein Cover.Image = Nothing oder danach ein Cover.Invalidate() einzufügen, aber es nützt nichts. Wäre schön, wenn mir jemand helfen könnte.
    Was hat das mit der Bass.dll zu tun?
    Kannst Du ein einfaches Bsispielprogramm machen, dass diesen Fehler reproduziert und den Quelltext posten?
    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!
    Das hat mit der Bass.dll zu tun, das über die Bass.dll eigene Funtkion PictureGetImage(0) ein Cover geladen wird. Ich habe schon die Vermutung, dass er dann entweder über diesen Befehl wieder das alte lädt, weil es noch irgendwo aktiv ist (sollte aber eigentlich ausgeschlossen sein) oder etwas darin verhindert, dass ich die PictureBox danach überschreiben kann.

    Hiermit ist es komplett reproduzierbar:

    VB.NET-Quellcode

    1. Imports Un4seen.Bass
    2. Public Class Test
    3. Dim Tags As New Un4seen.Bass.AddOn.Tags.TAG_INFO
    4. Dim Stream As Integer
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. With Dateiauswahl
    7. Do
    8. .Filter = _
    9. "MP3 Dateien (*.mp3)|*.mp3|WAV Dateien (*.wav)|*.wav|Audiodatei (*.mp3; *.wav; *.mod; *.mtm; *.s3m; *.xm; *.it; *.mo3)|*.mp3; *.wav; *.mod; *.mtm; *.s3m; *.xm; *.it; *.mo3|MPA Dateien (*.mpa)|*.mpa|MOD Dateien (*.mod)|*.mod|MTM Dateien (*.mtm)|*.mtm|S3M Dateien (*.s3m)|*.s3m|XM Dateien (*.xm)|*.xm|IT Dateien (*.it)|*.it|MO3 Dateien (*.mo3)|*.mo3" 'Endungen
    10. .FilterIndex = 1
    11. .InitialDirectory = Environment.SpecialFolder.MyMusic
    12. .Multiselect = False
    13. .FileName = ""
    14. .Title = "Wählen Sie eine Audiodatei aus"
    15. Loop Until CBool(DialogResult.OK) Or CBool(DialogResult.Abort) Or CBool(DialogResult.Cancel)
    16. If .ShowDialog() = Windows.Forms.DialogResult.OK Then
    17. Stream = Bass.BASS_StreamCreateFile(Dateiauswahl.FileName, 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
    18. End If
    19. If (Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(Stream, Tags)) Then
    20. PictureBox1.Image = Tags.PictureGetImage(0)
    21. End If
    22. End With
    23. End Sub
    24. Private Sub Test_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    25. BassNet.Registration("XXXXXXXXXXX", "2X28510231XXXXX")
    26. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero)
    27. End Sub
    28. End Class
    Hallo MrLeo

    1. TAG_INFO.PictureCount gibt dir die Anzahl der eingebetteten Pictures zurück, also hiermit erstmal prüfen.

    2.

    VB.NET-Quellcode

    1. If (Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(Stream, Tags)) Then
    2. PictureBox1.Image = Tags.PictureGetImage(0)
    3. End If

    Stream ist ein Integer, Du solltest dort lieber einen Dateipfad übergeben, gelle.


    3. Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(Stream, Tags) hat noch eine Überladung
    prescan oder sowas, damit kannste dich auch versuchen.

    Ansonsten, Tags auslesen mit einer anderen DLL, zB. taglib-sharp.dll
    Die Bass.Tags sind net besonders ausgereift.

    Gruß OnkelR

    MrLeo schrieb:

    VB.NET-Quellcode

    1. Loop Until CBool(DialogResult.OK) Or CBool(DialogResult.Abort) Or CBool(DialogResult.Cancel)
    Was soll das :?: :?: :?:
    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!
    Was soll das :?: :?: :?:


    Funktioniert bei mir bestens, damit der OpenFile Dialog solange geöffnet bleibt, bis eines der drei Ergebnisse eintritt.


    Danke an OnkelR, werde es so erstmal versuchen :)

    EDIT: Setze nun auf die Taglib-Sharp.dll und die ist tatsächlich deutlich besser. Funktioniert nun alles, wie es soll.

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

    MrLeo schrieb:

    damit der OpenFile Dialog solange geöffnet bleibt

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Using Dateiauswahl As New OpenFileDialog
    3. With Dateiauswahl
    4. .Filter = _
    5. "MP3 Dateien (*.mp3)|*.mp3|WAV Dateien (*.wav)|*.wav|Audiodatei (*.mp3; *.wav; *.mod; *.mtm; *.s3m; *.xm; *.it; *.mo3)|*.mp3; *.wav; *.mod; *.mtm; *.s3m; *.xm; *.it; *.mo3|MPA Dateien (*.mpa)|*.mpa|MOD Dateien (*.mod)|*.mod|MTM Dateien (*.mtm)|*.mtm|S3M Dateien (*.s3m)|*.s3m|XM Dateien (*.xm)|*.xm|IT Dateien (*.it)|*.it|MO3 Dateien (*.mo3)|*.mo3" 'Endungen
    6. .InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic)
    7. .Title = "Wählen Sie eine Audiodatei aus"
    8. If .ShowDialog() <> Windows.Forms.DialogResult.OK Then
    9. Return
    10. End If
    11. Stream = Bass.BASS_StreamCreateFile(Dateiauswahl.FileName, 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
    12. End With
    13. If (Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(Stream, Tags)) Then
    14. PictureBox1.Image = Tags.PictureGetImage(0)
    15. End If
    16. End Using
    17. End Sub
    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!