Web-Radio by Patrick_SkiLL

10/04/2012 17:20 Patrick_SkiLL#1
Hallo Leute.
Durch einen kleinen Tutorial habe ich mal ein Web-Radio nach geschrieben.


Versucht es einfach selber.

Code:
Const $url1Live = 'http://www.wdr.de/wdrlive/media/einslive.asx'
Const $urlFFN = 'http://player.ffn.de/tunein_ffn.asx'
Const $urlWDR = 'http://www.wdr.de/wdrlive/media/wdr2.asx'
Const $urlNDR = 'http://ndr-ndr1niedersachsen-hi-wma.wm.llnwd.net/ndr_ndr1niedersachsen_hi_wma'

;Erstellt ein Windows Media Player Objekt (http://msdn.microsoft.com/en-us/library/bb249680(VS.85).aspx)
$oWMP = ObjCreate ( "WMPLayer.ocx" )
;Default URL:
$oWMP.URL = $url1Live ;Stellt die Eigenschaft "URL" zu dem Online-Stream
$oWMP.controls.stop()

;Array f?r die einzelnen Zustande (Info)
Dim $arrStatus[12]
$arrStatus[0] = 'Unbekannt'
$arrStatus[1] = 'Gestoppt'
$arrStatus[2] = 'Pause'
$arrStatus[3] = 'Playing'
$arrStatus[4] = 'ScanForward'
$arrStatus[5] = 'ScanReverse'
$arrStatus[6] = 'Buffering'
$arrStatus[7] = 'Warten'
$arrStatus[8] = 'MediaEnded'
$arrStatus[9] = 'Transitioning'
$arrStatus[10] = 'Bereit'
$arrStatus[11] = 'Wiederverbinden...'

; Variable f?r das Anzeigen der Info, damit ein blinken vermieden wird.
$lastStatus = 0

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$frmMain = GUICreate("Radio by Patrick_SkiLL V0.1", 304, 140, 192, 224)
$comSender = GUICtrlCreateCombo("", 72, 8, 225, 25)
GUICtrlSetData(-1, "Eins Live|Radio FFN|WDR|NDR", "Eins Live")
$lblSender = GUICtrlCreateLabel("Senderliste:", 8, 8, 59, 17)
$cmdPlay = GUICtrlCreateButton("Abspielen", 72, 40, 73, 33, $WS_GROUP)
$cmdStop = GUICtrlCreateButton("Stop", 160, 40, 73, 33, $WS_GROUP)
$lblInfo = GUICtrlCreateLabel("Info...",72,80,200)
$lblPlayTime = GUICtrlCreateLabel("00:00:00",260,120)

; Das ist der Slider f?r die Lautstdrke
$slVolume = GUICtrlCreateSlider(49, 100, 200, 25)
GUICtrlSetData(-1,$oWMP.settings.volume()) ; Hier wird der Startwert gelesen, bei mir 50

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

; Varible zeit wir auf 0 gesetzt
$zeit = 0

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		; Hier wird die Lautstdrke gesetzt
		Case $slVolume
			$oWMP.settings.volume = GUICtrlRead($slVolume)
		Case $comSender
			; Falls grade ein Stream abgespielt wird, wird er gestoppt
			$oWMP.controls.stop()
			Switch GUICtrlRead($comSender)
				Case 'Eins Live'
					$oWMP.URL = $url1Live ;Stellt die Eigenschaft "URL" zu dem Online-Stream
				Case 'Radio FFN'
					$oWMP.URL = $urlFFN ;Stellt die Eigenschaft "URL" zu dem Online-Stream
				Case 'WDR'
					$oWMP.URL = $urlWDR ;Stellt die Eigenschaft "URL" zu dem Online-Stream
				Case 'NDR'
					$oWMP.URL = $urlNDR ;Stellt die Eigenschaft "URL" zu dem Online-Stream
			EndSwitch
			$oWMP.controls.play()
			; beim wechseln des Streams soll wieder von vorn gezdhlt werden.
			$zeit = TimerInit()
		Case $cmdStop
			$oWMP.controls.stop()
		Case $cmdPlay
			$oWMP.controls.play()
	EndSwitch
	$curStatus = $oWMP.playstate
	If $curStatus <> $lastStatus Then
		GUICtrlSetData($lblInfo, $arrStatus[$curStatus])
		$lastStatus = $curStatus
	EndIf

	; ist der Status auf gestoppt (1) oder unbekannt (0)
	; wir die Zeitanzeige wieder auf 0 gesetzt und die
	; Variable zeit auf 0
	If $curStatus = 1 or $curStatus = 0 Then
		$zeit = 0
		GUICtrlSetData($lblPlayTime,'00:00:00')
	; Wird der Stream abgespielt und ist die Variable
	; zeit auf 0, dann setze zeit auf die Init Zeit
	ElseIf $curStatus = 3 And $zeit = 0 Then
		$zeit = TimerInit()
	EndIf

	; ist zeit grf?er 0 berechne die Zeit
	; und gib sie aus
	If $zeit > 0 Then
		; wandele die Millisekunden in Sekunden um
		$diff = round(round(TimerDiff($zeit),0) / 1000,0)
		; Berechne Stunden, Minuten und Sekunken und gib sie mit
		; f?hrenden Nullen aus.
		GUICtrlSetData($lblPlayTime,StringFormat("%02d:%02d:%02d",((($diff-mod($diff,60))/60)-mod(($diff-mod($diff,60))/60,60))/60,mod(($diff-mod($diff,60))/60,60),mod($diff,60)))
	EndIf
WEnd
exit

$oWMP.URL = "http://www.wdr.de/wdrlive/media/einslive.asx" ;Stellt die Eigenschaft "URL" zu dem Online-Stream
;von hr3.de ein, sollte automatisch starten

$oWMP.controls.play() ;explizit starten

While $oWMP.playstate > 2 ;solang der Windows Media Player den Stream lddt, buffert, abspielt usw.
	Sleep ( 10 ) ;schlafen, damit AutoIt sich nicht beendet und die Musik aufhfrt
WEnd
Features
Quote:
- 4 Verschiedene Sender eingebaut
- Lautstärken Veränderbar
Wie ihr sicherlich merken wird ist es eine V0.1
Das bedeutet es wird bis hin zu einer V0.4 gearbeitet mit mehr Features.

Unterstützt mich mit einen Thanks.
10/04/2012 18:42 Ludder231#2
Sieht gut aus. Hast du den exact nachgebaut? Weil wenn du ein Anfänger bist, hätte ich so eine Syntax nicht erwartet. :)
10/04/2012 19:00 Patrick_SkiLL#3
Quote:
Originally Posted by Ludder231 View Post
Sieht gut aus. Hast du den exact nachgebaut? Weil wenn du ein Anfänger bist, hätte ich so eine Syntax nicht erwartet. :)
Ich bin schon etwas länger in der AutoIT Szene. Wenn man die grundlagen von AutoIT sprich auch die Codes drauf hat , ist es nicht so Schwer wie es ist.

