A few months ago Emily, the woman I have been dating for a while, bought an Oberheim DX drum machine. She actually got it from another dork bot member here, Hans. Anyways, this drum machine stores its sounds on eeproms. It is made so that you can replace these eeproms to get different sounds, and some people have installed ZIF sockets to make them really easily replaceable. Emily talked about wanting to be able to put her own sounds into the drum machine.. and I thought that it wouldn't be so hard.
I imagined a few things: expanding the number of prerecorded sounds to choose from, playing a sequence of sounds in a loop, playing a random sound from a set of sounds [to add a 'humanness' to the machine], doing synthesis, gating an input sound, and finally, and more difficult with a little micro-controller, recording a sound live and playing it back, triggered by the drum machine.
She went away for a week+ during the holidays and I borrowed her drum machine, saying I wanted to work on some tracks with it. I had been scheming to make a module that would allow her to expand the number of sounds on it, as well as do some basic synthesis. The initial module was going to have a 1 megabyte i2c memory to store sounds, and an Atmega16 to simulate an eeprom... After doing some initial development I realized that the i2c memory wouldn't be fast enough as the drum machine wants samples at about 20K per second [the sampling rate is somewhat adjustable with a pot on the back of the drum machine]. So for the first module I ended up just doing some synthesis [right now I just have noise, a square wave, and a square wave which decays in frequency]. I also stored one pre-recorded sound in program memory, the tr-909 clap. It is displayed at the top of this page. The PCB, made with the help of feurig, is displayed here:
I still have to build a little interface for controlling the synthesis parameters, selecting which sound to play, but it is already quite nice.
I realized that my tr-707 drum machine must store sounds in a very similar way [after taking it apart], so I might end up including this sort of stuff in my own drum machine.
Soon I plan to experiment with some AVR chips which have expandable ram so I can have access to more sounds more quickly. I also got some SPI eeprom which should allow for quicker access than the i2c memory, so I could probably stream sounds directly from the eeprom.
In the mean time David Frech gave me a bunch of 256K byte flash memories. I made first solo PCB, shown below, which adapts the original eeprom pins to this larger memory, with some control to select the higher bits, which lets the hardware read from the eeprom and the user select which memory offset [sound] to use for the upper bits. These flash memories can store 32 sounds [the DX sounds are 8K, 8 bits (ulaw), at 20khz]. Images of the top and bottom of the PCB [2 of them actually], are below.