Intro: SquawkBox - an Algorithmic Beat Box Using a Toy Voice Recorder
This instructable is all about making a beatbox - but one that does things a little differently. It is also about reusing existing toy technology to make it all happen. In order to develop a controllable sound engine, I decide to "circuit bend" a kid's toy. The toy that I'm using is the Yada Yada Yada voice recorder, which includes recording/playback control, a built-in microphone, and the ability to "warp" (pitch-shift) the recorded sound.
All of these capabilities sounded interesting for a beatbox-like device, and they are also very cheap ($6 new at the local Target store).
The overall idea is to use an Arduino Nano as the beatbox brains, and to use modified Yada Yada toys as the individual voice modules. This will require a fair amount of rework, since I will want to maintain most of the functionality of the recorder while completely reworking the packaging.
In a recent project, I found an interesting way to interact with beatbox-like machines. Rather than using a typical "pad" interface, I used a two-dimensional grid of "preset patterns" for voice rhythm selection. The user can select an approriate phrase and shift them to generatively create a beat. The result is a lot more dynamic than simply playing presets, and allows the player to fine tune the performance without the embarrassing stumbles that come with realtime programming.
I also want to try an idea that I've had for a long time, but was never able to implement. I want to have an "auto-record" feature that will be able to randomly record new audio into different voices, creating ghost rhythms and melodies as part of its operation. Obviously, this would get in the way of creating a standard beat, so this mode should be well-labeled and easily defeated.
Finally, in order to make it work with other equipment that I have, I want to make sure that it can be externally clocked. Using one of the interrupt-capable pins of the Arduino should make this easy, and external clocking will allow me to actually use it to create music.
Aggressive plan, but I'm up for it!
Step 1: SquawkBox - Yada Yada Disassembly
Disassembly and preparation of the Yada Yada Yada box is the most delicate and important part of this entire instructable, so I'm going to spend more time on this than any other activity. Please use extreme caution with this device, since it is small, fragile and not made for end-user manipulation.
The first thing you need to do is to take the Yada Yada Yada recorder apart. It's not very tricky, but I busted up the first one I tried, so you need to be careful. First, you take it out of its over-done retail packaging. This gives you a simple little device.
Next, you have to remove the rubber/plastic bumper that surrounds the device. The easiest way to to this is to cut one side of it, then peel it off around the body. Watch out when you are removing the bumper at the top of the device; it is holding an LED that could easily tear off and mess up your circuit board.
Finally, remove the five screws on the back of the device. Don't remove the screw holding in the battery compartment - we'll leave the batteries intact for now.
Once the five screws are removed, you should be able to open the device and remove the pointless plastic components. Be careful when moving the battery compartment so that you don't rip it off the board, and use a small jeweler's screwdriver to pry the speaker and microphone from the front panel (where it may be glued to the frame). Once this is complete, you should have a minimalist voice recording device.
Step 2: Getting It Ready for Experiments
In order to work with this circuit, we need to replace all of the useful internal wiring with wires that we can use. To start with, I've replaced the "Lock" switch with a simple wire jumper - although you could just switch it to "unlocked" and leave it there. If you choose to replace the switch, you have to desolder the three connections of the switch - a hit on each joint with the vacuum pump cleaned things up nicely enough that the switch fell out. I just put in a little wire loop and resoldered onto the two "unlocked" pads.
Step 3: Wiring Up the Power Connection
We need to have our own power connection, so I next desoldered the power connections an attached properly colored wire strands in their place. Luckily, the power connections are labeled "VCC" (for positive) and "GND" (for ground).
Step 4: Removing the Pot
The most difficult part of rewiring this board is dealing with the Warp pot. You have to start by hitting all five of the soldered surfaces with your iron, then vacuuming off whatever you can. You follow that by snipping all of the connections as best you can. The two outside lugs are there for physical support only, so you can wrench away at those. Once they are clear, further snip at the middle lugs until the pot falls free.
Once you've removed the metal pieces and cleaned up the pads, solder on wires to the three middle posts. The center will be your signal, while the one to the right will be the voltage connected to the pot.
Step 5: Wire Up Other Connections
The other connections at the top of the board are pretty well labeled. You can desolder and replace the mic and speaker with standard wire. Remove the LED, but don't rewire it - we won't be using it in our device. Finally, snip the leads off the two switches (play and record) and replace them with standard wiring - they are not polarized, so you can use any color of wiring.
When it is done, you have a standalone device with all the wires necessary for adding to a larger system. You will need to create four of these "voice boards" for a complete SquawkBox system.
Step 6: Hooking Up the Arduino
I decided to use an Arduino Nano - a small-format Arduino that is easy to fit onto a circuit board. I paired this with a fairly large protoboard to create my "main" circuit board.
First, I had to decide on the connection between SquawkBox controls and Arduino I/O pins. I ended up with the following map:
A0: unused (useful as a random number seed)
A1: Tempo Setting
A2: Record Select
A3: Pattern Selection, channel 1
A4: Pattern Selection, channel 2
A5: Pattern Selection, channel 3
A6: Pattern Selection, channel 4
D2: External Clock input
D3: "Rock-it" Mode input
D4: "Ghost" Mode input
D5: Voice record output, channel 1
D6: Voice record output, channel 2
D7: Voice record output, channel 3
D8: Voice record output, channel 4
D9: Voice playback output, channel 1
D10: Voice playback output, channel 2
D11: Voice playback output, channel 3
D12: Voice playback output, channel 4
D13: Tempo LED display output
All of these are pretty straight-forward hookups except for the record mode input selection (on analog input 2), which will be discussed in the next step. Other than that, I was able to use standard stable input setups as found on the arduino.cc site for the ins, diode protection for the clock input and current limiting resistors on the tempo LED. The Voice record and playback outputs were going to go to another chip, so I waited on those for the moment.
I mounted the pots and switches onto a panel and wired them to standard edge connections on the protoboard, then ran wires from the edge connections to the actual pins, inserting resistors and diode as needed. Once everything was wired, I created a basic test program (available here ) to display the settings as produced by the various inputs.
Once it was all working, I proceeded to put in the switching chips. But before we get to that, I will explain how I set up four recording switches to a single analog input - in the next step!
Step 7: Implementing the Record Switches
Since I was running out of pins on the Arduino, and since only one Yada would be recording at a time, I decided to create a ganged switching array using a single Arduino analog input. I used four switches, with increasing values for the connected resistors. The result was that my sketch saw each switch as follows:
No switch on: value = 0-100
Switch 4 on: value = 250-400
Switch 3 on: value = 500-650
Switch 2 on: value = 750-900
Switch 1 on: value = 1023
This was easy to decode, and I was able to implement channel switching without having to use all the rest of the pins.
Step 8: Using Switching Chips
Since the record and play buttons of the Yada Yada Yada device are simple SPST switches, and the outputs from the Arduino are voltages, I decided to find a chip that could perform the switching based on incoming voltage. After some searching on the net, I found the Fairchild CD4066BC , a quad switching chip. The wiring was fairly easy: I just used one for the four record lines and one for the four playback lines. Since the chip took voltage and ground, a straight wire from the digital output pin to the control pin of each of the switches was all that was needed to interface with the Arduino.
Step 9: Hooking Up the Yada's
At this point, I had a working Arduino sketch and usable switching network. I tested everything before attaching the boards, since the last thing I wanted to do is toast a Yada and have to disassemble another! Once everything was known-good, I started hooking up the Yada Yada Yada boards.
For each board, I had to:
- Hook up the + and - power to the main circuit power rails.
- Hook up the potentiometer connections to the 25K pots on the front panel.
- Hook up the record button connections to the record switching chip.
- Hook up the play button connections to the playback switching chip.
- Hook up the mic inputs in parallel (all boards would be using a single mic input).
- Create speaker output connections for eventual connection into a mixer.
With each board in, I used the test program to turn on record and playback functions, and tested them using temporary connections on the protoboard. I ended up losing one Yada in this process, but I had several more, so I was in OK shape. When complete, I bundled the Yada boards together as a "pack" - the stiff solid-core wire that I'm using for patching was strong enough to keep them nested and safe.
Step 10: Create a Mixed Output
Since this is a circuit-bending project, it means that we really don't know that much about the output of the devices. There isn't an easy way of knowing the output impedance, output level or anything else. As a result (and like so many circuit-bending operations), you just have to do some trial and error.
I started off with 100K pots, 10K resistors and what I mostly got was a bunch of noise - hum and buzzing. After trying any number of options (without going to an op-amp buffer), I found that dropping a 1K resistor between the output of the potentiometer and ground cleaned everything up. The result is the circuit shown in the attached diagram.
I put the mixer on a seperate circuit board - a longish protoboard I got at Radio Shack. There is lots of spare room in case I later decide to add any other circuitry (like, perhaps, a buffer amp or some simple effects).
You'll notice that I'm now using 10K pots instead of the original 100K. The 100K pot gave about 10% useful range - everything else was silence. Dropping to 10K means that I have about 40% useful travel, but it doesn't get down to silence. Since there are muting switches in place, I felt OK about it. Also, given my expected use, I didn't really need a perfect mixer.
The output is to a standard unbalanced 1/4" jack. It needs to be amplified, but it is fairly clean (given the source...) and integrates well with the rest of my home studio.
Step 11: Package It Up
Once all the pieces were put together, I just had to package it up. I chose an experimenter's box that I found at JB Saunders, and made a drilling template using Adobe Illustrator. Drilled holes, mounted the contents and put on knobs, LED holders and the works.
You'll notice on the interior picture that I place some non-conductive foam on the bottom of the metal box. This is because it is impossible to actually attach the stack of Yada Yada Yada boards to anything without causing major malfunctions. So, instead, I bound the four units together with a tie strap and allow them to "float" within the cabinet. There's enough wire so that they will never hit the top of the box, but making contact with the bottom could potentially cause a short. So the foam is there to prevent the Yada boards from ever hitting the bottom of the box.
For front panel labeling, I used an old Dymo labeler that my wife has been hauling around for the last 20 years. Retro punk/handmade music sort of look, but somehow it speaks to me.
Step 12: Afterword: What Not to Do...
Yes, indeed, I did exactly that. In order to finalize the project, I rebuilt it on a protoboard and some breadboards - allowing you to see and hear the end result:
Jobs for the future? I'd like to be able to have the system mute the output when recording starts and stops (to eliminate the beeping sound), and I'd like even more control of the mix. I would also like to build in effects and a speaker so that it could be a standalone device. But the results are compelling, and I'm probably going to use it for a generative music piece in the near future.
I hope you enjoyed the journey!