This is what my hobby projects looks like now.
I tried to annotate it, but I was too lazy to polish
it. Maybe somebody could use ideas, or maybe
it could be fun for the developers to see what
people are doing with liquidsoap.


# This script streams to mustafejen.se and also
# to a channel on a deep web station.
# It's mainly ripped from tutorials and some parts
# are from other peoples scripts mentioned on the
# mailing list, some parts are added from advice
# and some things are figured out by reading the
# API, using imagination and testing.

# Below some code which makes me able to modify the streams
# over the network.

set("server.socket",true)
set("server.socket.path","/home/per/webradio/liquidsoap/socket")
set("server.socket.permissions",440)
set("server.timeout",-1.)

# Below some things which will hopefully help encrypting the incoming
# streams in the future. All source clients are not prepared for this
# yet, but there is ongoing work. If you can't wait for the source
# client developers, maybe it's worth a try to route the incoming
# streams through ssh (secure shell) tunnels.
#
# something like "ssh -N -T -L 8000:localhost:8000 my.server.org"
# and the connect the source client to port 8000 on localhost

set("harbor.ssl.certificate","/home/per/liquidsoap-daemon/certs/cert.pem")
set("harbor.ssl.private_key","/home/per/liquidsoap-daemon/certs/privkey.pem")

# First find a single file which will be used when the other sources of
sound fail:

default = single("/home/per/ustiusti.ogg")


# Read raw sound input from a named pipe:
tomtetest = input.external(id="tomtetest", "dd if=/home/per/tomtetest
bs=16k 2>/dev/null")
##tomtetest = input.external(id="tomtetest", "dd if=/home/per/tomtetest
2>/dev/null")

# Below is an option to read input from a jack source

## knark = input.jack(id="liquidsoap", clock_safe=false)

# Add a live source. I have a mono microphone, so I convert it to stereo.
# If your live source is stereo, you won't need the audio_to_stereo trick.


live = audio_to_stereo(input.harbor(id="live", replay_metadata=true,
"test.ogg", port=8081, password="james_bond", buffer=1.0))
#live = audio_to_stereo(input.harbor.ssl(id="live",
replay_metadata=true, "test.ogg", port=8082, password="james_bond",
buffer=1.0))



jive = amplify(4.0, live)    

jive = server.insert_metadata(id="jive", jive)

# Add a live (encrypted) source. I have a mono microphone, so I convert
it to stereo.
# If your live source is stereo, you won't need the audio_to_stereo trick.


evil = audio_to_stereo(input.harbor.ssl(id="evil", replay_metadata=true,
"tset.ogg", port=8082, password="james_bond", buffer=1.0))
#evil = audio_to_stereo(input.harbor(id="evil", replay_metadata=true,
"tset.ogg", port=8081, password="james_bond", buffer=1.0))



ejiv = amplify(4.0, evil)    

ejiv = server.insert_metadata(id="ejiv", ejiv)


# Below my plans to connect bums and gypsies to the stream.

# Add bakfickan

bakfickan1 = audio_to_stereo(input.harbor(id="bakfickan1",
"bakfickan1.opus", port=8081, password="james_bond", buffer=1.0))
#bakfickan1 = audio_to_stereo(input.harbor.ssl(id="bakfickan1",
"bakfickan1.opus", port=8082, password="james_bond", buffer=1.0))

bakfickan2 = audio_to_stereo(input.harbor(id="bakfickan2",
"bakfickan2.opus", port=8081, password="james_bond", buffer=1.0))
#bakfickan2 = audio_to_stereo(input.harbor.ssl(id="bakfickan2",
"bakfickan2.opus", port=8082, password="james_bond", buffer=1.0))

bakfickan3 = audio_to_stereo(input.harbor(id="bakfickan3",
"bakfickan3.opus", port=8081, password="james_bond", buffer=1.0))
#bakfickan3 = audio_to_stereo(input.harbor.ssl(id="bakfickan3",
"bakfickan3.opus", port=8082, password="james_bond", buffer=1.0))

bakfickan4 = audio_to_stereo(input.harbor(id="bakfickan4",
"bakfickan4.opus", port=8081, password="james_bond", buffer=1.0))
#bakfickan4 = audio_to_stereo(input.harbor.ssl(id="bakfickan4",
"bakfickan4.opus", port=8082, password="james_bond", buffer=1.0))

