DIY-internetradio

      1 reactie op DIY-internetradio

In 2021 is mijn mooie witte IP-dio internetradio door het opheffen van de Reciva-website onbruikbaar geworden. Dus hoog tijd voor een oplossing die ik helemaal zelf in de hand heb, met de Raspberry Pi.
Lees het nieuwsbericht over Reciva en de IP-dio.

Tastbaar en hackbaar

De nieuwe oplossing moet net als de IP-dio een alles-in-één-behuizing zijn met echte knoppen. En deze is dus in tegenstelling tot de IP-dio wel helemaal aan je eigen wensen aan te passen. Dus dat wordt weer een mooi klein project zoals het mini-weerstation en de Pico Pong-arcadebox.

DIY_internetradio

Met een Raspberry Pi, een speakersetje, een handvol drukknoppen, een beetje Python-code en wat url’s voor de radiostreams heb je de basis. De rest is een kwestie van fantasie.

Wat hebben we nodig?

  • Een Pi, het makkelijkste is een Pi 3 of hoger met ingebouwde wifimodule en een jackplugaansluiting, maar ook een Pi 2 met ‘legacy’-OS (Linux 10 Buster) is bruikbaar.
  • Luidsprekers, het makkelijkste is een setje actieve speakers.
  • een handvol knoppen en ledjes, voor het bedieningspaneel
  • een experimenteerprintplaat
  • een behuizing/doosje van voldoende omvang.
  • software, maar welke?
  • een lijst met de url’s van mp3-radiostreams, zoals die van Hendrik Jansen.

Welke software?

Als het gaat om een internetradioproject met de Raspberry Pi, kom je in bv. The MagPi magazine en in Google als populairste mogelijkheden Pi Music Box en Volumio tegen. Deze oplossingen zijn erg makkelijk (Pi-image downloaden-flashen-en-klaar), maar beide moet je bedienen via een webinterface vanuit een browser op een andere computer of smartphone. Overigens is de ontwikkeling van Pi MusicBox door de maker (bij versie 0.7) stopgezet in april 2022.
Een derde veel simpelere oplossing die ik tegenkwam was mplayer (movieplayer), een puur commandlineprogramma om films af te spelen. Maar het kan natuurlijk ook mp3-streams afspelen. En het is met Python aan te sturen, wat beter in mijn plannen past. Na wat stoeien met mplayer en Python kwam ik op het spoor van de VLC Media Player en de module Python-vlc  ( sudo pip3 install python-vlc ). Daarmee is het kinderspel om in Python een radiostream te starten, te stoppen etc.
Nadat ik Python-vlc allang geïmplementeerd had en de software naar tevredenheid werkte, kwam ik de Python-bibliotheek playsound tegen in The MagPi #122. Dat lijkt me ook een goed en makkelijk alternatief, maar ik heb het nog niet uitgeprobeerd.

Om de leds en buttons makkelijk in de Python-code te integreren, gebruiken we de Python-bibliotheek gpiozero (die is standaard in de nieuwste Pi-OS versies, ook in ‘legacy’, geïnstalleerd).

Afwerking

Met een Raspberry Pi, een speakersetje een handvol drukknoppen, een beetje Python-code en wat url’s voor de radiostreams heb je de basis. De rest is een kwestie van fantasie. Voor een echte retro-uitstraling bijvoorbeeld kun je de behuizing van een oude radio gebruiken.

Tip1: jackplug werkt niet?

Mocht het geluid op een met een jackplug aangesloten actief luidsprekersetje niet werken, bv omdat de Pi het koppig naar de hdmi-poort blijft sturen, autostart het script dan niet via crontab, maar zet het startcommando in ~/.bashrc (helemaal onderaan).

Tip2: maak het systeem ‘hardened’

Om een uitknop (voor het correct afsluiten van het besturingssysteem) op de ‘radio’ uit te sparen, kun je de software ‘hardenen’. Ga naar raspi-config / 4 Performance Options / P3 Overlay File System en activeer deze functie.  Beantwoord de volgende vraag ‘Would you like the boot partition to be write-protected?’ met Ja/Yes. Na een reboot kun je voortaan gewoon de stroomstekker eruit trekken, zonder risico op beschadiging van het systeem.

Voorbeeldcode:

import vlc
from gpiozero import Button, LEDBoard

btn0 = Button(17)
btn1 = Button(18)
btn2 = Button(27)
btn3 = Button(22)
btn4 = Button(23)
btn5 = Button(24)

leds = LEDBoard(7, 8, 9, 10, 11)
player = vlc.MediaPlayer("")

def stop():
    print("Button is pressed")
    global player    
    player.stop()
    leds.off()

# afspelen van een live audiostream (mp3)
def radio1():
    print("Button is pressed")
    leds.off()
    leds[0].blink()
    global player
    player.stop()
    player = vlc.MediaPlayer("https://icecast.omroep.nl/radio1-bb-mp3")
    player.play()

# afspelen van een willekeurig muziekbestand uit een directory
def radio9():
    print("Button is pressed")
    leds.off()
    leds[8].blink()
    global player
    player.stop()
    file = random.choice(os.listdir("/home/pi/internetradio/Music/GTA3Radio/"))
    print(file)
    player = vlc.MediaPlayer("/home/pi/internetradio/Music/GTA3Radio/" + file)
    player.play()

# afspelen van een vlc-playlist (in vaste volgorde)
def radio10():
    print("Button is pressed")
    leds.off()
    leds[9].blink()
    global player
    player.stop()
    player = vlc.MediaListPlayer()
    medialist = vlc.MediaList()
    player.set_media_list(medialist)
    medialist.add_media('/home/pi/internetradio/Music/Favorites/FavoriteMusic.xspf')
    player.play()

while True:
    btn0.when_pressed = stop
    btn1.when_pressed = radio1  #NPO1
    ...

 

1 gedachte over “DIY-internetradio

  1. Pingback: Jukebox-Radio - Avonturen met de Raspberry Pi

Gesloten voor reacties.