I am pretty much a novice myself but I will try to help!
The good thing about the playlists and the audio files indicated in the
playlists is that they can change dynamically, and liquidsoap will notice and
use the updated playlist and/or audio files.
What I am doing in my application is using shell scripts external to liquidsoap
to build the playlists and audio files on the fly. I use crontab to schedule
updates of the audio files and playlists, and then the liquidsoap code always
uses the latest versions.
In my application, I have a newscast that I want to follow a standard format at
the top of the hour. I use a shell script to replace the audio files indicated
in the "news.pls" file every hour. I do the same with weather at the bottom of
the hour.
You can also change the lines in the playlist file itself and liquidsoap will
track the changes.
In my application I like having the flexibility of using shell scripts while
leaving the audio and timing specific stuff to s simpler liquidsoap program.
Fact is that because I am new I don't really know if (or how) this can all be
done within liquidsoap. You can use C, Python, or any language in fact to
build and modify the playlists and audio files, of course. I am using Bourne
shell scripts (#!/bin/sh) only because I haven't had a need for anything more
complex yet.
In your case, write a script to choose the item from "liners", the item from
"comedy", and combine them with a selection of items from "music" into a
playlist. Then run this script every hour or half hour. Point liquidsoap at
your .pls file and this will solve the problem, except for one aspect: the
specific 28 minutes of music.
What I would do in this case (in fact I have a need for this myself) is to
investigate audio utilities like "sox" to see if they can be used to return the
length of a particular audio file. Then I would write a little script to build
28 minutes of music by choosing tracks and putting them into an ASCII .pls
file. Put the other two items at the top and bottom, and you're off with it!
In my application I have say 100 episodes of a particular radio drama. I want
to choose one at random for the next show. Here is my Bourne shell script:
---
#!/bin/sh
if [ ! $1 ]
then
echo "Usage: $0 <directory of mp3/m4a files>"
else
a=`od -vAn -N4 -tu4 < /dev/urandom`
echo Random number: $a
b=`find $1 -name *.mp3 -print | wc -l`
echo Number of episodes: $b
c=`dc -e "$a $b % 1 + p"`
echo Modulus+1: $c
c="$c"p
echo c modified: $c
d=`find $1 -name *.mp3 -print | sed -n $c`
echo $d
cp "$d" $1/current.mp3
fi
kevin@citadel:~/radio/scripts$
---
It's still uncommented and has debug "echo" statements in it because I just
wrote it yesterday. It chooses one of a number of episodes at random and
copies this to a file called "current.mp3". The associated playlist includes
an entry for "current.mp3". This script runs once per hour/day/whatever, then
whenever the show is called on through the switch() construct, the
randomly-chosen episode will play.
Here's a sample playlist for the science fiction show "X Minus One":
---
kevin@citadel:~/radio/playlists$ cat xminusone.pls
/home/kevin/radio/content/ident/id.ogg
/home/kevin/radio/content/info/xminusone-intro.ogg
/home/kevin/radio/content/scifi/xminusone/current.mp3
/home/kevin/radio/content/info/xminusone-trailer.ogg
kevin@citadel:~/radio/playlists$
---
I play a station identification, "id.ogg"; then a show intro blurb; then the
random episode; then end with a show trailer.
This playlist, "xminusone.pls" is a playlist.merge() source that is included
for triggering at a specific time in a switch() construct.
Hope this helps,
Kevin
On 2013-04-04, at 2:11 PM, Christopher Muldrow <[email protected]>
wrote:
> This is great information. Let me ask one dumb question. Is there a good way
> to dynamically merge the 30-minute playlists from the separate sources? In
> other words, I've got
> music = playlist(mode='random', "/mnt/musicMount/watch/BLUES/")
> comedy = playlist(mode='random', "/mnt/musicMount/watch/COMEDY/")
> liners =
> playlist(mode='random',"/mnt/musicMount/music/imported/4/unknown/unknown/")
> If I want one thing from "liners" and then one thing from "comedy" and then
> 28 minutes from "music," can I make that happen? i thought merge_tracks would
> do that, but it's clearly not for that. Should I be reading up on PLS files
> to do this operation in the PLS file instead of inside of the Liquidsoap code?
> Thanks!!
>
>
> On Thu, Apr 4, 2013 at 4:54 PM, Kevin McQuiggin <[email protected]> wrote:
> Hi Chris:
>
> I just had (and solved) the same problem!
>
> Put your two show lineups into two playlists, call them "program1.pls" and
> "program2.pls".
>
> Use playlist.merge() to create a single track out of the playlists. You need
> a short macro/function definition for this, see below.
>
> Then use a switch() construct to schedule the two merged playlists at the top
> and bottom of the hour.
>
> You can do it like this:
>
> ---
>
> def playlist.merge(uri) =
> pl = playlist.reloadable(uri)
> reload = fst(pl)
> s = snd(pl)
> s = merge_tracks(s)
> on_end(delay=0.,fun(_,_)->reload(),s)
> end
>
> security=single("some file to play when all goes wrong")
> x = audio_to_stereo(playlist.merge("program1.pls"))
> y = audio_to_stereo(playlist.merge("program2.pls"))
> s=switch([ ({0m}, x),
> ({30m}, y)
> ])
>
> radio = fallback(track_sensitive=false, [
> s,
> security
> ]
> )
>
> ---
>
>
> You may not need the audio_to_stereo() function if your files are already
> 2-channel.
>
> Hope this helps, it works for me,
>
> Kevin
>
>
>
>
> On 2013-04-04, at 12:42 PM, Christopher Muldrow <[email protected]>
> wrote:
>
> > I'm trying to use Liquidsoap to play a jingle, then a news report, then a
> > weather report at the top of the hour (00m0s). Then I want it to play music
> > pulled from a single folder until the bottom of the hour (30m0s), when I
> > want to play another jingle, replay the news report and replay the weather
> > report. The jingles are in a folder. The news and weather are single files
> > on the file system. I've tried using a switch, but the news and weather
> > files aren't necessarily the same length every day, so I can't figure out
> > how to set the value in the switch to peg the time for this whole sequence
> > to begin. Any hints?
> >
> > --
> > Chris Muldrow
> >
> >
> > ------------------------------------------------------------------------------
> > Minimize network downtime and maximize team effectiveness.
> > Reduce network management and security costs.Learn how to hire
> > the most talented Cisco Certified professionals. Visit the
> > Employer Resources Portal
> > http://www.cisco.com/web/learning/employer_resources/index.html_______________________________________________
> > Savonet-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/savonet-users
>
>
> ------------------------------------------------------------------------------
> Minimize network downtime and maximize team effectiveness.
> Reduce network management and security costs.Learn how to hire
> the most talented Cisco Certified professionals. Visit the
> Employer Resources Portal
> http://www.cisco.com/web/learning/employer_resources/index.html
> _______________________________________________
> Savonet-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/savonet-users
>
>
>
> --
> Chris Muldrow
> Chief Digital Officer
> The Free Lance-Star Companies
> [email protected]
> 540-368-5006
> ------------------------------------------------------------------------------
> Minimize network downtime and maximize team effectiveness.
> Reduce network management and security costs.Learn how to hire
> the most talented Cisco Certified professionals. Visit the
> Employer Resources Portal
> http://www.cisco.com/web/learning/employer_resources/index.html_______________________________________________
> Savonet-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/savonet-users
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire
the most talented Cisco Certified professionals. Visit the
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users