This is a journey into sound...

So I decided to try and get some sound out of my Vocore tiny linux box. It doesn’t come with any audio support, so I decided to add a USB sound card. I bought one of these, which I knew worked on the Raspberry Pi, so I knew had Linux support. They’re also pretty small:

I simply followed these instructions describing how to add USB Audio support to OpenWrt. At first, I chose to install sox as the player (I originally intended to use Madplay, but I don’t think it is supported on current versions of OpenWrt anymore).

I did not have much success playing mp3 files straight away, I kept getting sox WARN alsa: under-run messages when I tried to use the following command:

sox myfile.mp3 -d

Although sound was coming out … in chunks, so it was a partial success. But when I added a “-G” parameter to use temporary files (supposed to guard against clipping) like this:

sox myfile.mp3 -d -G

…then it worked fine for some lower quality mp3 files, but with a considerable delay before playing anything out the speaker. If I tried to play some better quality mp3 files then it was still stuttery. So then I started to experiment with reducing the sound quality, which sox can do easily. So I tried this:

sox myfile.mp3 -r 8000 -e unsigned -b 8 -c 1 test.raw

…which results in a raw file that can be played with the aplay command that comes with the ALSA soundcard drivers (specifically, the command above gives mono unsigned 8 bit with a rate of 8000 Hz). Whilst this results in a poor quality file, I found that the Vocore would happily play these raw files. In some ways it was kinda cool to hear my original mp3 file playing with a hiss in the background. But then I decided to see what happens if I create a file in “CD” quality, so I tried this:

sox myfile.mp3 -r 44100 -e signed -b 16 -c 2 test.raw trim 0 00:30

Note, that to save space on the Vocore I used the trim parameter to just convert the first 30 seconds. Playing that “CD” quality file on the Vocore also worked perfectly, with this command:

aplay test.raw -f cd

Passing the parameter -f cd means 16 bit little endian, 44100 Hz, stereo and is the same as passing -f S16_LE -c2 -r44100. Here’s a screenshot of a CD quality raw file playing on the Vocore with the aplay command.

So… what I’m doing now is using sox on another Linux box to convert the mp3 files and then just using aplay on the Vocore to play them. It should mean that sox is not actually required on my Vocore. It also means that playback is immediate and the quality is good. I will need to find a means to store the files, because they’re much bigger than mp3, but that’s a problem for another day… I’ll probably see if I can mount a USB stick or something.

Retro CDs

I was looking for some writable CDs, for making up music CDs, since I'd run out. By accident I found these:

Retro style CD awesome are they? Now I know they exist, I might buy some more from Amazon. Sometimes you find something new when you support a small independant retailer. I bought mine from a small store in the village of Linton, near Cambridge. If you ever find youself near Linton, pop into Tournants (in the High Street) and have a look round their interesting collection of computer bits and electrical supplies. It's good to have shops like this.


Making a bootable CD-ROM from scratch

  Bootable ISO

I've been experimenting with the mkisofs tool to make bootable ISO images for burning onto CD. This tool can be downloaded from the CDRTOOLS site (make sure you use the latest *stable* release).

The command line I'm using is:
mkisofs.exe -J -N -l -v -relaxed-filenames -b Floppy.img -volid "BootCD" -o "BootCD.iso" CDfiles

...where "CDfiles" is the name of a folder containing the floppy disk image (named "Floppy.img") as well as anything else you want to put onto the CD-ROM.  I'm doing this from a command prompt in Windows 7 and it seems to work very well.

To make the CD bootable I've been using my bootable floppy image.  This causes the CD-ROM to boot as if it were a floppy disk. You'll see the files inside the disk image appear as if it were a real floppy drive when the CD boots up. I've included the the generic CD-ROM drivers, and you should see the actual CD-ROM appear as drive X:.

You'll also get a 10Mb RAM drive, giving you some *writable* disk space to play with.  This version simply boots to a basic DR-DOS system, but I'm blogging it since it may come in handy for other purposes...

You can burn the resulting ISO image to a CD, or simply try it out by attaching the ISO in Virtual PC or VirtualBox and booting from it.  Here is a screenshot of the ISO booted in Virtual PC:

The ISO booted in Virtual PC