hakfickan = add([bakfickan1, bakfickan2, bakfickan3, bakfickan4])

bakfickan = amplify(4.0, hakfickan)

# I tried to add an internet escort voice to the stream. I don't know if
she is streaming, or if she is a chinese SPAM company.

# Add Maxine(?)

maxine = amplify(4.0, audio_to_stereo(input.harbor(id="maxine",
user="maxine", "maxine.opus", port=8081, password="james_bond",
buffer=1.0)))
#maxine = amplify(4.0, audio_to_stereo(input.harbor.ssl(id="maxine",
"maxine.opus", port=8082, password="james_bond", buffer=1.0)))

# AK. I would not mind him interrupting the pirated music with his jive.

# Add AK

ak = amplify(4.0, audio_to_stereo(input.harbor(id="ak", user="ak",
"ak.opus", port=8081, password="james_bond", buffer=1.0)))
#ak = amplify(4.0, audio_to_stereo(input.harbor.ssl(id="ak", "ak.opus",
port=8082, password="james_bond", buffer=1.0)))

# Berghem has kids and not so much time to stream, but knows how to do it.

# Add Berghem

berghem = amplify(4.0, audio_to_stereo(input.harbor(id="bergehem",
user="berghem", "berghem.ogg", port=8081, password="james_bond",
buffer=1.0)))
#berghem = amplify(4.0, audio_to_stereo(input.harbor.ssl(id="bergehem",
"berghem.ogg", port=8082, password="james_bond", buffer=1.0)))



# Add a playlist

hay     = playlist("/home/per/Musik/haylist.txt")

# You can also add another playlist (or many playlists)

## gray    = playlist(reload=600,"/home/per/Musik/prat/svammel.txt")

# Add some sources from the internet. The output.dummy I added
# because it seemed to remove som log file messages which I did
# not think I needed at the time of commenting this script.

kpfa = input.http(max=30.0, buffer=20.0,
"http://mustafejen.se:8000/kpfa_64";)

output.dummy(fallible=true, kpfa)

sjrpt = input.http(max=30.0, buffer=20.0,
"http://http-live.sr.se/p1-aac-96";)

output.dummy(fallible=true, sjrpt)

# Add a second mono sound file, convert it to stereo
# and amplify it.

dorn = single("/home/per/Musik/prat/norn.ogg")
norn = audio_to_stereo(dorn)
porn = amplify(2.0, norn)


# Create a source which plays (without letting tracks finish):
# First the raw sound input from the named pipe
radio = fallback(track_sensitive=false,[
(tomtetest),

# If there is no input on the named pipe, play the jack source
# if it is commented out and has input
## (knark),

# If there is no input on the jack source, first play the second
# mono file and switch to the second source from the internet
# at the times mentioned in the switch regardless if the track
# is finished or not. When the time is out for kpfa ...
 
switch(track_sensitive=false, [({3w8h58m-3w8h59m}, porn),
({3w8h59m-3w10h31m}, kpfa)]),
switch(track_sensitive=false, [({5h55m5s-6h10s}, sjrpt)]),

# ... we turn on the first playlist defined which you will
# find if you scroll up in the script. In case the sources
# in the switch above are not available, the script would
# probably have moved on to try the playlist anyway.

(hay),

# In case the playlist doesn't work for some reason play
# the single file we defined first in the script.

(default)])

# Below some cruft
## radio = random(weights=[5,1],[ radio, gray ])

# Create the source which will output to icecast
# further down in the script. This source will first
# attempt to play the live input I coverted to mono,
# then it will try the procedure starting above
# named "radio".
 
# Temporary 1
#jingle = playlist("/tmp/jingle.txt")

full =
  fallback(track_sensitive=false,
    
    [bakfickan,
    maxine,
    ak,
    berghem,
    jive,
    ejiv,
    request.queue(id="request"),    
            radio])

# Temporary 2
#dull = random(weights=[1,5],[jingle, full])

