This project aims to use the beagleboard for a DIY digital guitar effects system.
The Beagleboard is a hobbiest and rapid prototyping board built around a family of ARM CPUs from Texas Instruments known as OMAP and DaVinci. A number of smart-phone makers have adopted this family of chips, eg. the Nokia N900 and Motorola Droid and the OpenPandora console. The family of chips is optimised for media processing and contain a TI TMS320DM64x DSP as a co-core (member of the TMS320C64x family). The ARM core can boot, program and control the DSP via SoC bridge functionality.
See http://beagleboard.org/ for info.
As of 2010-11-16
Audio envelope trigger working for Wah-like effects. The outcome is not as good as hoped and I'm now looking to build a physical expression pedal. I'm hoping to make use of the USB Doodad project as an interface to an analog expression pedal (eg. simple pot).
As of 2010-08-17
Working on audio envelope detection as a building block for attack-based effects triggers, like a pedal-less wah. Added a wiring script to simplify jack audio pipeline configuration.
As of 2010-08-10
Wah, grunge and reverb are working on the board.
As of 2010-08-03
Low-pass, band-pass and high-pass digital filters are implemented. The band-pass will serve as the basis of wah and flange effects. Had my guitar at the hackerspace and some speakers for output. Caused much annoyance with freaky grunge-wah fusion jazz with a bit of Pink Floyd thrown in for good measure. Strictly for testing of course. :)
As of 2010-07-15
Got jackd working in the beagle finally. The magic is in the sampling frame sizes and numbers of DMA blocks. Jackd was suffering constant ALSA underruns and created an underrun reporting each underrun. The magic parameters have been fed back into the Angstrom codebase via this patch http://cgit.openembedded.org/cgit.cgi/openembedded/commit/?id=4adb2744c8cdc1064b657cdffc4c0f91ff7bf442
The beagleboard runs an embedded GNU/Linux distribution called Angstrom (http://www.angstrom-distribution.org/). Angstrom is based around debian infrastructure so if you are familiar with any debian based distros such as Ubuntu you will be at home with the beagle. It does run X if you have a screen.
The beagleboard has a TWL4030 audio codec chip connected to the OMAP CPU via I2C. The ALSA SoC drivers have been mature since mid 2009 and have provided all essential features. Essential features for this project are the ability to capture audio via the LINE-IN analog 3.5mm jack and play audio out the LINE-OUT 3.5mm jack.
Jack Audio Connection Kit (JACK) is used as the audio framework for the system. JACK is started using the ALSA driver in playback + capture duplex mode. JACK was acquired via the Angstrom distro package repository and installing is quite simple using the dpkg-like tools.
JACK is a graph-based audio pipeline system. The main JACK daemon (jackd) unblocks as audio input arrives from LINE-IN via buffer-full interrupts. jackd then runs all the audio processes in the graph in the correct order to ensure input-output relationships are correct. Any resulting audio output is then pushed into the audio out buffer for the LINE-OUT.
The JACK graph consists of a number of independent user-space process which utilise the jack client library. Each process has a jack processing thread blocked on a pipe connected to jackd. Jackd instructs each of jack threads in the correct order to process a buffer of input audio and create a buffer of output audio. UNIX shared memory is used for efficiency and jackd synchronises access. So the audio effects are generated by creating small user space programs linked against libjack. Several such processes are started and the jack_connect utility is used to construct the order of processing of the effects components. The components can be strung together in any order, omitting any as required.
Components created so far include:
The Angstrom distro build system (OpenEmbedded or OE) spits out both a distro and a cross-compilation toolchain containing all tools, libraries and headers for the embedded target. OpenEmbedded is designed to bootstrap from an internet connected x86 linux PC to create the full toolchain, then uses that toolchain to create the kernel, libraries, headers and programs that are then used to populate the filesystem.
Building user-space apps for the beagle is dead simple. Just build your C code with the OE toolchain. Building JACK clients is no different. The jack headers and libs are constructed and available for building on using the toolchain.
The beagle runs a quite complete linux distro. That means you can run gdb, gdbserver, strace, tcpdump, etc. Debugging is therefore quite simple for user-space apps.
For kernel development or bare-metal programs, there is a JTAG connector.
This project uses a Beagleboard Rev C4 with a CPU speed of 720MHz. These boards became available in late 2009. The board was acquired for AUD$210 from a US distributor (digikey and mouser stock them). The Beagleboard features a USB OTG connector for connecting to a host PC and the board can be powered entirely through that USB link from the host PC.
As of August 2010 the Beagleboard xM became available. This board family replaces the TI OMAP CPU with its successor the TI DaVinci.