Dauer hat etwas 2 -3 Tage gedauert da es schon etwas schwerer war.

Verbesserungsvorschläge für V0.2 ?
10/04/2012 20:12 H@CT0R#4
Sieht ansich nicht schlecht aus, habe es gerade mal kurz getestet ;)
Würde noch die aktuelle Lautstärke in Prozent in einem Label anzeigen lassen, mehr Sender hinzufügen und am besten angewöhnen im oneventmodus zu arbeiten ;)
10/04/2012 20:34 Patrick_SkiLL#5
Quote:
Originally Posted by H@CT0R View Post
Sieht ansich nicht schlecht aus, habe es gerade mal kurz getestet ;)
Würde noch die aktuelle Lautstärke in Prozent in einem Label anzeigen lassen, mehr Sender hinzufügen und am besten angewöhnen im oneventmodus zu arbeiten ;)
Aus deinem Satz setzte ich die Schlußfolgerung das mehr Design hinzugefügt werden muss um es Optisch besser aussehen zu lassen.

#accept - werde mich morgen dran setzten
10/04/2012 21:44 Der-Eddy#6
Wie wäre es die Sender in ein Array zu speichern und z.B. in einer Temp Datei zu speichern um eigene Sender hinzuzufügen?
10/04/2012 21:48 Patrick_SkiLL#7
Quote:
Originally Posted by Der-Eddy View Post
Wie wäre es die Sender in ein Array zu speichern und z.B. in einer Temp Datei zu speichern um eigene Sender hinzuzufügen?
Würde oder müsste mit einem Online Hoster zusammen hängen.
Aber ich kann einen Sender einbringen der dir deine Datei nur abspielt. Natürlich müssen die Lieder selber hinzugefügt werden.
10/05/2012 00:14 Achat#8
Quote:
Originally Posted by Ludder231 View Post
Sieht gut aus. Hast du den exact nachgebaut? Weil wenn du ein Anfänger bist, hätte ich so eine Syntax nicht erwartet. :)
Syntax finde ich auch gut, besonders für den Anfang.

