Broadcast engineering stuff

December 31, 2009

Rivendell – How to schedule music

Filed under: Audio, IT, Streaming — thebrettblog @ 2:49 AM

Rivendell is a radio automation playout system. It contains some features you find in your typical commercial grade playout systems. In fact, Rivendell IS a commercial grade playout system. Just without the cost! I was made aware of Rivendell back in 2004 – at that time it was just starting to pickup some steam with the outside world. Rivendell was originally created for radio stations owned by Salem Communications. Unfortunately things did not work out in favor of Rivendell, and thus, it is no longer part of “Salem Radio Labs”. The automation package has matured very much since I first tried to get it running in 2004. People have created packages for various distros of Linux, including Fedora and Ubuntu. Rivendell was originally, and still releases packages for SUSE Linux.

A quick Google search this past weekend has proven to me the popularity of Rivendell is on the rise! Many more blogs, wiki pages and broadcasting tech forums are talking about Rivendell.  I have even seen the playout system featured in a youtube video.

Today I am going to show you how to schedule music, or have Rivendell automatically generate playout logs based on your rules. For record, I am running Rivendell version 1.0.0 on Fedora Linux. At the time of posting this, version 1.6.0 has been released.  If I upgrade, likely I will drop Fedora for Ubuntu. I promise to create a fully instructional, picture filled post if I do that.

Assumed is that you have Rivendell installed and running. I am going to show instructions for basic setup and importing cuts, since some users new to radio automation in general may find somethings strange.

Step 1 – Groups

Rivendell allows you to store your audio “carts” into groups. Typical groups could be something like Music, promos, legal ID, spots, etc. Lets get our groups setup here by running the RDadmin application. Use your administrator username and password specified at install. By default the user name is admin and the password is blank.

Now select “Manage Groups”, to….. manage your groups? Yes.

Most of the groups in my setup are included by default. I created “Temp” and “Locked” groups for my use. I use temp to dump lots of songs that are not ready to be played, but are in the system none the less. And I use locked for tracks that I don’t want to be played anymore, yet I do not want removed from the system yet.

You will need to specify a range for your groups. This is how many “Carts” can be in that group. Rivendell will allow a total of 999,999 carts. That’s a lot of audio! Each new cart will get assigned a summed number within that groups range. Example, first cart added to the Music group is cart # 010001, second is # 010002. Cart numbers help to quickly identify items, if not music then spots or jingles. You may notice that my created group “Locked” does not have a cart range. I did not feel it was necessary to waste a range for locked tracks. Since all the carts that are in this group have been moved from a previous group, they already have a number. Those moved carts will keep that original cart  number. Rivendell by default will assign new carts the next available number, in specified import group. Carts in fact, can be any number in any group – never the same number twice.  If anything, here I would suggest you change the range of Music to be bigger than the default range. OR, keep the default and change it later.

Step 2 – Scheduler codes

You can assign scheduler codes to your carts.  This is not required, but if you want to enjoy the full benefits of the scheduler you will do this step!

This time select “Scheduler Codes”

Think of scheduler codes as tags orlabels you would assign to albums in your CD collection. Here I have a variety of codes that I use. I code my music by decade, and by music genre. I also have a code for songs imported from a lossy source (compressed mp3) and a non lossy source such as an uncompressed 16bit WAV. Note, you may want to choose if you want Rivendell to use MP2 or WAV to store your audio cuts. Sorry, no MP3 😦

Multiple codes can be assigned to a single cart. So if you want to have a cart that is “90s” “Rock” from a “Loss” source material – I can do that. If there was a track that was considered Pop and also Rock, you could do that too. You will see how this pieces together in the following steps and create codes that fits your operation. Note, the code can not contain spaces or symbols. However the description can be whatever you want it to say.

Step 3 – Services

Some may argue that this step is out of order, and should be first. However I don’t care.

Please select “Manage Services” from the RDadmin app menu.

Think of a “Service” as a radio station. You must understand that Rivendell can run multiple stations (requiring multiple servers and computers!). Technically, this is the heart of the system. If this was a cluster of radio stations, RDadmin would be the main admin point for everything.

By default Rivendell creates the Production service. Here I left it in, but don’t use it. For my main music playout, it occurs under the “brettFM” service. The service called Time, is for a special macro firing time based log – nothing to do with this guide so ignore it.

Lets go ahead and create a brand new service by clicking the Add button

Go ahead and give it a name, you can use the Production service or past services as a template. Lets base this service on an empty config. Click OK

