101.5 FM Programming

At first, it was everything I could do just to keep my transmitter running stable for an evening of pleasant listening, so my programming options were limited. Playing CDs from one player, plugged directly into the transmitter with only a minimal amount of audio processing in between, it became a rather high-maintenance task as well. Eventually, I created a programming system that allowed me to enjoy maximum music with minimum fuss. The equalized mixer was a first step toward better sound. A six-disk Pioneer CD changer was the big leap to making an entire evening’s repertoire come down to little more than pushing one button. When I decided I was technically ready for 24/7 operation, again my options became limited. Answer: rebroadcast anything the public couldn’t get normally, even reports from a weather radio for hours on end. In the fall of 2000, I got a satellite dish and finally went all music all the time, thanks to the wide variety of commercial-free music channels available. Here is what 101.5 FM’s programming day now sounds like:

--Note: This is the schedule I followed while I built this site in 2002-03, preserved for sentimental reasons, though it hasn’t changed much. The big difference is no CDs or satellite get played now. The banner above describes the schedule at the current hour throughout the week
Weekdays

Then, when I can get around to it, I load the CD players up for a relaxing evening of contemplative sounds. The flow reverses direction like the tide going back out to sea...classic rock to adult alternative to smooth jazz and finally, to lull me off to dreamland, some new age. At the point the last CD ends, the satellite receiver is timed to kick back on with all night New Age under the stars.

Weekends

Weekends get a little more variety.

My CD collection

If you’re a fellow audiophile, why not compare your record collection to mine? This text file can be inserted into any spreadsheet program and viewed alphabetically by artist. It’s big, so set it up for 650 rows of cells to see it all.

The technical stuff

Back to home

Station ID Tags

Stations identify themselves for legal purposes by their assigned call letters (e.g. K-R-U-D, W-A-N-K). I've never given my signal a lettered call sign. The FCC controls that sort of thing, and the less I have to do with them the better. I use what the industry calls positioners, catchy slogans that create a unique identity for the station based largely on its format. Since I deal daily with a half dozen formats, I play instead on my complete devotion to uninterrupted music. You’ve already seen one of them on the “bumper sticker” on the home page (...because commercials suck!). Others among the two dozen or so I currently run include:

Because I am shy about revealing my identity (can you tell?), I used the speaking function on my Mac to record the positioners. Recently I’ve learned programming with AppleScript, and when it came time to record new positioners when I changed frequencies, I set up a high-tech way of doing them. First, type out everything you can think of to say about your station in TextEdit, breaking each one into a new paragraph. Then download a shareware program called Soundflower, which enables QuickTime audio recordings from your sound card. Since both TextEdit and QuickTime are scriptable, the script you see here will record each paragraph into a separate sound file. Just create a folder called Voicers in your Documents folder first. Afterward you can import them into iTunes, burn them to CD, or load them on your iPod. I connect the iPod dock to my mixer using its Line Out jack.

In November ‘07 my iPod’s hard drive took leave of this world, so I moved up to an iPod Touch. A remarkable instrument, but some drawbacks, the most noteworthy is that the alarm clock won’t trigger a playlist. Since I had been using this feature to play music on my station for some time, I was taken aback. Well, all my music is also on my laptop, so I simply have it wake up at an appointed time, then run this script from the crontab one minute later:

tell application "iTunes"
 launch
 delay 20
 set frontmost to true
 tell source "Library"
  set myList to "Adult Alternative"
  tell playlist myList
   set shuffle to true
   set mytrack to some track
   play mytrack
  end tell
 end tell
end tell

Just copy and paste these into a new script window, compile them, and you’re off and running. In the second script, simply substitute the text Adult Alternative for the name of the playlist of your choice.

What's that you say? How can I do this in Windows? Sorry, can’t help you there. Shoulda bought a Mac, but you didn’t need me to tell you that!

Killer App

Three months after putting the new transmitter on line, I dusted off my limited skills in Xcode to tackle building an app that would run my voicer IDs in between songs at regular intervals. My collection of running iPods (5th generation click-wheel and one of the first iPod Touch models) had served me well when I wanted a break from satellite music, but neither was up to handling a sophisticated app. So I turned to a deactivated iPhone 6 I had replaced a few years ago, and after a few weeks overcoming a hefty learning curve, I was finally able to mix voicers from one playlist with music from another, so station IDs run every 3 songs. Other features include filtering out recently played songs for more variety, and sorting by last played date so the voicers would not recur in rapid succession. But don’t look for it in the App Store anytime soon―Apple wants $99 a year to register an app, and at this point, my skills are not in a position to develop anything with commercial potential.

The buttons allowed me to choose a playlist, and begin playing it within a few seconds. Switching between views allowed for enough space in the design. Classic Rock distributes song rotation among 4 different decades, and all playlists have customized IDs to fit each genre. A timer switches playlists at a given hour, allowing a song to play to conclusion before the change occurs.
New version! In February 2021 I spent my tax refund on a Mac mini to replace my 8-year-old MacBook Pro. This allowed me to use Xcode’s Mac Catalyst to convert my iOS app to run on the Mac. Besides having way more room for music than my old phone, the new Mac let me achieve 24-hour autonomous operation, switching playlists at appointed hours without human assistance.
Update June 2021: Concocted an algorithm to maintain artist separation of at least 10 songs. Because songs are randomly shuffled upon playlist retrieval, on too many occasions I would hear 2, even 3 songs by the same artist within 15 minutes of each other. Now the app interface displays a list of recent artist plays to show none have been duplicated within the desired range of artist separation. Insanely great!

Update October 2021: Completely revamped the app to allow user input to set up custom playlists. The original had the weekly schedule hard-coded into the view controller, where one would have to rewrite the app to make any change in when a playlist ran. So I spent 3 months learning to build a user interface to accept the data needed to create a new playlist.

Once saved, playlists attributes now reside in the computer drive, not the code. After setup is complete, one can review all playlists and a rundown of playlists scheduled for that day. This version runs autonomously for me until a power failure or software update interrupts the operation of my Mac. Changing schedules is a simple matter of adding or deleting a playlist. Having a library of over 3 thousand songs across multiple genres helps, too!

Update December 2022: Added a feature where space between station IDs can now be managed by minutes as well as songs. I noticed my playlists with long songs could sometimes go half an hour or more between IDs, so now IDs can optionally run after a certain amount of time has elapsed.

Update March 2023: Achieved my desiderata of editing music queues on the fly. When I was using my original iPhone app, the iOS music app contained this feature, but the Upcoming Songs tab on the Mac version never displays the queue. So I set out to build my own, and got it to work in just five days! This, along with my recently added time-aware feature for placing station IDs, is useful for managing the frequency of long songs that can still disrupt a regular schedule of IDs. Song order can be manually shuffled, or songs can be deleted from the stack. The ability to visualize a music queue also helped when recoding the app to deal with a memory bloat problem.