Schedule Streaming Audio Recordings in Ubuntu
Intro: Schedule Streaming Audio Recordings in Ubuntu
If you're like me, your bosses actually expect you to work while on the job, and not sit listening to your favorite radio show like you might want to. In this instructable, I'll show how to record any audio stream automatically using mplayer, lame and cron to schedule the job.
STEP 1: Get Ubuntu, Create Directories
For this instructable, you'll need to have Ubuntu Linux. I run 7.04, but this may work for other versions as well. If people seem interested, I'll write a seperate instructable up showing how to do this with Windows.
If you already run Ubuntu, the only things you need are freely available through apt. Use the following commands at a terminal to install Lame, Mplayer and KCron.
sudo apt-get install lame mplayer kcron
Type in your password and confirm the installs.
Use the following commands to create the folders you'll need.
sudo mkdir /scripts
mkdir /home/username/Music/NameOfShow
And this command to take ownership of the directory you just created:
sudo chown YourUserName /scripts
If you already run Ubuntu, the only things you need are freely available through apt. Use the following commands at a terminal to install Lame, Mplayer and KCron.
sudo apt-get install lame mplayer kcron
Type in your password and confirm the installs.
Use the following commands to create the folders you'll need.
sudo mkdir /scripts
mkdir /home/username/Music/NameOfShow
And this command to take ownership of the directory you just created:
sudo chown YourUserName /scripts
STEP 2: Create Streamrecord Script
The steps for the script we're using are as follows:
1. Open mplayer, point to audio stream on Internet
2. Record stream to wav file in /tmp directory
3. Kill mplayer process when show ends
4. Convert /tmp/mystream.wav to mp3 file, name it with today's date and move it to more 'user-friendly' directory under user folder.
5. Delete wav file in /tmp directory.
To achieve this, you'll first need to find out the URL of the stream you're accessing. For an example, I'll use the CSPAN radio stream, and record it between the hours of noon and 2pm Monday thru Friday. Here's the text of the script:
#!/bin/sh
NOW=$(date +"%b-%d-%y")
mplayer "mms://rx-wes-sea20.rbn.com/farm/pull/tx-rbn-sea34:1259/wmtencoder/cspan/cspan/wmlive/cspan4db.asf" -ao pcm:file=/tmp/mystream.wav -vc dummy -vo null ;
lame -m s /tmp/mystream.wav -o "/home/shawn/Music/CSPAN/My Show - $NOW.mp3" ;
rm /tmp/mystream.wav ;
Copy this text to a blank file using Gedit or Vi, and save it as "streamrecord". You'll need to edit the areas of the script in italics, as these wont apply to you. The text after mplayer is the URL to the stream you want to record, this will need to be replaced with your stream's URL, which can be found easily by going to the stream in Firefox, letting the mplayer plugin start, then right-click and choose "Copy URL".
1. Open mplayer, point to audio stream on Internet
2. Record stream to wav file in /tmp directory
3. Kill mplayer process when show ends
4. Convert /tmp/mystream.wav to mp3 file, name it with today's date and move it to more 'user-friendly' directory under user folder.
5. Delete wav file in /tmp directory.
To achieve this, you'll first need to find out the URL of the stream you're accessing. For an example, I'll use the CSPAN radio stream, and record it between the hours of noon and 2pm Monday thru Friday. Here's the text of the script:
#!/bin/sh
NOW=$(date +"%b-%d-%y")
mplayer "mms://rx-wes-sea20.rbn.com/farm/pull/tx-rbn-sea34:1259/wmtencoder/cspan/cspan/wmlive/cspan4db.asf" -ao pcm:file=/tmp/mystream.wav -vc dummy -vo null ;
lame -m s /tmp/mystream.wav -o "/home/shawn/Music/CSPAN/My Show - $NOW.mp3" ;
rm /tmp/mystream.wav ;
Copy this text to a blank file using Gedit or Vi, and save it as "streamrecord". You'll need to edit the areas of the script in italics, as these wont apply to you. The text after mplayer is the URL to the stream you want to record, this will need to be replaced with your stream's URL, which can be found easily by going to the stream in Firefox, letting the mplayer plugin start, then right-click and choose "Copy URL".
STEP 3: Save Script, Make Pkill Script and Make Scripts Executable
Next, we'll save the script to the /scripts directory. Once saved, go to a terminal session and type the following:
cd /scripts
chmod 700 streamrecord (This makes the script you just created into an executable file.)
Create one more file in the /scripts directory. This will be called pkill, and will be your hitman. That is, it will kill the mplayer process to allow the first script to continue with renaming and encoding the captured stream. The full text of the pkill script is exactly as follows:
pkill mplayer
Now, this breaks scripting etiquette, by not having #!/bin/sh at the top, but it works for me. Once you've saved the file pkill in the /scripts directory, use the chmod command again to make this one executable. You need to be in a terminal session, in the /scripts directory first, then type:
chmod 700 pkill
A quick "ls" will show you the files you just created, now in a lovely green instead of the standard black.
cd /scripts
chmod 700 streamrecord (This makes the script you just created into an executable file.)
Create one more file in the /scripts directory. This will be called pkill, and will be your hitman. That is, it will kill the mplayer process to allow the first script to continue with renaming and encoding the captured stream. The full text of the pkill script is exactly as follows:
pkill mplayer
Now, this breaks scripting etiquette, by not having #!/bin/sh at the top, but it works for me. Once you've saved the file pkill in the /scripts directory, use the chmod command again to make this one executable. You need to be in a terminal session, in the /scripts directory first, then type:
chmod 700 pkill
A quick "ls" will show you the files you just created, now in a lovely green instead of the standard black.
STEP 4: Use KCron to Schedule Your Jobs
Cron, the wonderful but extremely confusing little text file and associated service deserves a whole series of instructubles unto itself. To make things simpler, we're going to use KCron (which we installed earlier) instead. If the install went as planned, you should see KCron under Applications --> System Tools. Alternately, the program can be launched from a terminal by typing "kcron". Use Ctrl+N to create a new job, and configure the job as shown in the picture. In the image you can see I configured the program /scripts/streamrecord to run all months, mon-fri at 12pm with 0 minutes.
The second script you made, called 'pkill' is what actually ends mplayer and allows the first script to continue. You'll need to set up another cron job to run that script as well. For my example, I end up with two jobs in KCron. (see 2nd image)
The second script you made, called 'pkill' is what actually ends mplayer and allows the first script to continue. You'll need to set up another cron job to run that script as well. For my example, I end up with two jobs in KCron. (see 2nd image)
STEP 5: You're in Business!
That's all there is to it, to test your handiwork you can right click the streamrecord job in Kcron, choose 'run now' and check for mystream.wav in your /tmp directory. If it's there (and growing fast), run the pkill job and you should soon see the mystream.wav disappear from your /tmp directory, and a new .mp3 file in the directory you specified when you altered the script. If you're recording a long show, keep in mind that it will take a decent amount of time to encode your .wav file. On one 3 hour show I record, it takes approximately 10 minutes to encode to mp3. If you have any problems getting this to work, feel free to drop me a line.
Stuff
P.S. I know my methods are a bit crude, as there are probably best-practices that I'm not following in some of my steps, so please don't school me on Linux 101, this is just a quick and dirty way to never miss your favorite audio stream.
Stuff
P.S. I know my methods are a bit crude, as there are probably best-practices that I'm not following in some of my steps, so please don't school me on Linux 101, this is just a quick and dirty way to never miss your favorite audio stream.
22 Comments
CareyS3 5 years ago
why not use the timeout command to start mplayer instead of pkill later? timeout will start the mplayer and end it after the duration specified.
Calis 8 years ago
Okay, so I was looking high and low trying to find some elaborate solution. Cold it really be this simple? Well, apparently. I stumbled across this page after 2 days of looking around, downloading, configuring and playing with various programs. I looked at this page and had it going in 10 minutes...well, minus KCron, I used the scheduler I already had. Thanks for making me backup a few steps to KISS. :)
MSpirit 15 years ago
mplayer "mms://rx-wes-sea20.rbn.com/farm/pull/tx-rbn-sea34:1259/wmtencoder/cspan/cspan/wmlive/cspan4db.asf" -ao pcm:file=/tmp/mystream.wav -vc dummy -vo null -endpos "01:00:00";
This would record for 1 hour and stop. A bit cleaner than using kill, plus one less line in crontab.
julietmoss2011 12 years ago
stuffman 15 years ago
NimoTh 15 years ago
matthewbeckler 14 years ago
mplayer $STREAM -endpos $DURATION -vo null -ao pcm:waveheader:file=$FILENAME.wav
Where $DURATIONĀ is of the form "1:30:00"
More details:
http://www.mbeckler.org/scripts.php#savestream
ffsman 13 years ago
For background, I'm thinking about setting up a an Ubuntu box just so I can do this. I would set it up to record NPR and another show I like, then save the OGG file to my Ubuntu One account so I can access it from abroad really easily (I'm going on a big trip).
veryniceworld 15 years ago
Now, I have changed to use the tool mimms. It works great for me. Since mimms has the option to specify the length of recording in mintue. No need to have 2 cron jobs for each recording anymore.
- Mac
bdbull 15 years ago
stuffman 15 years ago
minchina 16 years ago
thanks
frenchie 16 years ago
stuffman 16 years ago
What stream are you accessing? I have no problems getting to a local radio station, that stream is encoded as an asf. How exactly are you invoking this stream from the command line? I tried this:
cd /scripts
sh streamrecord
and it worked fine, then tried it in kcron using 'run now' command, and again had no problems. Please try again to manually launch the script and see if you can get it to fail. I'm more interested in launching the actual script, not just
mplayer url.
Let me know if this sheds any light on your problem. Thanks,
Shawn
frenchie 16 years ago
03 00 * * 2-6 script URL filename
I edited it to redirect output/error messages like so:
03 00 * * 2-6 script URL filename > $HOME/logfile 2>&1
Now it works just fine! By the way, there's some useful info here that I've used together with your how-to in order to record directly to ogg/mp3 without creating a temporary wav file: http://www.tomtaylor.co.uk/blog/2007/04/17/play-it-again/
Thanks again, it's so cool to be able to record streams automatically.
John.
frenchie 16 years ago
Looking forward to listening to the radio show tomorrow that will be recorded while I snooze tonight!
all the best,
john.
stuffman 16 years ago
stuffman 16 years ago
TESTING EMAIL VALIDATION 16 years ago
http://www.xaudiotools.com/
stuffman 16 years ago