Karl Ove Hufthammer

Detaljar om lagring av Internett-radio

Introduksjon

Eg har tidligare skriva om korleis ein kan lagra Internett-radio lokalt på harddisken for seinare bruk/lytting/arkivering. I den artikkelen nemnte eg at eg har sett opp eit sinnrikt system for å ta opp favorittprogramma mine automatisk. På oppfordring skal eg her gå i detaljar om systemet.

Sjølve systemet

Systemet er laga for Windows XP og Linux, men vil trulig fungera i andre Windows-versjonar òg. Det er ganske greitt å setta opp, og kjører heilt av seg sjølv deretter. Oppskrift følgjer:

Ingrediensar

For Windows treng treng me følgjande gratisprogram:

For Linux har me trulig det me treng allereie.

Nedlasting og lagring

Installer først cygwin. Me treng òg programmet wget, so pass på at det er kryssa av for dette under installeringa. Målet vårt no er å laga eit bittelite skript for nedlasting av lyd frå valfri kanal, i valfri tidslengd, og lagra denne med eit fornuftig filnamnm, med dato og klokkeslett. Alt dette skal veljast med parametrar til skriptet.

Mi løysing vart sånn:

#!/bin/sh
kanal=$2
if [ "$kanal" == "p1" ]
then
kanal=p1_hordaland
fi
filename=$(date +%Y-%m-%d-%H-%M)-$3.mp3
wget -T 25 -t 0 -O /felles/radio/uferdig/$filename http://lyd.nrk.no/nrk_radio_${kanal}_mp3_h &
wgetpid=$!
sleep $1
kill $wgetpid

Bytt ut /cygdrive/c/radio/ ovanfor med noko anna i Linux. Fila kallar me hent-radio.sh, og legg ho i mappa skript i heimemappa, typisk:

No kan me testa om dette fungerer. Kjør cygwin (Windows), eller logg inn og start ein konsoll (Linux). Skriv so følgjande:

cd skript
./hent-radio.sh 20 p2 Test

Dette skal lagra 20 sekund med opptak frå NRK P2, med filnamnet «Test» og i mappa c:\radio\ (eller kor du no har valt å lagra lydfilene i skriptet ovanfor). Me kan ta opp frå andre kanalar ved å bytta ut p2 med

eller nokon av dei andre kanalane som står nemnt på kanaloversikta. Merk at opptak frå P1 brukar Hordaland-versjonen av kanalen. Endra skriptet for å bruka ein annan versjon som standard, eller spesifiser heile kanalnamnet, for eksempel p1_ostlandssendingen.

Viss dette ikkje fungerer, er det ingen grunn til å gå vidare. Sjå på feilmeldingar og rett opp!

Automatisk opptak

No er det tid for automatisering, slik at maskina kan ta opp program på eiga hand, etter fast timeplan. Til dette brukar me programmet nnCron LITE (Windows) eller cron (Linux). Begge programma brukar nøyaktig same filformat.

Sørg for at nnCron LITE startar automatisk ved oppstart av Windows. Rediger so fila cron.tab i programmappa (Windows), eller kjør crontab -e (Linux), og legg til linjer på denne forma (for Windows):

38 18 * * 1-5 c:\programfiler\cron\a.bat 1500 p1 Barnetimen

Eller på denne forma (for Linux):

38 18 * * 1-5 /home/brukarnamn/skript/hent-radio.sh 1500 p1 Barnetimen

Denne seier at me skal ta opp frå P2 i 25 minutt (1500 sekund), frå klokka 18:38, måndag til fredag. Filnamnet skal vera «Barnetimen» (pluss datoinformasjon). Obs! Filnamnet kan ikkje innehelda mellomrom. Bruk heller bindestrekar (sånn-er-livet). Sjå gjerne mi cron.tab for eksempel.

Fila a.bat nemnt ovanfor treng me berre i Windows, og for å starta cygwin rett. Ho skal sjå sånn ut (legg fila i c:\programfiler\cron\):

