Radio mit Powershell

In der heutigen digitalen Welt ist der Zugang zu Musik und Nachrichten über das Internet einfacher denn je. Mit einem einfachen Windows PowerShell GUI-Skript kann man bequem Radio-Streams direkt hören ohne eine Software installieren zu müssen. Dieses Skript bietet eine kleine benutzerfreundliche grafische Oberfläche, die es ermöglicht, verschiedene Radio-Stationen auszuwählen, ohne dass tiefgehende technische Kenntnisse erforderlich sind.

Ein Radio Player nur mit Powershell 2

Mein kleines Skript nutzt die Leistungsfähigkeit von PowerShell, um eine intuitive und leicht zu bedienende Anwendung zu erstellen, die sowohl für Anfänger als auch für fortgeschrittene Benutzer geeignet ist. Mit nur wenigen Klicks kann man die Lieblingssender auf jedem Windows-Gerät streamen und die Vielfalt des weltweiten Radioprogramms entdecken.

#
# Webradio-Player mit PowerShell 2 von Andreas Preuss
# ---------------------------------------------------
# 
# Dieses PowerShell 2-Skript ermöglicht es, Webradio-Streams direkt über eine einfache grafische Benutzeroberfläche (GUI) zu hören. 
# Der Benutzer kann aus einer Liste von vorab definierten Radiostationen auswählen oder eigene Stream-URLs eingeben. 
# Das Skript nutzt Systemeigene Multimedia-Funktionen, um Audiodaten von Webradio-Servern zu streamen.
# Die Oberfläche ist übersichtlich gestaltet und erlaubt eine einfache Steuerung der Wiedergabe, mit Optionen zum Starten, 
# Stoppen, Laut- und Leise-Stellung. Das Skript bietet somit eine leicht zugängliche Lösung für das Abspielen von Webradio über 
# PowerShell, ohne dass zusätzliche Software erforderlich ist. 
# 
# Autor: Andreas Preuß, 28. Juli 2018 - 

# Lade Windows Forms Assemblies
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Initialisiere Windows Media Player COM-Objekt
$player = New-Object -ComObject WMPlayer.OCX

# Radiostream-Liste
$radioStreams = @(
    @{ Name = "Deutschlandfunk"; URL = "https://st01.sslstream.dlf.de/dlf/01/128/mp3/stream.mp3?aggregator=web" },
    @{ Name = "Radio Bob Rockt SH"; URL = "http://streams.radiobob.de/bob-shlive/mp3-192/play.m3u" },
    @{ Name = "Radio Schleswig Holstein"; URL = "http://streams.rsh.de/rsh-live/mp3-192/play.m3u" },
    @{ Name = "NDR2 Schleswig Holstein"; URL = "https://icecast.ndr.de/ndr/ndr2/schleswigholstein/mp3/128/stream.mp3" },
    @{ Name = "Antenne Sylt"; URL = "https://streams.antenne-sylt.de/sylt/mp3-192/" },
    @{ Name = "Delta Radio"; URL = "https://streams.deltaradio.de/delta-live/mp3-192/" },
    @{ Name = "Radio Flensburg"; URL = "https://radio-flensburg-stream21.radiohost.de/radio-flensburg_mp3-192" },
    @{ Name = "NDR Info SH"; URL = "https://icecast.ndr.de/ndr/ndrinfo/schleswigholstein/mp3/128/stream.mp3" },
    @{ Name = "NDR 1 Welle Nord Flensburg"; URL = "https://icecast.ndr.de/ndr/ndr1wellenord/flensburg/mp3/128/stream.mp3" },
    @{ Name = "Deutschlandfunk Nova"; URL = "https://st03.sslstream.dlf.de/dlf/03/128/mp3/stream.mp3" }
)

# Formular erstellen
$form = New-Object System.Windows.Forms.Form
$form.Text = "Der kleine Radio Player"
$form.Size = New-Object System.Drawing.Size(400, 300)
$form.StartPosition = "CenterScreen"

