StreamBox Alix

Last changed: 2009/02/07 20:04 


StreamBox Alix

Alejo Duque

An article on electret microphones


My collegue Lorenz Schori from S.O.U.P just showed me his box named alix, with it it was possible to make an ogg stream to an icecast server, for the first test we used darkice as in apt-get install darice :P, the price of the unit we used is around 150euros complete with 2 wireless cards, 1 network card, 2 usb, 1serial port and runs debian, here below is a picture of a prototype we fined tune for a workshop we did in Basel on the 10th of may. We used it for mapping via a G.P.S unit

New Model

The new model includes a video card and a sound card, we got tree of this, all the documentation will happen in a new wiki entry so to keep stuff a bit clean and easy to follow:

StreamBox Alix v.0.1

Old Model Configuration

CPU: 500 MHz AMD Geode LX800


Storage: CompactFlash socket

Power: DC jack or passive POE, min. 7V to max. 20V

Three LEDs

Expansion: 2 miniPCI slots, LPC bus

Connectivity: 1 Ethernet channel (Via VT6105M 10/100)

I/O: DB9 serial port, dual USB, VGA, audio headphone out / microphone in

RTC battery

Board size: 100 x 160 mm

Firmware: Award BIOS


137CHF withouth case, compatflash and wireless card. This is the top model that included even a video card.

Notes on the configuration of the redalix

(the model in the picture above that now belongs to locus sonus)

comandos basicos para la red_alix:

before logging in you need to configure the host to:

then, on a termial/console simply issue:

~ ssh root@

when logged in i can try: ssh -C -X user@host

i also made a copy of the /dev/hda:

dd if=/dev/hda | gzip > /mnt/usbkey/redalixbkp.gz

modprobe ath_pci

wlanconfig ath0 create wlandev wifi0 wlanmode sta

iwconfig wlan0 essid NAMEOFAP

dhclient wlan0

ping the vatican!

Reference to what it loaded as modules

(including Hercules USB 5.1 connected)

# lsmod
Module                  Size  Used by
wlan_scan_sta          12672  1
ath_rate_sample        13312  1
ath_pci               169900  0
wlan                  208880  4 wlan_scan_sta,ath_rate_sample,ath_pci
ath_hal               232544  3 ath_rate_sample,ath_pci
ipv6                  229220  12
ath5k                  89476  0
mac80211              112780  1 ath5k
cfg80211               13320  1 mac80211
snd_usb_audio          76000  0
geode_rng               2304  0
snd_usb_lib            15488  1 snd_usb_audio
snd_seq_dummy           3716  0
evdev                  10880  0
snd_seq_oss            29056  0
snd_seq_midi            8096  0
snd_seq_midi_event      7040  2 snd_seq_oss,snd_seq_midi
snd_cs5535audio        14012  0
snd_seq                45264  6
snd_ac97_codec         92708  1 snd_cs5535audio
ac97_bus                2176  1 snd_ac97_codec
snd_pcm_oss            37792  0
snd_mixer_oss          15104  1 snd_pcm_oss
snd_rawmidi            22560  2 snd_usb_lib,snd_seq_midi
snd_pcm                69640  4
snd_seq_device          7820  5
snd_hwdep               8708  1 snd_usb_audio
snd_timer              20740  2 snd_seq,snd_pcm
usbhid                 27904  0
hid                    32896  1 usbhid
pcspkr                  2944  0
cs5535_gpio             5080  0
geode_aes               5892  0
blkcipher               6532  1 geode_aes
snd                    47332  12
soundcore               7136  1 snd
snd_page_alloc          9992  2 snd_cs5535audio,snd_pcm
ide_disk               15360  2
ata_generic             7428  0
libata                144880  1 ata_generic
scsi_mod              141452  1 libata
generic                 4356  0 [permanent]
ohci_hcd               21764  0
ehci_hcd               32268  0
amd74xx                 8720  0 [permanent]
usbcore               131436  6
ide_core              106840  3 ide_disk,generic,amd74xx
via_rhine              22792  0
mii                     5248  1 via_rhine

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0d:b9:12:67:a4
         inet addr:  Bcast:  Mask:
         inet6 addr: fe80::20d:b9ff:fe12:67a4/64 Scope:Link
         RX packets:2188 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1306 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:193198 (188.6 KiB)  TX bytes:210753 (205.8 KiB)
         Interrupt:10 Base address:0x1000

eth1      Link encap:Ethernet  HWaddr 00:0d:b9:12:67:a5
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
         Interrupt:12 Base address:0x1400

lo        Link encap:Local Loopback
         inet addr:  Mask:
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:119 errors:0 dropped:0 overruns:0 frame:0
         TX packets:119 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:16774 (16.3 KiB)  TX bytes:16774 (16.3 KiB)