cd c:\cygwin\bin
bash --login -i skript\hent-radio.sh %1 %2 %3

Finjustering og arkivering

Heilt til slutt kan me i Windows bruka mp3DirectCut til å kutta av uønskja lyd i begynnelsen og slutten av opptaket, for arkivering. Programmet fungerer for øvrig òg utmerka i Wine.

Oppsummering

Som sagt, når alt først er sett opp, so fungerer det heile perfekt. Det er veldig lett å legga til nye program for opptak, og elles treng ikkje systemet noko vedlikehald, med unntak av justering når NRK endrar programtidspunkta.

I historisk perspektiv

Opphavlig brukte eg (det utmerka) programmet Streamripper til lagring, samt eit mykje meir komplisert og uelegant system for resten av det praktiske. Men etter at dei gjekk over til tenaren Icecast 2 for utsending av NRK-radio, fungerte ikkje dette lenger. Takk til Lasse G. Dahl for løysinga med bruk av wget. Denne baserte seg på nedlasting av radiostraumar frå Høgskolen i Østfold, men denne vart lagt i 2010. Heldigvis overtok NRK med ei liknande løysing, som lett kan brukast til automatisk nedlasting.

17 kommentarar

  1. Jeg har jobbet litt for å få dette til å funke hos meg i Windows XP. Erfaringene kan kanskje hjelpe andre på mitt nivå.

    Utgangpunktet mitt er en installasjon av Cygwin med de nødvendige programmene. Første problem var at de nødvendige miljøvariablene av en eller annen grunn ikke lå inne. Derfor måtte jeg legge til
    ;C:\cygwin\bin;C:\cygwin\home\Lars_Brede\bin;C:\Program Files\cron
    under
    Settings → Control Panel → System Properties → Env. Variables → Path
    (La her til nnCron LITE for å lette commandolinjeoperasjoner.)

    a.bat-fila mi endte som:
    bash --login -i -c "hent-radio.sh %1 %2 %3" (trenger ikke full path her, og trengte vel aldri cd C:\cygwin).

    Eksempel på cron.tab – uten overraskelser:
    29 13 * * 7 "c:\Program Files\cron\a.bat" 5500 p2 Ord-Film-Popfront
    Håper dette kan hjelpe noen.

    Takk for et VELDIG nyttig script.

  2. Vil bare legge til at man kan angi varigheten av et opptak i minutter, timer eller dager i stedet for sekunder ved å bruke henholdsvis suffiksene m, h og d. Barnetimen-opptaket kan altså også automatiseres slik (testet med sleep versjon 5.3.0):

    38 18 * * 1-5 c:\programfiler\cron\a.bat 25m p1 Barnetimen (for Windows)
    38 18 * * 1-5 /home/brukarnamn/skript/hent-radio.sh 25m p1 Barnetimen (for Linux)

    Man kan også bruke desimaltall om man ønsker det (skrevet på engelsk vis, altså med punktum i stedet for komma), f.eks. for å ta opp i halvannen time:

    38 18 * * 1-5 c:\programfiler\cron\a.bat 1.5h p1 Test (for Windows)
    38 18 * * 1-5 /home/brukarnamn/skript/hent-radio.sh 1.5h p1 Test (for Linux)

    Dette er nok enklere enn å regne om til sekunder hver gang.

  3. Jeg har prøvd oppskriften over for å få til automatisk opptak fra radio. Dessverre funket ikke testen. Jeg fikk følgende feilmelding:
    /cygdrive/c/radio/2005-08-10-20-38-Test.mp3: No such file or directory
    og litt etterpå denne meldingen:
    ./hent-radio.sh : line6 : kill: - No such process

    Kunne du hjelpe meg videre?

    Da jeg installerte Cygwin krysset jeg BARE av for web-pakken. Det var jo så veldig mange pakker (packages), og da jeg prøvde å installere alle først tok det enormt lang tid.
    Skriptet skrev jeg i notisblokk.

    I skriptet henvises det til web-radioen til Høyskolen i Østfold (http://radio.hiof.no/). Men jeg finner ikke denne siden på internett. Er det det som skaper problemer?

    mvh,
    Anne Marie

  4. Det tyder på at noko er feil med skriptet. Prøv å lasta det ned direkte frå denne sida, i staden for å redigera det i Notisblokk. Og det er altso wget-pakken du skal ha, ikkje web-pakken.

  5. Takk for rask tilbakemelding!

    Jeg lastet ned sh-filen fra internett istedet. Så avinstallerte jeg web-pakken fra Cygwin og installerte bare wget isteden. Så gjorde jeg testen.

    Men jeg får de samme feilmeldingene som tidligere (bare at nå er feilen i linje 7, ikke linje 6).

    Noen flere tips?

    mvh,
    Anne Marie

  6. Nå fikk jeg feilmelding ved oppstart av PC-en (på grunn av nylige programvareendringer …). Noe sier meg at jeg er for grønn til å få til dette uten mye styr.

    Men, kanskje du vet om noen i Oslo-området som kunne hjulpet meg med å installere dette (firma/konsulent/privat, etc.)?

    mvh,
    Anne Marie

  7. Det kan vera nødvendig å starta maskina på nytt etter at du har installert Cygwin. Og det er òg veldig viktig at du har oppretta mappa radioc:\ før du kjører skriptet.

  8. Det går så det suser på den bærbare maskinen som kjører XP, men ikke fullt så greit på den stasjonære (Win 2000). Det er den automatiserte starten av programmet som ikke fungerer. På det aktuelle tidspunktet kommer bare et blink når Cygwin skulle startet. Men testinga går greit, så hva problemet er skjønner jeg ikke helt. Nå spiller det ikke noen rolle egentlig, for jeg bruker jo helst den bærbare maskinen, men det kunne vært interessant å hørt hva som er problemet.

  9. Jeg har forresten fått systemet til å fungere under Windows med MSYS i stedet for Cygwin. Jeg har installert MSYS i katalogen C:\msys og Windows-utgaven av wget i katalogen C:\Programfiler\wget. I tillegg har jeg lagt til banene C:\msys\bin og C:\Programfiler\wget i miljøvariabelen PATH, slik at de kjørbare filene i disse katalogene blir direkte tilgjengelige fra kommandolinjen som kommandoer.

    Nå kan jeg kjøre hent-radio.sh fra kommandolinjen ved å plassere meg i samme katalog som hent-radio.sh og skrive:
    sh hent-radio.sh 20 p2 Test

    Det er imidlertid nødvendig med noen små justeringer av selve skriptet for få det til å fungere uten Cygwin. Min modifiserte hent-radio.sh-fil ser slik ut:

    #!/bin/sh
    filename=c:/msys/bin/date +%Y-%m-%d-%H-%M-$3.mp3
    wget -T 25 -t 0 -O c:/radio/$filename http://radio.hiof.no:8000/nrk-$2-128 &
    wgetpid=$!
    sleep $1
    kill $wgetpid

    Denne lagrer opptakene i katalogen C:\radio. I tillegg har jeg min egen a.bat-fil, som ser slik ut:

    sh hent-radio.sh %1 %2 %3

    Denne må ligge i samme katalog som hent-radio.sh, så jeg legger både hent-radio.sh og a.bat i katalogen C:\Programfiler\cron (hvor jeg har installert nnCron LITE). Så er det bare å sette opp cron.tab slik det er beskrevet i artikkelen!

    For øvrig opplyser jeg om at siste utgave av Streamripper fungerer med Icecast 2, for dem som måtte ønske å bruke det i stedet for wget.

Legg til kommentar

E-postadressa vert ikkje synleg for andre. Obligatoriske felt er merkte med *.