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 , 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
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
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 )
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