# Listbox für Radiostreams
$radioListBox = New-Object System.Windows.Forms.ListBox
$radioListBox.Location = New-Object System.Drawing.Point(10, 10)
$radioListBox.Size = New-Object System.Drawing.Size(360, 120)
$form.Controls.Add($radioListBox)

# Fülle die Listbox mit den obigen Radiostream-Namen
foreach ($stream in $radioStreams) {
    $radioListBox.Items.Add($stream.Name)
}

# Play-Button
$playButton = New-Object System.Windows.Forms.Button
$playButton.Text = "Abspielen"
$playButton.Location = New-Object System.Drawing.Point(10, 140)
$form.Controls.Add($playButton)

# Stop-Button
$stopButton = New-Object System.Windows.Forms.Button
$stopButton.Text = "Stoppen"
$stopButton.Location = New-Object System.Drawing.Point(100, 140)
$form.Controls.Add($stopButton)

# Lauter-Button
$volumeUpButton = New-Object System.Windows.Forms.Button
$volumeUpButton.Text = "Lauter"
$volumeUpButton.Location = New-Object System.Drawing.Point(190, 140)
$form.Controls.Add($volumeUpButton)

# Leiser-Button
$volumeDownButton = New-Object System.Windows.Forms.Button
$volumeDownButton.Text = "Leiser"
$volumeDownButton.Location = New-Object System.Drawing.Point(280, 140)
$form.Controls.Add($volumeDownButton)

# Statusanzeige
$statusLabel = New-Object System.Windows.Forms.Label
$statusLabel.Text = "Status: Keine Wiedergabe"
$statusLabel.Location = New-Object System.Drawing.Point(10, 180)
$statusLabel.Size = New-Object System.Drawing.Size(360, 20)
$form.Controls.Add($statusLabel)

# Ladeanzeige
$loadingBar = New-Object System.Windows.Forms.Label
$loadingBar.Text = ""
$loadingBar.Location = New-Object System.Drawing.Point(10, 210)
$loadingBar.Size = New-Object System.Drawing.Size(360, 20)
$form.Controls.Add($loadingBar)

# Timer für Ladeanzeige (textbasierter fake-ladebalken für die Optik)
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 200
$timer.Add_Tick({
    if ($loadingBar.Text.Length -ge 118) {
        $loadingBar.Text = ""
    }
    $loadingBar.Text += "|"
})

# Event-Handler für Abspielen
$playButton.Add_Click({
    $selectedRadio = $radioListBox.SelectedItem
    if (-not $selectedRadio) {
        [System.Windows.Forms.MessageBox]::Show("Bitte wähle einen Radiostream aus.")
        return
    }

    $stream = $radioStreams | Where-Object { $_.Name -eq $selectedRadio }
    if ($stream) {
        # Ladeanzeige starten
        $timer.Start()

        # Starte Wiedergabe
        $player.URL = $stream.URL
        $player.controls.play()
        $statusLabel.Text = "Status: Wiedergabe von '$selectedRadio'"
    }
})

# Event-Handler für Stoppen
$stopButton.Add_Click({
    $player.controls.stop()
    $statusLabel.Text = "Status: Wiedergabe gestoppt"

# Ladeanzeige beenden
    $timer.Stop()
    $loadingBar.Text = ""
    $statusLabel.Text = "Status: Wiedergabe von '$selectedRadio'"

})

# Event-Handler für Lauter
$volumeUpButton.Add_Click({
    $player.settings.volume = [math]::Min($player.settings.volume + 10, 100)
    $statusLabel.Text = "Status: Lautstärke erhöht (${player.settings.volume} um 10 %)"
})

# Event-Handler für Leiser
$volumeDownButton.Add_Click({
    $player.settings.volume = [math]::Max($player.settings.volume - 10, 0)
    $statusLabel.Text = "Status: Lautstärke verringert (${player.settings.volume} um 10 %)"
})

# Formular anzeigen
$form.ShowDialog()

Dieses Script kann einfach kopiert und in z.B.: der Windows Powershell ISE eingefügt werden. Abspeichern als *.ps1 Datei. - Viel Spass beim Radio-Hören.