wifi0     Link encap:UNSPEC  HWaddr
         RX packets:43219 errors:0 dropped:0 overruns:0 frame:693
         TX packets:4238 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:195
         RX bytes:14288713 (13.6 MiB)  TX bytes:391013 (381.8 KiB)

wlan0     Link encap:Ethernet  HWaddr 00:0b:6b:2c:3a:c3
         inet addr:  Bcast:  Mask:
         inet6 addr: fe80::20b:6bff:fe2c:3ac3/64 Scope:Link
         RX packets:11922 errors:0 dropped:2 overruns:0 frame:0
         TX packets:4060 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:17050164 (16.2 MiB)  TX bytes:285327 (278.6 KiB)


ram memory state is as follows (in megas):

# free -m -l
                   total       used       free     shared    buffers     cached
Mem:           250         82        168          0          1         70


# df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 126M     0  126M   0% /lib/init/rw
udev                   10M   28K   10M   1% /dev
tmpfs                 126M  4.0K  126M   1% /dev/shm
rootfs                951M  825M   79M  92% /

when the Hercules is connected this is what is automatcally loaded:

input: USB Audio as /class/input/input1

input,hidraw0: USB HID v1.00 Device USB Audio on usb-0000:00:0f.4-1

usbcore: registered new interface driver usbhid

drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver

usbcore: registered new interface driver snd-usb-audio


with this command one should start pd:

pd -verbose -open -audiodev 2 testtone-on.pd

keep in mind that sometimes the audiocard doesn't get loaded properly

and that one has to un/plug re/plug to get it rolling.

i have done a script to have it all loaded at boot time but i need th box to have the soundcard and the mic connected and right now (29 july, the school is closed to get the rest of the components)


-deamon or startup script for ssh tunnel-

'—remote login and ssh X exported session: ssh -C -X user@host—'

-DD copy of the image installed right now : dd if=/dev/hda | gzip > /mnt/usbkey/redalixbkp.gz-

-test local (redalix) icecast -c /etc/icecast2/icecast.xml

-tutorial for the user on how to connect and set up a wireless link on encrypted networks


Mobile Stream Box Transmitter


  1. reliable
  2. something that will encode ogg and stream it to the web
  3. ability to be wireless (perhaps a separate wireless and wired solution)
  4. low power requirements (possibly solar, alternatively powered)
  5. small form factor
  6. weatherproof (? water resistant)
  7. integrated pre-amp, or powered mic
  8. uses one, consistent, software distribution

Stream Box Receiver


  1. reliable
  2. Wireless
  3. low powered
  4. will play back an ogg audio stream
  5. small form factor
  6. waterproof
  7. uses one, consistent, software distribution
  8. sound amplification? internal or external, powered or non powered speakers?



  1. 2 way audio transmission
  2. send video
  3. send sensor data (what sensors are wanted? 2 axis accelerometers? joysticks? momentary switches? all? less?)
  4. what is the distance? 100m would be ideal
  5. low power
  6. lightweight/small form factor
  7. easily reproducible
  8. unobtrusive, if not inconspicuous, at least not threatening
  9. possibilities of reusing wiimote's sensors, etc.


The banana question

  1. are any of the above things relevant to the workshop?

Wide Area Spatialization

  1. can it be networked? where will it go?

Locative technologies

  1. RFID
  2. GPS
  3. Sonar, ir sensing
  4. QProx

Asus Stream Box Receiver

     _                           ____               
    | |    ___   ___ _   _ ___  / ___|  ___  _ __  _   _ ___
    | |   / _ \ / __| | | / __| \___ \ / _ \| '_ \| | | / __|
    | |__| (_) | (__| |_| \__ \  ___) | (_) | | | | |_| \__ \
    |_____\___/ \___|\__,_|___/ |____/ \___/|_| |_|\__,_|___/


  1. Portable
  2. Around 150euros
  3. Audio Encoding

Asus Router wl500gp


  1. 2usb
  2. 125€ with sound card
  3. Cheap and easy to ship


  1. No Ogg audio encoding

You can see the thread with the developers of the OGG/Vorbis project here:

To check asap

  1. -mp3 encoding support- Theres no liblame in the ports of openwrt, but there is this:

rawrec and rawplay are GPL'd utilities designed to provide the user with a simple way of recording or playing raw audio data from or to their sound card under intel Linux (I haven't tested other architectures, but its written to be portable, I think). Spiffy features include:

It could be a way to send captured data to the stream server that will take care and re-encode into ogg vorbis. This might be the only chance right now to get audio out from the Asus Box. Need to install and see the limitations of the port, the above description is for the general package and the MIPS architecture might have limited the available features like in the Vorbis case.

Install rawrec on the Asus 1 without removing software or changing its configuration

Back-up the firmware:

root@OpenWrt:~# ls /dev/mtdblock/
0  1  2  3  4
root@OpenWrt:~# mount -o remount,ro /dev/mtdblock/4 /jffs
root@OpenWrt:~# dd if=/dev/mtdblock/1 > /tmp/wrt-linux.trx
15744+0 records in
15744+0 records out
root@OpenWrt:~# mount -o remount,rw /dev/mtdblock/4 /jffs
root@OpenWrt:~# dd if=/dev/mtdblock/3 > /tmp/wrt-nvram.bin
128+0 records in
128+0 records out
root@OpenWrt:~# ls /tmp/
dhcp.leases       log       spool             wrt-linux.trx
lock              resolv.conf       run               state             wrt-nvram.bin

upload to ftp

sftp> put wrt-linux.trx
Uploading wrt-linux.trx to /home/locusonus/public_html/dropbox/alejo/wrt-linux.trx
wrt-linux.trx                                                100% 7872KB 164.0KB/s   00:48    
sftp> put wrt-nvram.bin
Uploading wrt-nvram.bin to /home/locusonus/public_html/dropbox/alejo/wrt-nvram.bin
wrt-nvram.bin                                                100%   64KB  64.0KB/s   00:01 

Restoring the image (read carefully)

/!\ WARNING: Restore the NVRAM partition only on the same Wrt router where you did the backup! Restoring the NVRAM partition can brick your router.

I'll assume you need a full restore, i. e. you've totally botched your box, and you have either restored to factory firmware, or bought a new box :)

1. install standard openwrt firmware on your box, if you haven't already. Set up a password so you can use scp:


2. Transfer the files

scp wrt-linux.trx wrt-nvram.bin root@

3. On the wrt box, don't forget to put jffs2 in ro mode if your're writing the whole kernel+squashfs+jffs2 image.

dd if=/tmp/wrt-nvram.bin of=/dev/mtdblock/3
mount -o remount,ro /dev/mtdblock/4 /jffs
mtd -r write /tmp/wrt-linux.trx linux

The second command will take a minute or so to flash the rest and then reboot.

Install rawrec

root@OpenWrt:~# ipkg install rawrec_0.9.98-1_mipsel.ipk 
Installing rawrec (0.9.98-1) to root...
Configuring rawrec
root@OpenWrt:~# raw
rawplay  rawrec
root@OpenWrt:~# rawrec 
rawrec: could not open /dev/dsp for reading: No such file or directory
root@OpenWrt:~# rawrec -h
rawrec: stat of audio dsp device /dev/dsp failed: No such file or directory
root@OpenWrt:~# rawrec --help
Usage: rawrec [option]... [file]
  -B SIZE,                       size of the main ring buffer
  -c CHANNELS,                   number of channels to record
  --channels=CHANNELS            ( 1 ==> mono, 2 ==> stereo )
  -d DEVICE,                     dsp device name (needed only if
  --audio-device=DEVICE          not /dev/dsp)
  -e SECS,                       silent seconds to record at end
  --end-record-time=SECS         (rawrec only)
  -E SMPS,                       silent samples to record at end
  --end-record-samples=SAMPS     (rawrec only)
  -f FMT,                        sample format, ex. u8 (unsigned 8 bit),
  --sample-format=FMT            s16_le (signed 16 bit little endian)
  -g FRAG_SZ,                    kernel audio buffer fragment size (must
  --fragment-size=FRAG_SZ        be a power of two)
  -h,                            hold /dev/dsp (or argument to -d
  --hold-audio-device            even if dummy dsp is in use
  -j SECS,                       time to skip at start (rawplay
  --start-jump-time=SECS         only)
  -J SAMPS,                      samples to skip at start (rawplay
  --start-jump-samples=SAMPS     only)
  -p SECS,                       seconds to pause before beginning
  --start-pause-time=SECS        execution
  -P SAMPS,                      samples to pause before beginning
  --start_pause_samples=SAMPS    execution
  -r SECS,                       silent seconds to record at start
  --start-record-time=SECS       (rawrec only)
  -R SAMPS,                      silent samples to record at start
  --start-record-samples=SAMPS   (rawrec only)
  -s SPEED,                      sampling rate ( = 2 * maximum
  --sampling-rate=SPEED          representable frequency)
  -t SECS,                       time to record or play, excluding
  --time-limit=SECS              silence or skipped sections
  -T SAMPS,                      samples to record or play, including
  --sample-limit=SAMPS           silence or skipped sections
  -v,                            verbose operation
  -z SECS,                       seconds to pause at end of execution
  -Z SAMPS,                      samples to pause at end of execution
  -?,                            display this help message

the developer of rawrec suggests this:

'arecord' program that comes I think with the ALSA utils
might be a better bet.  I don't work on rawrec anymore because this
program (together with dd if you need to start somewhere other than
the start of the stream) now behaves acceptably (good terminal job
control handling, etc).