MP3-Stream direkt wiedergeben

Hallo,
Ich lade einen MP3-Livestream per Winsock, wandle ihn in Bytes um und schreibe ihn in eine Datei.
Das sieht so aus:
Winsock1.GetData(answer)
FWriter.Write(System.Text.Encoding.Default.GetBytes(answer))
Das funktioniert aber soweit, ich kann mir das auch live anhören, wenn ich die Datei, die das Programm schreibt im WinMediaPlayer anhöre. Da das aber doof ist :stuck_out_tongue:, möchte ich die die Daten direkt an einen programminternen AudioPlayer geben, ohne sie vorher in einer Datei zwichenzuspeichern, damit man nach 3h hören nicht die Festplatte voll hat :smiley:
Kann mir da jemand helfen?
Danke schonmal im Voraus.

Sorry, vergessen: VisualBasic 2008
Danke.

Benutze doch directX sdk,
das kannst du dir bei msdn runterladen
http://msdn.microsoft.com/en-us/directx/aa937788.aspx

und dann:

using Microsoft.DirectX.AudioVideoPlayback;
...

Audio audioPlayback = new Audio(FilePathXY);
 audioPlayback.Play();

und noch ein Assemblyverweis und dann fertig,
ach und du kannst damit sämtliche Mediafils wiedergeben

mfg Seeedy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
Frohe Weihnachten erstmal :smiley:

Ich habe die API jetzt installiert, aber VB zeigt mir bei " Using Microsoft.DirectX.AudioVideoPlayback" an: „DirectX ist kein Member von Microft“

Das dem Assemblyverweis musst du mir mal erklären, ich blick da noch nicht durch.

Wo genau kommt das in den Code, und wie füg ich neue Daten ein?

(Bitte nicht über den Code meckern, ist mein erstes größeres Ding in VB :smiley:)

Option Strict Off  
Option Explicit On  
  
Imports System.IO  
  
Friend Class Form1  
 Inherits System.Windows.Forms.Form  
 Private FStream As FileStream  
 Private FWriter As BinaryWriter  
 Private overwrite As Boolean = True  
 Private savedAs As String = ""  
 Private IsRecording As Boolean = False  
 Private answer As String = ""  
 Private ByteAnswer As Byte  
 Private WinSockServer As String = "scfire-mtc-aa03.stream.aol.com"  
 '"yp.shoutcast.com" '"[www.google.de](http://www.google.de)"  
 Private WinSockFile As String = "/stream/1022"  
 '"htttp://yp.shoutcast.com/sbin/tunein-station.pls?id=5283" '"[http://www.google.de](http://www.google.de)"  
 Private Sub Command1\_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click  
 answer = ""  
 Command1.Enabled = False  
 Button1.Enabled = False  
 System.Windows.Forms.Application.DoEvents()  
 Winsock1.RemoteHost = WinSockServer  
 Winsock1.RemotePort = 80  
 Winsock1.Connect()  
 End Sub  
  
 Private Sub Winsock1\_CloseEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Winsock1.CloseEvent  
 CloseConnection("EOF", 0)  
 End Sub  
  
 Private Sub Winsock1\_ConnectEvent(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Winsock1.ConnectEvent  
 Dim Cmd As String = ""  
 Cmd = "GET " & WinSockFile & " HTTP/1.1" & vbCrLf  
 Cmd = Cmd & "Host: " & WinSockServer  
 Cmd = Cmd & "Icy-MetaData: 1" & vbCrLf  
 Cmd = Cmd & "UserAgent: WinampMPEG/5.09" & vbCrLf  
 Cmd = Cmd & "Accept: \*/\*" & vbCrLf  
 Cmd = Cmd & vbCrLf  
 Winsock1.SendData(Cmd)  
  
 End Sub  
  
 Private Sub Winsock1\_DataArrival(ByVal eventSender As System.Object, ByVal eventArgs As AxMSWinsockLib.DMSWinsockControlEvents\_DataArrivalEvent) Handles Winsock1.DataArrival  
 Dim answer As String = ""  
 'Console.WriteLine(IsRecording)  
 If IsRecording = False Then  
 Winsock1.GetData(answer)  
 answer = Replace(answer, Chr(10), "  
")  
 answer = Replace(answer, Chr(13), "  
")  
 answer = Replace(answer, "  
", "  
")  
 answer = Replace(answer, "  
", "  
")  
 answer = Replace(answer, "  
", "  
")  
 answer = Replace(answer, "  
  
", "  
")  
 If InStr(Replace(answer, " ", ""), "  
  
", 0) Then  
 Dim savedir As String = "C:\"  
 If overwrite = False Then  
 '//Automatisch Umbenennen  
 Dim i As Int32 = 1  
 If File.Exists(savedir + "Rec.mp3") = True Then  
 Do Until File.Exists(savedir + "Rec(" & i & ").mp3") = False  
 i = i + 1  
 Loop  
 savedAs = savedir + "Rec(" & i & ").mp3"  
 Else  
 savedAs = savedir + "Rec.mp3"  
 End If  
 Else  
 '//Überschreiben  
 If File.Exists(savedir + "Rec.mp3") = True Then  
 Try  
 File.Delete(savedir + "Rec.mp3")  
 Catch ex As Exception  
 CloseConnection("Dateisystem-Fehler (Löschen): " & ex.ToString(), 0)  
 End Try  
 End If  
 savedAs = savedir + "Rec.mp3"  
 End If  
 Try  
 FStream = New FileStream(savedAs, FileMode.CreateNew)  
 FWriter = New BinaryWriter(FStream)  
 IsRecording = True  
 Label1.Text = "Aufnahme nach:" & vbCrLf + savedAs  
 Button1.Enabled = True  
 Catch ex As Exception  
 IsRecording = False  
 Winsock1.Close()  
 CloseConnection("Dateisystem-Fehler (Erstellen): " & ex.ToString(), 0)  
 Command1.Enabled = True  
 Button1.Enabled = False  
 End Try  
 End If  
 Else  
 Winsock1.GetData(answer)  
 Try  
 FWriter.Write(System.Text.Encoding.Default.GetBytes(answer))  
 Catch ex As Exception  
 CloseConnection("Dateisystem-Fehler (Schreiben): " & ex.ToString(), 0)  
 End Try  
 End If  
 End Sub  
  
 Private Sub Winsock1\_Error(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents\_ErrorEvent) Handles Winsock1.Error  
 If IsRecording = True Then  
 Try  
 FWriter.Close()  
 FStream.Close()  
 Catch ex As Exception  
 CloseConnection("Dateisystem-Fehler (Schreiben): " & ex.ToString(), 0)  
 End Try  
 End If  
 CloseConnection("WinSock-Fehler", 0)  
 End Sub  
  
 Private Sub Button1\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
 CloseConnection("Bereit.", 0)  
 End Sub  
  
 Function CloseConnection(ByVal txt As String, ByVal saved As Int32) As Int32  
 If IsRecording = True Then  
 Try  
 FWriter.Close()  
 FStream.Close()  
 Catch ex As Exception  
 CloseConnection("Dateisystem-Fehler (Schreiben): " & ex.ToString(), saved)  
 End Try  
 End If  
 IsRecording = False  
 Winsock1.Close()  
 Label1.Text = txt  
 If saved \> 0 Then MsgBox("Gespeichert unter: " & savedAs)  
 Command1.Enabled = True  
 Button1.Enabled = False  
 End Function  
End Class  

Hier das alles ausführlicher in VB:

http://software.magnus.de/programmierung/artikel/sou…