Previse vremena provodim ispred monitora i treba mi jedan "TopMost" sat da ponekad bacim pogled i vidim da je vreme za gasenje kompjutera! :)
Sat sam napravio ali iz dosade sam dodao alarm, pa sam dodao radio, pa sam dodao tv, i ko zna sta cu jos sve da dodam ... :)
Koga zanima kako to trenutno izgleda ... https://www.mediafire.com/file...e4k61g75/DeskTopClock.zip/file
------------------------------------------------------------------------------------------------------------------------------
Imam par pitanja i problema koje ne mogu da resim pa ako neko hoce da pripomogne ...
Prvi problem je radio-IcyMetaData - na nekim stanicama dok traju reklame izbacuje neka bezveze slova, hoce da ukoci program, na nekim stanicama ime izvodjaca i pesme se promeni "posle pola sata" ... ima neki problem!
Kod sam postavio u tajmer i podesio na 10 sekundi. Da li je kod dobar i odakle ovo treba da se poziva i na koje vreme ?
Code:
Private Sub IcyMetaData()
Dim server As String = radioPlayer.URL
Dim request As HttpWebRequest = Nothing
Dim _response As HttpWebResponse = Nothing
Dim metaInt As Integer = 0 ' blocksize of mp3 data
Dim count As Integer = 0 ' byte counter
Dim metadataLength As Integer = 0 ' length of metadata header
Dim metadataHeader As String = "" ' previous metadata header, to compare with new header and find next song
Dim buffer As Byte() = New Byte(511) {} ' receive buffer
Dim socketStream As Stream = Nothing ' input stream on the web request
Dim byteOut As Stream = Nothing ' output stream on the destination file
Dim subst As String
request = DirectCast(WebRequest.Create(server), HttpWebRequest) ' create web request
request.Headers.Clear() ' clear old request header and build own header to receive ICY-metadata
request.Headers.Add("Icy-MetaData", "1") 'request.Headers.Add("GET", serverPath + " HTTP/1.0");
request.UserAgent = "WinampMPEG/5.09" ' needed to receive metadata informations
Try ' execute request
_response = DirectCast(request.GetResponse(), HttpWebResponse)
Catch ex As Exception
' Form1.Label9.Text = "NOT AVAILABLE"
Return
End Try
metaInt = Convert.ToInt32(_response.GetResponseHeader("icy-metaint")) ' read blocksize to find metadata header
Try
socketStream = _response.GetResponseStream() ' open stream on response
While True ' rip stream in an endless loop
Dim bufLen As Integer = socketStream.Read(buffer, 0, buffer.Length) ' read byteblock
If bufLen < 0 Then
Return
End If
For i As Integer = 0 To bufLen - 1 ' if there is a header, the 'headerLength' would be set to a value != 0. Then we save the header to a string
If metadataLength <> 0 Then
metadataHeader += Convert.ToChar(buffer(i))
metadataLength -= 1
If metadataLength = 0 Then
Exit While
End If
Else
If System.Math.Max(System.Threading.Interlocked.Increment(count), count - 1) < metaInt Then ' write mp3 data to file or extract metadata headerlength
If byteOut IsNot Nothing Then ' write bytes to filestream
byteOut.Write(buffer, i, 1) ' as long as we don't have a songtitle, we don't open a new file and don't write any bytes
If count Mod 100 = 0 Then
byteOut.Flush()
End If
End If
Else
metadataLength = Convert.ToInt32(buffer(i)) * 16 ' get headerlength from lengthbyte and multiply by 16 to get correct headerlength
count = 0
End If
End If
Next
End While
Dim numberString As String = String.Empty
Dim str2 As String = ""
Dim numberString2 As String = String.Empty
If metadataHeader.Contains("'") Then
numberString = metadataHeader.IndexOf("'")
numberString2 = metadataHeader.IndexOf(";")
subst = metadataHeader.Substring(numberString + 1, numberString2 - numberString - 2)
Label9.Text = subst
Else
' Form1.Label9.Text = "NOT AVAILABLE"
End If
Catch ex As Exception
' Form1.Label9.Text = "NOT AVAILABLE"
Finally
If byteOut IsNot Nothing Then
byteOut.Close()
End If
If socketStream IsNot Nothing Then
socketStream.Close()
End If
End Try
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Label4.Text = " Bitrate: " + (_response.Headers("icy-br"))
Label15.Text = " Genre: " + (_response.Headers("icy-genre"))
Label16.Text = " Url: " + (_response.Headers("icy-url"))
Label8.Text = (_response.Headers("icy-name"))
End Sub
Private Sub IcyMetaData()
Dim server As String = radioPlayer.URL
Dim request As HttpWebRequest = Nothing
Dim _response As HttpWebResponse = Nothing
Dim metaInt As Integer = 0 ' blocksize of mp3 data
Dim count As Integer = 0 ' byte counter
Dim metadataLength As Integer = 0 ' length of metadata header
Dim metadataHeader As String = "" ' previous metadata header, to compare with new header and find next song
Dim buffer As Byte() = New Byte(511) {} ' receive buffer
Dim socketStream As Stream = Nothing ' input stream on the web request
Dim byteOut As Stream = Nothing ' output stream on the destination file
Dim subst As String
request = DirectCast(WebRequest.Create(server), HttpWebRequest) ' create web request
request.Headers.Clear() ' clear old request header and build own header to receive ICY-metadata
request.Headers.Add("Icy-MetaData", "1") 'request.Headers.Add("GET", serverPath + " HTTP/1.0");
request.UserAgent = "WinampMPEG/5.09" ' needed to receive metadata informations
Try ' execute request
_response = DirectCast(request.GetResponse(), HttpWebResponse)
Catch ex As Exception
' Form1.Label9.Text = "NOT AVAILABLE"
Return
End Try
metaInt = Convert.ToInt32(_response.GetResponseHeader("icy-metaint")) ' read blocksize to find metadata header
Try
socketStream = _response.GetResponseStream() ' open stream on response
While True ' rip stream in an endless loop
Dim bufLen As Integer = socketStream.Read(buffer, 0, buffer.Length) ' read byteblock
If bufLen < 0 Then
Return
End If
For i As Integer = 0 To bufLen - 1 ' if there is a header, the 'headerLength' would be set to a value != 0. Then we save the header to a string
If metadataLength <> 0 Then
metadataHeader += Convert.ToChar(buffer(i))
metadataLength -= 1
If metadataLength = 0 Then
Exit While
End If
Else
If System.Math.Max(System.Threading.Interlocked.Increment(count), count - 1) < metaInt Then ' write mp3 data to file or extract metadata headerlength
If byteOut IsNot Nothing Then ' write bytes to filestream
byteOut.Write(buffer, i, 1) ' as long as we don't have a songtitle, we don't open a new file and don't write any bytes
If count Mod 100 = 0 Then
byteOut.Flush()
End If
End If
Else
metadataLength = Convert.ToInt32(buffer(i)) * 16 ' get headerlength from lengthbyte and multiply by 16 to get correct headerlength
count = 0
End If
End If
Next
End While
Dim numberString As String = String.Empty
Dim str2 As String = ""
Dim numberString2 As String = String.Empty
If metadataHeader.Contains("'") Then
numberString = metadataHeader.IndexOf("'")
numberString2 = metadataHeader.IndexOf(";")
subst = metadataHeader.Substring(numberString + 1, numberString2 - numberString - 2)
Label9.Text = subst
Else
' Form1.Label9.Text = "NOT AVAILABLE"
End If
Catch ex As Exception
' Form1.Label9.Text = "NOT AVAILABLE"
Finally
If byteOut IsNot Nothing Then
byteOut.Close()
End If
If socketStream IsNot Nothing Then
socketStream.Close()
End If
End Try
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Label4.Text = " Bitrate: " + (_response.Headers("icy-br"))
Label15.Text = " Genre: " + (_response.Headers("icy-genre"))
Label16.Text = " Url: " + (_response.Headers("icy-url"))
Label8.Text = (_response.Headers("icy-name"))
End Sub
Ne znam kako se ponasa na drugim sistemima, ovo sam radio na Windows 11 64bit, Visual Studio 2022, Net Framework 4.8
p.s. Sve kodove sam pokupio sa interneta i preradio za moje potrebe.