The service edit window will appear. Enter a description for the service. Then a log template name. When logs are generated this will be stamped to each one. I use %Y_%m_%d, so it stamps the scheduled date to the template name. When a log is generated for December 29th, 2008 it will be titled 2009_12_29. I suggest this setup, it is also set like this in the default, Production.

A group can be selected for Voicetrack cuts to be stored. If voicetracking is desired, go back and create a group called VT or voicetrack. Then choose it from the list on this screen. If the Music group is selected, recorded voicetracks will be included in the Music group. If old logs with voicetracking are not deleted, the old voicetracks will still be in the system. There is a very good chance that the next log generation will stick these old voicetracks into regular rotation – not ideal.

Check “Insert CHAIN TO at log end”. This will insure that at the end of log “2009_12_24”, Rivendell will load the next days log “2009_12_25” – if, of course, it has been created.

Checking “Enable AutoRefresh By Default” should automatically update changes made via RDlogedit app. In this version at least, I have never seen Rivendell automatically append changes made to a running log. If this isn’t selected, Rivendell will make you hit a button in RDairplay to refresh a changed log. The button only appears when a change has been made, I like this way much better.

Now click “Enable Hosts”, this is kind of important.

In most setups there should only be one item in this list, however some users may have configurations slightly different. For the majority of us, our server is also our playout machine and everything else that Rivendell does. Ideally, there would be one main database server/ file server, an audio playout machine for each service, and some control workstations for control, log generation or importing/ editing audio cuts. Since we want our service “BLOG” to play audio from RDairplay, running on the very same machine – we choose localhost.localdomain or or a custom name if specified in your distro setup. Just make sure it is under the enabled hosts list. Click OK to close this window,  then click OK on the Edit Service screen,  then click CLOSE on the Services window, then click QUIT to exit RDadmin.

Step 4 – Add carts

Now its time to run the RDlibrary app.

Don’t expect to see a list of free music to appear, this must be done by the operator – sorry. Select the Music group first, then click Add. This will set the new cart within the Music group cart range.

A new window appears, titled “Add Cart”. You can change the group if you didn’t want Music selected. Notice how the cart number will change to the next available number in each group. But yes, we still want Music selected, and this is an Audio cart.  Leave the cart title the default entry for now.

Yet another new window to look at. Here is a “Cart” as defined by most modern automation systems. The term “cart” is short for cartridge, which comes from the old NAB tape cartridges that were highly popular before computer automation. On a cart tape, sometimes multiple takes of  the same spot would be recorded next to each other, with a short gap between. The cart machine would play the first cut, a 2nd or 3rd cue track would tell the machine to stop at the start of the next cut (automatically cueing up the next cut, ready for playback). Then, the next time the spot was played, a different version would then play off the tape and so on.

Rivendell, like many others still use this same idea. A cart, can have multiple cuts or versions or takes. Each cut can have a weight to determine how often it plays in the rotation of other cuts in a cart. Cuts can also only play during specific times. That is as far as I will go into carts with multiple cuts. We are only going to use one cut in this cart. Every new cart by default will create one empty cut. Our job is to import audio into the cut.

Highlight the cut “Cut 001” and select the “Import|Export” button.

In this window by default everything you see is checked. Rivendell will read ID3 tags and insert the text into the appropriate cart fields. To disable this, uncheck Import file metadata. I am keeping this checked. The autotrim level will cut out silence that falls below -60db at the beginning and end of the audio file. The audio is not removed, the start and end markers are adjusted automatically. I changed my level to -60db in RDadmin.  Note: If it is changed in this screen, it will not remembered for the next import. Don’t change the level for Normalize, unless the source audio needs some extra gain or the audio interface requires it.

Click Select, and pick a file. I am not making another screen shot for this! (I picked an MP3 file that has an ID3 tag embedded). A progress bar in the above screen will show import progress. Note: Rivendell is converting whatever audio format imported the file is. If Rivendell is set for MP2 @ 128kbps, and anMP3 @ 128Kbps is selected, there will be further audio quality loss. If Rivendell is set at PCM16, there will be no additional loss to lossy source material. And near zero change to a lossless source in 16bit, however 24bit will dither down – best cast scenario.

Here is what happened after the import:

Rivendell took the fields from ID3 and inserted them into the cart fields. Notice that the Title and cut description will be the same in this automated process. Click Scheduler Codes and add what fields you find appropriate. Then click “Edit Markers”

