Bass.Dll Tutorial

    • VB.NET

    Es gibt 115 Antworten in diesem Thema. Der letzte Beitrag () ist von AKP.

      Bass.Dll Tutorial

      Anhand dieses tut sollte jeder verstehen wie man eine Musik Datei mit der bass.dll abspielt

      Dieses Tutorial basiert auf bass.net da ich persönlich es einfacher finde
      link dazu : un4seen.com/download.php?z/4/Bass24.Net.zip



      Vorbereitung:
      nachdem ihr das Sdk installiert habt müsst ihr einen Verweis hinzufügen



      und dann die dll importieren

      VB.NET-Quellcode

      1. Imports Un4seen.Bass


      so als nächstes muss im dem formload Event die .dll "konfiguriert" werden

      VB.NET-Quellcode

      1. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)


      damit kann man festlegen wie viele Lautsprecher ihr zb. habt


      Abspielen der Musik Datei:

      als erstes muss eine globale Variable vom Typ Integer erstellt werden :

      VB.NET-Quellcode

      1. Public stream As Integer


      als nächstes wird diese variable mit Informationen gefüttert

      VB.NET-Quellcode

      1. stream = Bass.BASS_StreamCreateFile("*Pfad zur Musikdatei*", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)


      nun wird die Musik gestartet

      VB.NET-Quellcode

      1. Bass.BASS_ChannelPlay(stream, False)

      anstatt false kann man auch true einsetzen dann wird die muikdatei immer wieder von vorn abgespielt

      so die Musik spielt schon einmal nun kommen wir zum


      Peak auslesen

      die besten Ergebnisse erzielt ihr wenn ihr die folgenden Zeilen in einen timer packt und den Intervall auf 45 stellt

      wir brauchen diesmal ein Array und zwar nenne ich es mal

      VB.NET-Quellcode

      1. Dim peak(2) As Single

      (die 2 in Klammern MUSS so bleiben wie sie ist)

      mit

      VB.NET-Quellcode

      1. Bass.BASS_ChannelGetLevel(stream, peak)

      wird das array mit Informationen gefüttert

      und mit 2 weiteren variablen so ausgelesen das sie in einer progressbar oä. angezeigt werden können

      VB.NET-Quellcode

      1. Dim rechts As Integer = (Math.Round(peak(1), 3) * 100)
      2. Dim links As Integer = (Math.Round(peak(2), 3) * 100)

      anstatt alles Mal 100 zu nehmen kann man auch die Eigenschaft Maximum der progressbar auf 1 Stellen das macht keinen unterschied

      und hiermit wird’s angezeigt das brauch ich glaube ich nicht zu erklären :P

      VB.NET-Quellcode

      1. ProgressBar1.Value = rechts
      2. ProgressBar2.Value = links




      so könnte es dann aussehen

      VB.NET-Quellcode

      1. Imports Un4seen.Bass
      2. Public Class Form1
      3. Public stream As Integer
      4. Public peak(2) As Single
      5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      6. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
      7. stream = Bass.BASS_StreamCreateFile("F:\Filme&Musik\Musik\Pink Floyd\Pink Floyd-Brick the Wall.mp3", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
      8. Bass.BASS_ChannelPlay(stream, False)
      9. End Sub
      10. Private Sub Peak_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
      11. Bass.BASS_ChannelGetLevel(stream, peak)
      12. Dim rechts As Integer = (Math.Round(peak(1), 3) * 100)
      13. Dim links As Integer = (Math.Round(peak(2), 3) * 100)
      14. Try
      15. ProgressBar1.Value = rechts
      16. ProgressBar2.Value = links
      17. Catch
      18. End Try
      19. End Sub
      20. End Class




      Visualisierung mit Einem Spectrum Analyzer

      An dieser Stelle nocheinmal ein Dankeschön an nook :)

      Ein spectrum mit der Bass.dll zu bekommen ist eigendlich sehr Easy was mann dazu braucht sind 2 Zeilen Code und eine Picturebox

      das ist die erste zeile

      VB.NET-Quellcode

      1. Public Spectrum As New Un4seen.Bass.Misc.Visuals


      und die zweite zeile

      VB.NET-Quellcode

      1. PictureBox1.Image = Spectrum.CreateSpectrumLine(stream, PictureBox1.Width, PictureBox1.Height, Color.Lime, Color.Red, Color.White, 8, 5, _
      2. False, True, True)


      der aufbau ist quasi so

      Spectrum.CreateSpectrumLine(der channel,Breite der Visualisirung,Höhe der Visualisirung,Untere farbe des farbverlaufs,Obere Farbe des Farbverlaufs,Hintergrund Farbe,Breite der balken,Entfernung der balken zueinender,False,True,true)



      Amplitude von Bestimmten Frequenzen Auslesen

      So habe mal beschlossen mein Tutorial zu erweitern ;)

      also per ChannelGetData werden die daten in ein Array Geladen


      VB.NET-Quellcode

      1. Dim FFT(2048) As Single
      2. Bass.BASS_ChannelGetData(Stream, value, BASSData.BASS_DATA_FFT256)
      3. Dim data(128) As Double ' hier noch ein 2. Array damit wir später die richtige Frequenz herausfinden können
      4. For i = 0 To 128
      5. data(i) = value(i * 4)
      6. Next


      die Richtige Frequenz bekommt man dann mit einer Simplen formel raus ;)

      Arraylänge *gesuchte Frequenz / Samplingrate

      daraus kommt dann der Arrayindex von Data für die Frequenz

      VB.NET-Quellcode

      1. Dim 125Hz As Integer = (128 * 125 / 44100)
      2. Dim Freq as Integer
      3. Freq = data(125Hz)


      das geht natürlich auch bei jeder anderen Frequenz ;)

      (Teile Hiervon sind aus dem programm BassLightYear)




      Effekte Hinzuschalten am beispiel von Echo

      VB.NET-Quellcode

      1. Dim Echo As Integer
      2. Dim p As New BASS_DX8_ECHO
      3. Echo = Bass.BASS_ChannelSetFX(Stream, BASSFXType.BASS_FX_DX8_ECHO, 0) 'Hier wird der effekt Intialisiert
      4. p.fLeftDelay = 333 ' Hier kann man die länge des echos einstellen
      5. p.fRightDelay = 333 ' Hier ebenfalls für den rechten Kanal
      6. p.fFeedback = 50
      7. p.fWetDryMix = 50
      8. Bass.BASS_FXSetParameters(Echo, p) ' hier wird der effekt Gesetzt

      Und schon kommt ein Echo ! :)



      Equalizer
      der equalizer ist nun auch ein Bisschen Komplizirter deshalb habe ich dazu einfach ein Beispielprojekt Geschrieben es kann nur Musik abspieln und es hat halt einen 10 Band Equalizer

      Beispielprojekt Equalizer(VS 2010 Projektdatein)





      Beispiel Projekt (VS 2008 Projektdatein)


      ich entschuldige mich für die Rechtsschreibfehler und hoffe dass es manchen hilft

      mfg :thumbsup:

      Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „Kombrinki“ () aus folgendem Grund: Update 3.6.2010

      Hi
      erstmal danke für dein Tutorial
      Ich hatte schon mal probiert mit der Bass.dll zu arbeiten bin aber nicht zurecht gekommen.
      Es würde mich freuen wenn du es weiter ausbauen würdest.
      Zudem noch eine allgemeine information, für alle die die Bass.dll auf einem x64 Bit system benutzen wollen, müsst ihr
      euer Programm erst kompatiebel machen und das so:
      Express Edition:
      Schließen Sie das Projekt und/oder die Projektmappe.
      Klicken Sie im Menü Datei auf Datei öffnen.
      Wechseln Sie zum Projektverzeichnis, und markieren Sie die Projektdatei.
      Klicken Sie auf die Schaltfläche Öffnen. Die Projektdatei sollte nun im XML-Editor geöffnet werden.
      Suchen Sie nach dem ersten <PropertyGroup>-Abschnitt, und fügen Sie folgende Zeile ein:
      <PlatformTarget>x86</PlatformTarget>
      Speichern Sie die Projektdatei.
      Öffnen Sie das Projekt und/oder die Projektmappe erneut, indem Sie im Menü Datei auf Projekt/Projektmappe öffnen klicken.
      Fahren Sie mit dem Entwickeln, Debuggen und Testen fort.

      Lg
      Ich habe ma ne frage. Wenn ich eine .exe davon starte kommt so ein Vorschau Bild für die Bass.dll
      und da steht drinne das man die nur im privaten Bereich nutzen darf. Aldo dürfte ich jetzt nicht ein von mir erstelltes Programm damit hier in den Showroom stellen?
      „Ex-ter-mi-nate all knock-knock jokes! They are an enemy of the daleks “ A Dalek
      Mein Blog zum Thema Klarträumen
      @ Adam hast du..
      1.Das SDK installirt
      2. eine wma datei geladen du kannst nur:
      *.mp3;*.ogg;*.wav;*.mp2;*.mp1;*.aiff;*.m2a;*.mpa;*.m1a;*.mpg;*.mpeg;*.aif;*.mp3pro;*.bwf;*.mus datein laden
      für wma brauchste nen addon


      @ Pascal J.
      doch dürftest du! du darfst es blos nicht verkaufen und die verweise weiß ich auch nicht

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

      So, Da mich das auch interessiert, hier mal mein Code der funktioniert.

      VB.NET-Quellcode

      1. Private Declare Function BASS_Init Lib "bass.dll" (ByVal device As Integer, ByVal freq As UInteger, ByVal flags As UInteger, ByVal win As IntPtr, ByVal clsid As UInteger) As Boolean
      2. Private Declare Function BASS_ChannelGetLevel Lib "bass.dll" (ByVal handle As IntPtr, ByVal mode As Single()) As Integer
      3. Private Declare Function BASS_ChannelPlay Lib "bass.dll" (ByVal handle As IntPtr, ByVal restart As Boolean) As Boolean
      4. Private Declare Function BASS_StreamCreateFile Lib "bass.dll" Alias "BASS_StreamCreateFile" (ByVal mem As Boolean, ByVal file As String, ByVal offset As UInteger, ByVal offsethigh As UInteger, ByVal length As UInteger, ByVal lengthhigh As UInteger, ByVal flags As UInteger) As IntPtr
      5. Dim BASS_STREAM_PRESCAN As UInteger = &H20000
      6. Dim BASS_STREAM_AUTOFREE As UInteger = &H40000
      7. Public stream As IntPtr
      8. Public peak(2) As Single
      9. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      10. BASS_Init(-1, 44100, 1024, IntPtr.Zero, Nothing)
      11. stream = BASS_StreamCreateFile(False, "\\Home\trekstor (e)\Musik\Auto Auto3\01 - Crash (Album Version).mp3", 0, 0, 0, 0, BASS_STREAM_AUTOFREE Or BASS_STREAM_PRESCAN)
      12. BASS_ChannelPlay(stream, True)
      13. End Sub
      Nach ein paar veränderungen hab ich es noch zum laufen bekommen.

      VB.NET-Quellcode

      1. Imports Un4seen.Bass
      2. Public Class Form1
      3. Public stream As IntPtr
      4. Public peak(2) As Single
      5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      6. If (Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)) = False Then
      7. MessageBox.Show("Fehler beim Laden der Library")
      8. End if
      9. End Sub
      10. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      11. Bass.BASS_ChannelGetLevel(stream, peak)
      12. Dim rechts As Integer = (Math.Round(peak(1), 3) * 100).ToString
      13. Dim links As Integer = (Math.Round(peak(2), 3) * 100).ToString
      14. Try
      15. ProgressBar1.Value = rechts
      16. ProgressBar2.Value = links
      17. Catch
      18. End Try
      19. End Sub
      20. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      21. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
      22. stream = Bass.BASS_StreamCreateFile(OpenFileDialog1.FileName, 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
      23. Bass.BASS_ChannelPlay(stream, True)
      24. Timer1.Start()
      25. End If
      26. End Sub
      27. End Class


      MFG
      Werewolve :D

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

      Guten Tag,

      ich habe nun schon seit geraumer Zeit einen Umgang mit vb erlernt, doch leider scheitere ich an diesem Punkt. Mein Code sieht derzeit so aus:

      VB.NET-Quellcode

      1. Imports Un4seen.Bass
      2. Public Class Form1
      3. Public stream As Integer
      4. Private Declare Function BASS_Init Lib "bass.dll" (ByVal device As Integer, ByVal freq As UInteger, ByVal flags As UInteger, ByVal win As IntPtr, ByVal clsid As UInteger) As Boolean
      5. Private Declare Function BASS_ChannelGetLevel Lib "bass.dll" (ByVal handle As IntPtr, ByVal mode As Single()) As Integer
      6. Private Declare Function BASS_ChannelPlay Lib "bass.dll" (ByVal handle As IntPtr, ByVal restart As Boolean) As Boolean
      7. Private Declare Function BASS_StreamCreateFile Lib "bass.dll" Alias "BASS_StreamCreateFile" (ByVal mem As Boolean, ByVal file As String, ByVal offset As UInteger, ByVal offsethigh As UInteger, ByVal length As UInteger, ByVal lengthhigh As UInteger, ByVal flags As UInteger) As IntPtr
      8. Dim BASS_STREAM_PRESCAN As UInteger = &H20000
      9. Dim BASS_STREAM_AUTOFREE As UInteger = &H40000
      10. Public stream As IntPtr
      11. Public peak(2) As Single
      12. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      13. BASS_Init(-1, 44100, 1024, IntPtr.Zero, Nothing)
      14. stream = BASS_StreamCreateFile(False, "My.Resources.techno.mp3", 0, 0, 0, 0, BASS_STREAM_AUTOFREE Or BASS_STREAM_PRESCAN)
      15. BASS_ChannelPlay(stream, True)
      16. End Sub
      17. End Class


      Aus unerfindlichen Gründen, kommt keine Musik. Ich habe etwas von dem einfügen einer dll gehört, nur leider weiß ich überhaupt nich woher ich diese bekommen soll, bzw wo ich diese hinkopieren muss.

      Wäre freundlich wenn mir da jemand weiterhelfen könnte.
      MfG, lace
      Du hast anscheint kein Strict On, weil irgendwie ist diese Zeile ein ziemlich schlechter um nicht zu sagen bescheuerter Code Stil

      VB.NET-Quellcode

      1. Dim rechts As Integer = (Math.Round(peak(1), 3) * 100).ToString
      2. Dim links As Integer = (Math.Round(peak(2), 3) * 100).ToString


      Variablen von Datentyp Integer und die Werte ToString() ... ja ne ist klar löl

      BASS_ChannelIsActive

      moin moin,

      weiß jemand von Euch, wie unter VB2008 die BASS_ChannelIsActive Methode verwendet wird? Mein Player läuft mit Play/Stop/Länge und so, aber diese Statusabfrage bekomme ich einfach nicht hin.

      Gruß

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mepema“ () aus folgendem Grund: Problem gelöst!