[TuT] Bass.Dll Tutorial

03/21/2016 11:20 Coffee Time#1
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

Download: [Only registered and activated users can see links. Click Here To Register...]

Füge "Bass.Net.dll" als Verweis hinzu und lege die "bass.dll" zur deiner Anwendungs-Exe.

[Only registered and activated users can see links. Click Here To Register...]


Vorbereitung:
Code:
Imports Un4seen.Bass
So als nächstes muss im dem Formload Event die .dll "konfiguriert" werden
Code:
 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:
Code:
Public stream As Integer
als nächstes wird diese variable mit Informationen gefüttert
Code:
stream = Bass.BASS_StreamCreateFile("*Pfad zur Musikdatei*", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
nun wird die Musik gestartet
Code:
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
Code:
Dim peak(2) As Single
(die 2 in Klammern MUSS so bleiben wie sie ist)

mit
Code:
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
Code:
Dim rechts As Integer = (Math.Round(peak(1), 3) * 100)
        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
Code:
ProgressBar1.Value = rechts
      ProgressBar2.Value = links
So könnte es dann aussehen:
Code:
Imports Un4seen.Bass
Public Class Form1
    Public stream As Integer
    Public peak(2) As Single
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
        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)
        Bass.BASS_ChannelPlay(stream, False)
    End Sub
    Private Sub Peak_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Bass.BASS_ChannelGetLevel(stream, peak)
        Dim rechts As Integer = (Math.Round(peak(1), 3) * 100)
        Dim links As Integer = (Math.Round(peak(2), 3) * 100)
        Try
            ProgressBar1.Value = rechts
            ProgressBar2.Value = links
        Catch
        End Try
    End Sub
End Class
Visualisierung mit Einem Spectrum Analyzer
Ein spectrum mit der Bass.dll zu bekommen ist eigentlich sehr Easy was mann dazu braucht sind 2 Zeilen Code und eine Picturebox.

Das ist die erste Zeile
Code:
Public Spectrum As New Un4seen.Bass.Misc.Visuals
und die zweite Zeile
Code:
PictureBox1.Image = Spectrum.CreateSpectrumLine(stream, PictureBox1.Width, PictureBox1.Height, Color.Lime, Color.Red, Color.White, 8, 5, _
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
Also per ChannelGetData werden die Daten in ein Array Geladen

Code:
Dim FFT(2048) As Single
            Bass.BASS_ChannelGetData(Stream, value, BASSData.BASS_DATA_FFT256)
 Dim data(128) As Double           ' hier noch ein 2. Array damit wir später die richtige Frequenz herausfinden können
            For i = 0 To 128
                data(i) = value(i * 4)
            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

Code:
Dim 125Hz As Integer = (128 * 125 / 44100)
      Dim Freq as Integer
      Freq = data(125Hz)
das geht natürlich auch bei jeder anderen Frequenz.

Effekte Hinzuschalten am beispiel von Echo
Code:
Dim Echo As Integer
Dim p As New BASS_DX8_ECHO
        Echo = Bass.BASS_ChannelSetFX(Stream, BASSFXType.BASS_FX_DX8_ECHO, 0) 'Hier wird der effekt Intialisiert
        p.fLeftDelay = 333  ' Hier kann man die länge des echos einstellen
        p.fRightDelay = 333  ' Hier ebenfalls für den rechten Kanal
        p.fFeedback = 50
        p.fWetDryMix = 50
        Bass.BASS_FXSetParameters(Echo, p) ' hier wird der effekt Gesetzt
Und schon kommt ein Echo ! :)
Quelle: vb-paradise.de
(Me)
03/21/2016 23:14 Nanoxx™#2
Ist 1:1 von vb-paradise / Kombrinki

Wenn du es in C# übersetzt hättest OK... aber 1:1 Kopiert? :D


Edit:

Quote:
Originally Posted by Coffee Time View Post
Imports Un4seen.Bass
Public Class Form1
Public stream As Integer
Public peak(2) As Single
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
stream = Bass.BASS_StreamCreateFile("F:\Filme&Musik\Musik\P ink Floyd\Pink Floyd-Brick the Wall.mp3", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
Bass.BASS_ChannelPlay(stream, False)
End Sub
Private Sub Peak_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Bass.BASS_ChannelGetLevel(stream, peak)
Dim rechts As Integer = (Math.Round(peak(1), 3) * 100)
Dim links As Integer = (Math.Round(peak(2), 3) * 100)
Try
ProgressBar1.Value = rechts
ProgressBar2.Value = links
Catch
End Try
End Sub
End Class


[Only registered and activated users can see links. Click Here To Register...]

Dein ernst? :D
03/22/2016 11:29 Coffee Time#3
Quote:
Originally Posted by Nanoxx™ View Post
Ist 1:1 von vb-paradise / Kombrinki

Wenn du es in C# übersetzt hättest OK... aber 1:1 Kopiert? :D


Edit:





[Only registered and activated users can see links. Click Here To Register...]

Dein ernst? :D
Bearbeitet. Danke!
Vergessen hinterzugeben. Mich haben viele Gefragt wie ich mit Bass.DLL arbeite. Da ich kein Bock hatte ein TuT selber zu schreiben.. Dann eben Copy & Past. ^^