In this window audio fine tuning controls are available. Most of these buttons are self explanatory. Select a control, then pick the location on the waveform where it needs to be. In the example I have 40 seconds of talk over, this will make the clock in RDairplay countdown my talkover length. Refer to Rivendell manual for further explanation. Click Save in this window. Then click OK to close cart edit window. You will now see the cart in the music library under the Music group. Now go ahead and import a lot more music, at least 50~100 songs.

Step 5 – Log creation: Events

This is where the building blocks of the log are put together. From end to start: A daily log is  based on an hourly grid, per weekday. Each hour in the GRID is created from a CLOCK. Each section of the clock is created from an EVENT. And each EVENT contains carts.

Run RDlogmanager

Now select “Edit Events”

We need to create an event. I am going to keep things simple, and create an event called “All Music”. It will select audio from the Music group, with any scheduler code and a title separation of 100minutes.

So here is what I did. I selected the check box “Select from:” and specified Music group from drop down box. I then entered 100minutes for title seperation. This can be longer or shorter depending on how many carts you have. I left “Must have code” blank so it picks all codes under the Music group. I then selected “First cart has a “Segue” transition”, so cuts crossfade with each other during playout.

IMPORTANT. Click the button “Services List” and add the service we created back in step 3.  In this guide I called the service BLOG, I did NOT add the default service Production. If you miss this step, there won’t be any music added in the end.

Click Save, Click OK.

Go ahead and Add another Event. We will call it  TOH or TopHour. This event will play a hand picked top of the hour ID. The event will have a hard start time, and will make itself play next. This will effectively keep our clock on time. More on that in next step. Here is the TopHour event

Here I hand picked a cart from the left hand side in the LEGAL group. I dragged and dropped it into the Pre-Import list. I selected the check box, “Use hard start time”. This makes the event pay attention to its clock time position (next step). Selecting Make Next will actually bump carts out of the way in the log so that it plays closest to its clock position. If we checked “Start immediately”, the cart will cut off whatever cart was still playing during its specified time.  I selected “Segue”, in case this event is able to play early. It will simply crossfade with the previous track. And roll on with the rest of the hour. Make sure your Service is enabled for this event. Click Save, Click OK.

This is enough to move onto the next step. As you experiment, you will see how many possibilities and different ways tasks can be accomplished. Note: You may click the Color button to give each event a color, this helps when making complex clocks.

Step 6 – Log creation: Clocks

Select “Edit Clocks”

Click Add, and give the clock a name. Technically, a different clock for each hour for each day of the week could be created. If you wanted a 90’s at 9pm on friday, this could easily be done in Grids (next step). For now, we will use the same clock all week, every hour. I am rightfully calling it 247. Click OK

Here it is, an empty clock. Type in 247 in the field labeled “Code:”. This can only be 3 digits. We will now add events to our clock. Starting with the top of hour ID. We will then add music events and adjust scheduler rules.

Click Add

Leave the start time at 00:00 and change the End time to 00:10. Click select and choose the TOH or TopHour event that was just created. Remember, this is a hard, make next event. It will cue itself up as close to the top of the hour as possible. Extra carts will get skipped, and this will help keep the log on time. NOTE: This ID could also be located at the bottom of the hour instead. Use a start time of 59:50 and an end time of 59:59.

Click OK. You will see a small sliver, this is the event.

Now we are going to “fill” our hour will carts from Music group.

Click Add again.

This time we will select our event All Music. It is not hard timed, so it floats around. The start time is 00:10, because of the 10 seconds allotted for an ID. The end time is 03:00.

We will use mostly 3min blocks of the event All Music. We will also have 3 blocks that have a length of 6min. When the log is generation, this hour will be slightly overfilled most of the time. For the few times it is underfilled, a previous overfilled hour will make up the time. The entire broadcast day is balanced very well this way. You may want to experiment with different time spans. Here is what I did:

Now lets set some rules so we don’t have 5 80’s song play in a row (if you want to force a scheduler code, make a new event and select the code). Click Scheduler Rules

In my setup I have Rivendell separate songs by the same artist by 45 minutes.  I don’t want more than 5 songs for 00’s to play in a row. Yet I don’t want a 70’s track to play after an 80’s or 60’s track. And to be sure, I wan’t there to be at least a 7 min before it thinks about possibly playing another one. I have loss and noloss set at 999, because I do not want any impact from those codes. NOTE: You can import rules from other clocks by hitting import. Click OK.

Make sure you have your Service enabled for this clock.

Step 7 – Log creation: Grids

Select Grids from the RDlogmanager app.

Select your service and click edit

