Browse Source

dirty commit software inc.

master
crunk 8 months ago
parent
commit
5862bb66d5
  1. 23
      240split.py
  2. 12
      README.md
  3. 19
      buildplaylist.py
  4. 12
      fireup.sh
  5. 71
      radio.liq
  6. 12
      telnetmetainject
  7. 1
      youtubecmd

23
240split.py

@ -0,0 +1,23 @@
#!/usr/bin/python3
#this script splits text on space with a maximum of 240 characters
#but on whole words. because icy_medata has a max of 255 characters.
import sys
text = sys.stdin.readlines()
output = []
line = []
sentence = ""
for words in text:
for word in words.split():
if len(word) + len(" ".join(line)) < 240:
line.append(word)
else:
output.append(" ".join(line))
line = []
line.append(word)
"#add the last word"
output.append(" ".join(line))
for line in output:
print(line.replace(',', ''))

12
README.md

@ -0,0 +1,12 @@
# Bag of radio scripts
This are some messy scripts. They don't work out of the box.
You need maybe another tool like pallangana and maybe some
python code to generate a radio html
[palanggana](https://git.vvvvvvaria.org/crunk/palanggana)
It assumes you have icecast2, liquidsoap and python installed.
This repo is meant to inspire other radio streamers that want to
tie together a few tools.

19
buildplaylist.py

@ -0,0 +1,19 @@
#This is a pretty weird script, it gets lines of text from somewhere
#And it makes a playlist, to keep the amount of tracks loosely connected
#To the amount of text.
import sys
from subprocess import Popen, PIPE
magic = sys.stdin.readlines()
lines = []
for line in magic:
lines.append(line)
pfind = Popen(["find", "/media/mp3" ], stdout=PIPE)
pgrep = Popen(["grep", "mp3"], stdin=pfind.stdout, stdout=PIPE)
pfind.stdout.close() # Allow pfind to receive a SIGPIPE if pgrep exits.
pshuf = Popen(["shuf", "-n {0}".format(len(lines))], stdin=pgrep.stdout)
pgrep.stdout.close()

12
fireup.sh

@ -0,0 +1,12 @@
#!/bin/zsh
echo "let's go"
find $PWD /home/user/incoming | grep .mp3 | shuf > /media/mp3/playlist.m3u
source .venv/bin/activate
python palanggana.py --magic shoutout | \
python renderradiopage.py | \
python buildplaylist.py >> /media/mp3/playlist.m3u;
liquidsoap ../radio/radio.liq &&
echo "the radio is currently off" | python renderradiopage.py;
deactivate;

71
radio.liq

@ -0,0 +1,71 @@
#!/usr/bin/liquidsoap
set("log.file.path","/tmp/<script>.log")
%include "passwords.liq"
# Print log messages to the console,
set("log.stdout", true)
set("server.telnet",true)
#If the playlist crashes
security = single("~/radio/default.ogg")
#Regular playlist
go = playlist.once("/media/vault/playlist.m3u")
#1. this doesn't work and
#2. who the fuck makes a list read from the back?
#radio = sequence([go, first])
radio = fallback(track_sensitive = false, [go, security])
###======================= update metadata from telnet==============
def icy_update(v) =
# Parse the argument
l = string.split(separator=",",v)
def split(l,v) =
v = string.split(separator="=",v)
if list.length(v) >= 2 then
list.append(l,[(list.nth(v,0,default=""),list.nth(v,1,default=""))])
else
l
end
end
meta = list.fold(split,[],l)
# Update metadata
icy.update_metadata(mount="/radio",password=ICECAST_SERVER_PASSWORD,
host=ICECAST_SERVER_HOST,meta)
icy.update_metadata(mount="/radio.ogg",password=ICECAST_SERVER_PASSWORD,
host=ICECAST_SERVER_HOST,meta)
"Done !"
end
###============ register the ability for telnet metadata update =====
server.register("update",namespace="metadata",
description="Update metadata",
usage="update song=..",
icy_update)
###======= sound collage of 5 seconds(for testing lists) ============
def add_cue_out (m) =
[("liq_cue_in","0"),("liq_cue_out","5")]
end
#==turn on to test playlist generation etc.=========================
#=========== will only play 5 seconds per track ===================
#radio = map_metadata(add_cue_out, radio)
#radio = cue_cut(radio)
#============= shutdown function ===================================
def shutdownhandler()
print("blank detected and shutting down stream")
shutdown()
end
#========= upon 20 seconds of silence shutdown the radio ===========
#====== (end of stream or other problem) ===========================
radio = on_blank(shutdownhandler, radio)
output.icecast(%mp3,
icy_metadata="true",host=ICECAST_SERVER_HOST,port=ICECAST_SERVER_PORT,password=ICECAST_SERVER_PASSWORD,
mount="radio",radio)
output.icecast(%vorbis,
icy_metadata="true",host=ICECAST_SERVER_HOST,port=ICECAST_SERVER_PORT,password=ICECAST_SERVER_PASSWORD,
mount="radio.ogg",radio)

12
telnetmetainject

@ -0,0 +1,12 @@
#!/bin/sh
# script to inject any text into icy_metadata of icecast
# using telnet and liquidsoap.
IFS=$"\n"
while read -r line;
do
echo "$line"
(sleep 2; echo "metadata.update song=$line";echo quit) | \
nc localhost 1234;
sleep 30;
done

1
youtubecmd

@ -0,0 +1 @@
youtube-dl -x -o '%(title)s.%(ext)s' 'youtube-id' --audio-format mp3 --ignore-errors
Loading…
Cancel
Save