# Below is a way to publish icecast streams
# on http://flows.liquidsoap.info/
# This doesn't seem to work right now,
# maybe it's deprecated but at least it
# produces no error messages. Use at own risk.

 full = register_flow(
 radio="mustafejen",
 website="http://mustafejen.se/";,
 description="Stream from Ersboda",
 genre="Eclectic",
# streams=[("ogg/128k","http://mustafejen.se:8000/stream.ogg";),
# streams=[("fdkaac/64k","http://mustafejen.se:8000/feting";),
streams=
[("opus/32k","http://mustafejen.se:8000/stream.opus";),
 ("mp3/128k","http://mustafejen.se:8000/feting";)],
 full)




# It used to be possible to scrobble on last.fm,
# maybe it still is but I have commented it out.

## full = audioscrobbler.submit.full(
## user="kaptensnus",
## password="james_bond",
## full)



# Finally output the source named "full" described a bit
# up in this script. It will be output to icecast in various
# formats. Some outputs I don't use are commented out.


#output.icecast(%mp3(bitrate=128, stereo=true, samplerate=48000),
#host="mustafejen.se",
#port=8000,
#password="james_bond",
#mount="feting",
#description="Stream from Ersboda",
#genre="Alternative, eclectic",
#url="https://mustafejen.se/~per";,
#name="mustafejen mp3",
#public=true,
#full)




#    output.icecast(
#        %mp3(bitrate=128, stereo=true),
#        mount="listen.mp3",
#        host="shaincast.caster.fm",
#        port=19514,
#    user="source",
#        password="james_bond",
#        name="zonnic",
#        full)




#output.icecast(%vorbis(quality=0.4 , samplerate=48000, channels=2),
#host="mustafejen.se",
#port=8443,
#password="james_bond",
#mount="stream.ogg",
#description="Stream from Ersboda",
#genre="Alternative, eclectic",
#url="https://mustafejen.se/~per";,
#name="mustafejen vorbis",
#public=true,
#protocol="https",
#full)

#output.icecast(%opus(vbr="none", bitrate=32, samplerate=48000, channels=2),
#host="mustafejen.se",
#port=8000,
#password="james_bond",
#mount="stream.opus",
#description="Stream from Ersboda",
#genre="Alternative, eclectic",
#url="https://mustafejen.se/~per";,
#name="mustafejen opus",
#public=true,
#full)

#output.icecast(%fdkaac(bitrate=64, transmux="adts", channels=2,
samplerate=48000, aot="mpeg4_he_aac_v2", afterburner=false, sbr_mode=false),
#host="mustafejen.se",
#port=8443,
#password="james_bond",
#mount="feting",
#description="Stream from Ersboda",
#genre="Alternative",
#url="https://mustafejen.se/~per";,
#name="mustafejen",
#public=true,
#protocol="https",
#full)


# Vorbis stream to onion site

output.external(id="Tor", fallible=true, reopen_delay=3.0,
%vorbis(quality=0.4 , samplerate=48000, channels=2),
"/usr/bin/torsocks /usr/bin/oggfwd -n JamesBond -d 'Top_secret_project'
superdupersecret.onion 8000 x-files /mount.ogg",
mksafe(buffer(full)))

#output.external(id="Tor", fallible=true, reopen_delay=3.0,
%ogg(%opus(vbr="none", bitrate=32, samplerate=48000, channels=2)),
#"/usr/bin/torsocks /usr/bin/oggfwd -n JamesBond -d 'Top_secret_project'
superdupersecret.onion 8000 x-files /mount.ogg",
#mksafe(buffer(full)))



####                    ####
#    New part of the script           #

# Below is the web radio station source
# for the homeless music community "Verket"
# In case you have come so far, it's
# similar to the stuff above, and you will
# probably be able to reverse engineer it
# by looking at documentation on the page below:
# https://www.liquidsoap.info/




default =
single("/home/per/Musik/verket/Instängd/03-instangd-kott_ar_mord.mp3")

lista     = playlist("/home/per/playlist.txt")


# Play user requests if there are any,
# otherwise one of our playlists,
# and the default file if anything goes wrong.
radio = fallback([
(lista),
(default)])


# Add the ability to relay live shows

live = input.http(max=30.0, buffer=20.0,
"http://mustafejen.se:8000/verketlive.ogg";)

hive = audio_to_stereo(live)


