Wie am besten musik abspielen (Versuch mit der Bass.dll), Funktionen

  • VB.NET

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

    Wie am besten musik abspielen (Versuch mit der Bass.dll), Funktionen

    Hi,

    Ich bin am überlegen mit was man am besten musik abspielen könnte. Immoment benutze ich DirectX.AudioVideoPlayback hatte es auch mal mit dem Media player versucht dieser war aber nach einigen versuchen schrott und unbrauchbar. Und da DirectX.AudioVideoPlayback nicht mehr die aktuellesten musik daten (ID3v2.4)abspielen kann suche ich jetzt nach einer alternatieve. Auch bass.dll hatte ich versucht dort gab es jedoch auch nur fehler die ich nicht beheben konnte und auch nicht wirklich wollte.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Darkronight“ () aus folgendem Grund: Fragestellung hat sich geändert

    so war das nicht gemeint ich hatte es mehre male versucht und auch im www gesucht nach lösungen. nach den das gescheitert war hatte ich auf deutsch gesagt die schnautze voll und bin zu dem alt bewerten wieder zurück gegangen was auch geht. ich würde auch gerne weiter dabei bleiben wenn es alles unterstützen würde was es ja leider nicht mehr tuht.
    Ich bin zwar bei weitem kein Fan von bass aber beim installer für den .net wrapper werden jeeede menge Beispiele mit installiert. Außerdem hast du dann auch eine Dokumentenation. Mit beidem ist es leicht zu schaffen. Ansonsten stelle konkrete Fragen was nicht funktioniert.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Nagut ich habe es mit der bass.dll nochmals versucht und promt wieder fehler bekommen. Der feherl kommt in zeile 9 wo die dll configuriert wird.

    Fehler:

    Quellcode

    1. Ein Aufruf an die PInvoke-Funktion "Bass.Net!Un4seen.Bass.Bass::BASS_Init" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.


    Code:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Un4seen.Bass
    3. Public Class Form1
    4. Dim stream As Integer
    5. Dim peak(2) As Single
    6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
    8. End Sub
    9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    10. stream = Bass.BASS_StreamCreateFile(TextBox1.Text, 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
    11. Bass.BASS_ChannelPlay(stream, False)
    12. End Sub
    13. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    14. Bass.BASS_ChannelGetLevel(stream, peak)
    15. Dim rechts As Integer = CInt((Math.Round(peak(1), 3) * 100))
    16. Dim links As Integer = CInt((Math.Round(peak(2), 3) * 100))
    17. Try
    18. ProgressBar1.Value = rechts
    19. ProgressBar2.Value = links
    20. Catch
    21. End Try
    22. End Sub
    23. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    24. Bass.BASS_ChannelStop(stream)
    25. End Sub
    26. End Class
    die trackbarwerte vor dem abspielen setzen

    VB.NET-Quellcode

    1. Private Sub Songslide_init()
    2. Channel_Len = Bass.BASS_ChannelGetLength(_strm, BASSMode.BASS_POS_BYTES) 'Channel_Len as long
    3. MFH_SongSlider.Maximum = CInt(Bass.BASS_ChannelBytes2Seconds(_strm, Channel_Len))
    4. MFH_SongSlider.Value = 0
    5. End Sub


    beim scrollen dieses benutzen

    VB.NET-Quellcode

    1. Private Sub MFH_SongSlider_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MFH_SongSlider.Scroll
    2. If _strm <> 0 Then
    3. Dim pos As Long = MFH_SongSlider.Value
    4. If pos > -1 Then
    5. Bass.BASS_ChannelSetPosition(_strm, Bass.BASS_ChannelSeconds2Bytes(_strm, pos))
    6. tLength = CSng(Bass.BASS_ChannelBytes2Seconds(_strm, Channel_Len)) 'tLength as Single
    7. tElapsed = CSng(Bass.BASS_ChannelBytes2Seconds(_strm, Channel_Pos)) 'tElapsed as Single
    8. tRemain = tLength - tElapsed 'tRemain as Single
    9. lblStatusA.Text = Un4seen.Bass.Utils.FixTimespan(tElapsed, "HHMMSS")
    10. lblStatusB.Text = Un4seen.Bass.Utils.FixTimespan(tRemain, "HHMMSS")
    11. lblStatusC.Text = Un4seen.Bass.Utils.FixTimespan(tLength, "HHMMSS")
    12. End If
    13. End If
    14. End Sub
    Habe das mal so umgesetzt jedoch wird mir die aktuelle position in der trackbar nicht mit angezeigt. Irg was falsch gemacht ?

    VB.NET-Quellcode

    1. Dim Channel_Pos As Long
    2. Dim Channel_Len As Long
    3. Dim tLenght As Single
    4. Dim tElapsed As Single
    5. Dim tRemain As Single
    6. Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar2.Scroll
    7. If stream <> 0 Then
    8. Dim pos As Long = TrackBar2.Value
    9. If pos > -1 Then
    10. Bass.BASS_ChannelSetPosition(stream, Bass.BASS_ChannelSeconds2Bytes(stream, pos))
    11. tLenght = CSng(Bass.BASS_ChannelBytes2Seconds(stream, Channel_Len))
    12. tElapsed = CSng(Bass.BASS_ChannelBytes2Seconds(stream, Channel_Pos))
    13. tRemain = tLenght - tElapsed
    14. TextBox1.Text = Un4seen.Bass.Utils.FixTimespan(tElapsed, "HHMMSS") & vbNewLine & Un4seen.Bass.Utils.FixTimespan(tRemain, "HHMMSS") & vbNewLine & Un4seen.Bass.Utils.FixTimespan(tLenght, "HHMMSS")
    15. End If
    16. End If
    17. End Sub
    jo, ich kann mir vorstellen, daß du keinen timer startest wenn dein lied abgespielt wird, stimmts?
    die position muß ja ermittelt werden.
    bei jedem tick event wird die positions der trackbar gesetzt.

    bass bietet auch einen timer an, egal welchen du nimmst
    im timer kannste dann auch werte ermitteln für pegel, vergangene und restzeit
    usw.

    VB.NET-Quellcode

    1. If _strm <> 0 AndAlso Bass.BASS_ChannelPlay(_strm, False) Then
    2. 'hier den timer starten
    3. Else
    4. 'blabla
    5. End If


    kann mich erinnern, daß darüber schon in irgendeinem Thread geschrieben wurde.

    mfg OnkelR