BASS.Dll Record Tutorial
Heute möchte ich euch zeigen, wie ihr mit der Bass.dll einen Stream (z.B. Onlineradio) aufnehmen könnt. Das ganze funktioniert über einen DOWNLOADPROC, welcher bereits von der Library zur verfügung gestellt wird. Das DOWNLOADPROC Objekt bekommt im Konstruktor eine Funktion übergeben - eine sogenannte Callback Funktion. Der gedanke davon ist, das diese innerhalb eines bestimmten Zeitraumes immer wieder aufgerufen wird und die Daten des aktuellen Streams in eine Datei schreibt. Also gucken wir uns das ganze mal an:
Die Un4seen.Bass Library brauchen wir logischerweise um die vollen Funktionen der DLL zu Nutzen. Den System.IO Import nutzen wir um einen Filestream zu erzeugen mit welchem wir später in die Datei schreiben. Nun erzeugen wir noch den Stream, welcher später gefüllt und abgespielt werden soll.
Nun benötigen wir noch ein paar globale Variablen, welche zum abspielen und aufnehmen benötigt werden.
Der Stream wird später mit Infos gefüllt und kann dann mit der dll abgespielt werden. Den Filestream benutzen wir um die Daten vom stream in einer Datei auf der Festplatte zu speichern und so den Stream aufzunehmen. Der DOWNLOADPROC nimmt im nächsten ein Funktion entgegen, in welcher wir den Stream speichern. Wir haben also totalen Einfluss darauf wie, wann und wo der Stream gespeichert werden soll. Das Byte Array nimmt die INformationen vom Stream entgegen, welche wir dann später in der Datei Speichern.
Als nächstes muss die Dll konfiguriert werden und der Stream, welchen wir abspielen wollen, mit Infos gefüllt werden. Dies geschiet so:
VB.NET-Quellcode
- Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
- myDownloadProc = New DOWNLOADPROC(AddressOf MyDownload)
- Dim url As String = "*Link zum Stream des Onlineradios*" 'Besteht meistens einfach nur aus einer IP Adresse
- stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_AUTOFREE, myDownloadProc, 0)
- Bass.BASS_ChannelPlay(stream, True)
So nun zur Erklärung: In der ersten Zeile, wird die DLL iniziallisiert. Dies sollte im normalfall einfach os bleiben. Darunter wird schon das von oben erwähnte DOWNLOADPROC Objekt erzeugt. Hier sieht man gut das die Callback Funktion an das Objekt übergeben wird. In den nächsten 3 Zeilen, erzeugen wir einen Stream, welcher mit dem letzen Befehl abgespielt wird. dem Stream wird das DOWNLOADPROC Objekt (myDownloadProc) übergeben und von da an immer wieder erneut aufgerufen.
Jetzt fehlt nur noch die Download Funktion welche wir oben an den DOWNLOADPROC übergeben haben. DIese sieht folgendermaßen aus (für einen ganz einfaches Speichern des Streams)
VB.NET-Quellcode
- Private Sub MyDownload(ByVal buffer As IntPtr, ByVal length As Integer, ByVal user As IntPtr)
- If fs Is Nothing Then
- ' Datei erzeugen
- fs = File.OpenWrite("C:\Radio.mp3")
- End If
- If buffer = IntPtr.Zero Then
- ' Download fertig
- fs.Flush()
- fs.Close()
- Else
- ' Größe des Buffers anpassen
- If data Is Nothing OrElse data.Length < length Then
- data = New Byte(length) {}
- End If
- ' Speicher in Buffer kopieren
- System.Runtime.InteropServices.Marshal.Copy(buffer, data, 0, length)
- ' In Datei schreiben
- fs.Write(data, 0, length)
- End If
- End Sub
Wenn das ganze jetzt gestartet wird (mit einem gültigen Onlineradio-Link) wird auf Festplatte C die Radio.mp3 erzeugt, welche nach dem Programmende aufgerufen werden kann und den aufgezeichneten Stream enthält. Somit habt ihr es erfolgreich geschafft den Stream zu speichern. Eigentlich wars das jetzt - die Aufnahme ist vollständig und kann so ausgeführt werden.
Zur vollständigkeit halber aber hier noch ein paar Tipps wie ihr die Aufnahme des Streams verbessern könnt:
Mit diesen beiden Eigenschaften könnt ihr festlegen, in welchem Abstand die Callback Funktion aufgerufe werden soll. Die Zahl gibt den Abstand der AUfrufe in Millisekunden an. Es kann ein bisschen vergleichen werden mit dem Intervall von einem Timer. Wenn ihr eine genau Trennung des Stream haben wollt muss der Wert kleiner werden ansonsten liegt er so bei ca 7000. Spielt ein wenig damit rum. Der Wert sollte allerdins nicht zu niedrig werden, da sonst der Stream nicht mehr richtig wiedergeben / aufgezeichnet werden kann.
Außerdem könnt ihr mit:
festlegen ob ihr während der Aufnahme den Stream hören wollt oder nicht. Ihr legt damit die Lautstärke des gesammten Streams fest - allerdings wirkt es sich über diese Funktion nicht auf die Aufnahme aus. Wenn ihr
verwenden würdet, währe der ganze Stream gemutet und auch die Aufnahme wäre leise.
Zur Installation verweise ich mal auf diesen Thread wo Kombrinki die Installation der Dll sehr gut und ausführlich beschrieben hat. Allerdings muss dazu gesagt werden,dass (zumindest bei mir) VB 2010 verbuggt ist und die Dll in der Liste, welche im Screenshot zu sehen ist, nicht aufführt. In diesem Fall muss einfach der Installationspfad gewählt werden und die bass.dll aus dem Verzeichniss manuell als Verweis hinzugefügt werden. Desweiteren ist zu beachten, dass wen man die dll unter einem 64 Bit Betriebssystem nutzen möchte man das Platformtarget änder muss. Auch dies wird hier sehr gut beschrieben.
Ein Beispielprojekt zur Aufnahme des Streams ist hier verfügbar:
Record Beispiel.zip
Ich hoffe ich konnte euch helfen und ihr könnt dieses Tutorail gut gebrauchen. Ich bin auf eure Programmideen im Showroom gespannt


Viele Grüße
Crosaider
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Croasider“ ()