verket =
  fallback(track_sensitive=false,
           [(hive),
            (radio)])

 verket = register_flow(
 radio="Verket",
 website="http://verketumea.se/";,
 description="Bands from Verket",
 genre="Mainly Punk",
 streams=[("mp3/128k", "http://mustafejen.se:8000/verket";),
 ("opus/64k", "http://mustafejen.se:8000/verket.opus";)],
 verket)


# Output to FLAC file

# output.file(id="inspelning", fallible=true, %flac(channels=2,
bits_per_sample=16, samplerate=48000, compression=5),
"/home/per/Musik/live/verket/dump.ogg", hive)


# Output to vorbis file

# output.file(id="inspelning", fallible=true, %vorbis(quality=1.0 ,
samplerate=48000, channels=2), "/home/per/Musik/live/verket/dump.ogg", hive)


# Output to OPUS and MP3

#clock.assign_new(sync=false,[output.icecast(
#%mp3(bitrate=128, samplerate=48000, stereo=true),
#mount="verket",
#host="mustafejen.se",
#port=8000,
#user="source",
#public=true,
#genre="Mainly Punk",
#url="http://verketumea.se";,
#password="james_bond",
#description="Bands from Verket",
#name="Verket mp3",
#verket)])

#output.icecast(%fdkaac(bitrate=64, transmux="adts", channels=2,
samplerate=48000, aot="mpeg4_he_aac_v2", afterburner=false, sbr_mode=false),
#host="mustafejen.se",
#port=8443,
#password="james_bond",
#mount="verket",
#description="Bands from Verket",
#genre="Mainly Punk",
#url="http://verketumea.se";,
#name="Verket"
#protocol="https",,
#verket)


output.icecast(%opus(bitrate=64, samplerate=48000, channels=2),
host="mustafejen.se",
port=8000,
password="james_bond",
mount="verket.opus",
description="Bands from Verket",
public=true,
genre="Mainly Punk",
url="http://verketumea.se";,
name="Verket opus",
verket)


#output.icecast(%vorbis(quality=0.4 , samplerate=48000, channels=2),
#host="mustafejen.se",
#port=8000,
#password="james_bond",
#mount="verket.ogg",
#description="Bands from Verket",
#public=true,
#genre="Mainly Punk",
#url="http://verketumea.se";,
#name="Verket vorbis",
#verket)

output.dummy(fallible=true, live)

###    Dark Sonnets    ###

omdetpajar = single("/home/per/Musik/diverse/Korla Pandit - Miserlou.opus")

grus     = playlist("/home/per/webradio/ezstream/dauslista.txt")

# Play order

ordning = fallback([
(grus),
(omdetpajar)])

sive = input.http(max=30.0, buffer=20.0,
"http://mustafejen.se:8000/darkson.ogg";)

dive = audio_to_stereo(sive)


darkson =
  fallback(track_sensitive=false,
           [dive,
            ordning])

# Output to FLAC file

# output.file(%flac(channels=2, bits_per_sample=16, samplerate=48000,
compression=5), "/home/per/Musik/live/darkson/dump-darkson.ogg",
fallible=true, dive)

# Output to vorbis file

# output.file(id="dinspelning", fallible=true,%vorbis(quality=1.0 ,
samplerate=48000, channels=2),
"/home/per/Musik/live/darkson/dump-darkson.ogg", dive)


# Output icecast in aac format

clock.assign_new(sync=false,[output.icecast(%fdkaac(bitrate=64,
transmux="adts", channels=2, samplerate=48000, aot="mpeg4_he_aac_v2",
afterburner=false, sbr_mode=false),
host="mustafejen.se",
port=8000,
password="james_bond",
mount="darkson",
description="Dark Sonnets",
genre="Various",
url="Vet ej vilken hemsida",
name="Dark Sonnet aac",
darkson)])


# Output to icecast in opus format

output.icecast(%opus(bitrate=64, samplerate=48000, channels=2),
host="mustafejen.se",
port=8000,
password="james_bond",
mount="darkson.opus",
description="Dark Sonnets",
public=true,
genre="Various",
url="Vet ej vilken hemsida",
name="Dark Sonnet opus",
darkson)

output.dummy(fallible=true, sive)

#output.dummy(blank())




_______________________________________________
Savonet-users mailing list
Savonet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to