Here is the grids. Like I said, each hour could be a totally different clock, with its own set of events. It’s all coming together now. Since we only have one clock, we will use it everyday, every hour. Click on the hour, then select the clock. Yes, each time. NOTE: If you selected a color for the clock, the button will be that color. Helpful when using multiple clocks. Make sure every hour has a clock assigned and click CLOSE. And also close service select screen.

Step 8 – Log Creation: Log Generation

OK. We are ready to generate a log! Click Generate Logs button

Select your service. By default Rivendell will select the next date, not the current one. Select whatever date you want, just know that the log will chain to the NEXT dates log.

Click Create New Log

This process takes a few minutes. If it immediately finishes with “No Exception”, make sure you have all clocks and events enabled for your Service. Make sure your service is enabled for your host. Also check that your groups are allowed to use your service. Make sure a template name exists for the service.

If not enough music exists to satisfy the rules created a list of the broken rules will appear. This means Rivendell had to break a break, like artist separation to keep filling music. Either create less strict rules, or import more music.

You can now create the next days log in advance, create a weeks worth in advance. In AUTO mode Rivendell will run automatically for days as long as the next dates long is available.

Step 8 – Load your log

For a full time station, this is really only done once. After that, Rivendell links to the next days log, and so on and so on.

Open RDairplay

Click the button titled “Select Log”

Select the current days log that was just created. It will show old logs and future logs if created. Click “Load”

Since the log was most likely not load at 23:59:59, it will be many hours behind schedule. Use the hard time ID’s to help find the correct hour to catch things up.

We are pretty close to where the log position should be at. Highlight the song, then click make next. This will make the song and the remaining log next to be played.

Now either click Play, next to the Make Next button. Or the first green START button.

OK, not too bad. According to the next timed start. We are 14:28 over the ID to be played at 2AM. We can either delete a couple items, or just let the ID bump them out at 2AM.