Quote:
Originally Posted by Patrick_SkiLL View Post
Ich bin schon etwas länger in der AutoIT Szene. Wenn man die grundlagen von AutoIT sprich auch die Codes drauf hat , ist es nicht so Schwer wie es ist.
Dann solltest du aber wissen, dass es

AutoIt heißt und nicht AutoIT

MfG

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

€dit2:

Quote:
Originally Posted by Patrick_SkiLL View Post
Wie ihr sicherlich merken wird ist es eine V0.1
Das bedeutet es wird bis hin zu einer V0.4 gearbeitet mit mehr Features.
Versionsnummer ;)

MfG
10/05/2012 21:45 Der-Eddy#9
Quote:
Originally Posted by Patrick_SkiLL View Post
Würde oder müsste mit einem Online Hoster zusammen hängen.
Aber ich kann einen Sender einbringen der dir deine Datei nur abspielt. Natürlich müssen die Lieder selber hinzugefügt werden.
Öhm wat
ich meine das so das man im Script ganz easy neue Sender hinzufügen kann bzw. diese aus einer Datei ausgelesen wird

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

So hätte ich mir das vorgestellt, natürlich fehlen noch Buttons um eine Funktion einzubinden um eigene Sender hinzuzufügen
10/06/2012 00:41 KDeluxe#10
Statt das ganze Array durchzugehen und alle Strings miteinander zu vergleichen wäre es besser den Inhalt des Arrays anhand des Indexes der Combobox auszugeben.

Code:
$oWMP.URL = $list[GUICtrlSendMsg($Combo, $CB_GETCURSEL, 0, 0) + 1][1]
Außerdem wäre es besser das Label nur dann zu aktualisieren, wenn es auch wirklich nötig ist. Es mag sich zwar "nur" jede Sekunde ändern, die Schleife wird in dieser Zeit aber wesentlich öfters als einmal durchgegangen. Dadurch kann es zum "flakern" des Labels kommen.

Der Code nach dem "Exit" der ersten Schleife ist unerreichbar und kann daher auch gelöscht werden.
10/06/2012 11:16 Der-Eddy#11
Quote:
Originally Posted by KDeluxe View Post
Statt das ganze Array durchzugehen und alle Strings miteinander zu vergleichen wäre es besser den Inhalt des Arrays anhand des Indexes der Combobox auszugeben.

Code:
$oWMP.URL = $list[GUICtrlSendMsg($Combo, $CB_GETCURSEL, 0, 0) + 1][1]
Außerdem wäre es besser das Label nur dann zu aktualisieren, wenn es auch wirklich nötig ist. Es mag sich zwar "nur" jede Sekunde ändern, die Schleife wird in dieser Zeit aber wesentlich öfters als einmal durchgegangen. Dadurch kann es zum "flakern" des Labels kommen.

Der Code nach dem "Exit" der ersten Schleife ist unerreichbar und kann daher auch gelöscht werden.
Stimmt auch wieder
Ist mir garnicht in denn Sinn gekommen
Btw. wie wäre es mit einem schicken Design?
10/06/2012 20:29 Patrick_SkiLL#12
Quote:
Originally Posted by Der-Eddy View Post
Stimmt auch wieder
Ist mir garnicht in denn Sinn gekommen
Btw. wie wäre es mit einem schicken Design?
Design in der neuen Version wird auf jeden Fall kommen. Bin derzeit Lustlos und widme mich an kleinere Projekte.