NOTE: Using bottom of the hour ID’s, or timed macros – even log notes to double sync will make sure that the end of the current log gets trimmed. Be careful not to bump the log chain!



  1. working with media files has been one of my biggiest hoppies, now I can’t keep up with all the updates.

    Comment by san diego audio video — December 31, 2009 @ 2:22 PM

  2. Thanks for the great tutorial; it was much better than wading through the Rivendell manual to figure this out and probably saved me a few hours and several headaches.

    Comment by Microsoft Bob — August 9, 2010 @ 1:43 AM

  3. hola, rivendell puede seleccionar toda una carpeta de .mp3? ó seleccionar alatoriamente las canciones?

    Comment by Pablo — August 27, 2010 @ 12:26 AM

  4. Hey thanks for this explanation on how to schedule music on the Rivendell system.

    We kept getting the “No Exceptions Found” message. Following your steps took care of it for us.

    — Mike @ WVMC FM

    Comment by Mike T — October 8, 2010 @ 2:56 PM

  5. Thanks for this tutorial.. huge help! Just one question.. when Rivendell generates the log, what folder does it save the log in?…

    Comment by Jon — November 10, 2010 @ 4:39 PM

    • To my knowledge, Rivendell does not automatically generate a viewable log file. I believe it is all stored in the sql database. If you want to see a text export of the daily log there are two ways to do this.
      Open RD_logedit and open desired log
      Click the Reports button and select Log Listing

      This will bring up a terminal screen running Vi or equivalent text editor.
      If it brings up Vi editor you can use :w to do a save-as

      For example to save the file to your desktop type:
      :w /home/rivendell/Desktop/log11.txt
      then press enter. Where rivendell is your username and log11.txt can be whatever you want it to be.

      The other method is to open RD_admin and click Manage Reports.
      Click add, try Text log as the export filter, then try other options later.
      Once complete with the data entry run RD_logmanager and select Manage Reports.
      Select the service for which the report is enabled. You should see it from the drop down box. Select date ranges and click generate.
      Hope that helps out

      Comment by thebrettblog — November 15, 2010 @ 10:27 PM

  6. I’ve checked, rechecked and again… I always endup with No Exceptions message after “non” generating logs… What am I doing wrong? Services, templates, assign to services… non of these fix my problem. The cart report states that OWNER as NONE. Can this be the problem?

    Comment by Pedro — August 22, 2013 @ 10:33 AM

  7. Thank you for this. I’m new to both Linux and Rivendell. Am now in the process of working my way through it.

    Comment by Owen Dawe — February 25, 2014 @ 3:04 AM

  8. I followed the instructions and all went well except when I entered the All Music event into the clock it only gave me one three minute section.

    Comment by Al Sargent — November 27, 2014 @ 11:56 PM

    • Did you enter the All Music event into the clock multiple times? As shown in this blog post, at 3min blocks to fill out the hour.

      Comment by thebrettblog — November 29, 2014 @ 11:56 AM

  9. […] music. However, this tutorial won’t cover all of that, although, maybe in a future post. The BrettBlog covers those concepts in better detail than anything else I’ve […]

    Pingback by Install Rivendell Radio Automation: Part 2 – Server Installation | Tec Whisperer — December 14, 2014 @ 10:34 AM

  10. […] music. However, this tutorial won’t cover all of that, although, maybe in a future post. The BrettBlog covers those concepts in greater detail than anything else I’ve […]

    Pingback by Install Rivendell Radio Automation: Part 2 - Server Installation - | — March 27, 2015 @ 9:57 PM

  11. […] music. However, this tutorial won’t cover all of that, although, maybe in a future post. The BrettBlog covers those concepts in greater detail than anything else I’ve […]

    Pingback by Install Rivendell Radio Automation: Part 2 - Server Installation | Tec Whisperer | Tec Whisperer — April 4, 2015 @ 6:39 AM

  12. […] music. However, this tutorial won’t cover all of that, although, maybe in a future post. The BrettBlog covers those concepts in greater detail than anything else I’ve […]

    Pingback by Install Rivendell Automation: Part 2 - Server Installation | Tec Whisperer | Tec Whisperer — May 23, 2015 @ 4:08 PM

  13. Thank you for this very much! I am still trying to figure out how to do play everything in a group sequentially. For example each cart has a chapter of an audio book. I want to play 30 min worth of carts in the morning sequentially. The next day I want to play another 30 min starting where it left off the day before. How would one do that automatically? I think it could be done manually but there are 400+ carts…

    Thanks again!

    Comment by Jon — April 1, 2016 @ 2:32 AM

    • Hi Jon,

      Interesting question! I have been thinking it over a bit here today. At first glance, I think you will want to utilize the Aux1 log, for the playout of audio book cart chapters. This way, you can isolate it from your normal log content. As long as you have Aux1 assigned to the same audio ports this will be seamless. You can create some macros to stop your main log playing and start playout on the aux1 log, and vice versa when its time to “re-join” to you normal main log content. You can use hard time next events to get close to the half hour markers you desire.

      For the second part of your question… Getting the carts to play sequentially, automatically. This would probably be best done with externally providing a music load file that Rivendell can use to pick the carts in the right order. You can use microsoft excel to quickly make your music load file and save it off as a file with no tabs or commas between each column.. The real takeaway here is to create a totally separate service, also create a new cart group with an enforced cart range you put your audio book segments into. These must be imported into your library in sequential cart order first of course. So “Disc 1 – track 1” should equal cart number 070001, track 2 = 070002 and so on. It sounds like you already have them loaded into the library in sequential order. If you are sitting on 400+ mp3 files and they have a naming scheme like disc 1 – track 1.mp3, you can setup a Dropbox in rivendell, point to a folder somewhere on your machine, use the correct metadata pattern and default group as the new one you created… If all goes correct, you can drop in all tracks from disc 1 first to your dropbox folder, they will get converted and carted in sequential order into your music library. Then do disc 2, and so on.

      I am going to write up a new post with your scenario. One, because its interesting to me and others may find themselves in similar situations like yourself. Two, it will touch on music data loading and Rivendell macro language which is powerful.

      Comment by thebrettblog — April 3, 2016 @ 1:28 AM

  14. Is there a mechanism for empty “carts” for voice tracking?

    Comment by Dennis Nuetzel — January 15, 2017 @ 7:57 PM

  15. I am really struggling with the TOH setup for IDs. I have been through this guide backwards and forwards, but the result is my ID file keeps repeating every other song. Using the latest version of RD. I tried adding it to the end from 59:50 – 59:59 and now it is not showing up at all… Not sure what to do. Thanks for a great guide though… This is good stuff… -Ed-

    Comment by edwardvalasek — March 5, 2018 @ 8:10 PM

  16. Love using RD , is there code for automatically creating several days on air log in advance ?

    Comment by Paul Wisdom — April 17, 2018 @ 5:05 PM

  17. Hi, is this applicable to the current (year: 2018) version of Rivendell? I was concerned because this is pretty old, but the screens look the same. I just installed it and need a tutorial like this, thanks Brett.

    Comment by Eliot — August 25, 2018 @ 10:32 AM

    • Hi Eliot, for the most part this guide is still applicable to the current release version of Rivendell

      Comment by thebrettblog — October 8, 2018 @ 10:09 PM

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a free website or blog at

%d bloggers like this: