Friday, November 28, 2014

Some Examples

This is a quick post with a few links to testing basic functionality of the Due and Uno. Primarily these videos focus on basic things like LED timing, LED response from button input and simple 8bit audio output.

First Video - timed LED sequence.

Second Video - asynchronous button input & LED output

Third Video - 8bit PCM output with the Uno

The asynchronous input is a crucial concept because it will allow the step sequencer to be played like a classic drum machine like an Akai MPC. My next step is to work on outputting 12bit, 16kHz PCM files off an SD card through the Due.

A Little Help

The other day I was looking for any information on anything where people created digital musical instruments with Arduino boards. To my luck a guy made an open source project (much like mine will be) that turns the Due board into a fully functional step sequencer and DDS (direct digital synthesis) synthesizer. The project is called Goovuino and its last blog post was well over a year ago. Using my own hardware designs I'm going to be able to use this library to construct the step sequencer.

The interesting part of this project was learning how DDS really works. I had a rough idea that to generate a waveform using sample data and iterating an array. The biggest thing I picked up while learning about it is how to do fixed point integer arithmetic. This blog post has helped explain in depth on what is expected of the hardware when I plan on implemented DDS with the Due.

Monday, November 3, 2014

Fritzing and the First PCB Design

This past week I have been researching different tools to design and develop PCBs (Printed Circuit Boards). I have to design the input panel for the step sequencer which is really just a few LEDs, buttons and one potentiometer. That was simple enough. Below is a rough screenshot of the finished PCB design.

To create this I used an amazing prototyping program that I am going to use for the remainder of this project. It is called Fritzing. I need to finish the labelling for the board and then put my name all over it and release it into the wild. it will be the first of many aspects of this project that I will release into the open source world.

What the Heck is step_seq?

step_seq is an open source 8bit step sequencer built with Arduinos. That's right, multiple Arduinos. So that sound all cool and everything but what is it really? Its a machine that allows you to input rhythmic percussive patterns to digital audio samples. The following is a video of a dude playing with a Roland TR-808, a classic step sequencer.
The TR-808 is a much more sophisticated machine than what I plan on building, kind of. A lot of specifications for this project (as its a school project) have me doing all sorts of stuff I normally wouldn't care to do, like serve the samples over a wireless network to allow you to easily swap them in and out of the SD card.

step_seq will be built with 3 Arduino boards all working together via the I2C protocol. One of the boards will be an Arduino Due while the other two will be Arduino Unos. The Due will take care of all the memory intensive operations, like organizing the names of the samples being used, outputting information to the display, storing sequences for samples, the playback speed (BPM [Beats Per Minute]) and tell the Unos what to do. One Uno will take care of serving and playing the audio sample file (which will be specified below). The other Uno (and only to fulfill a requirement for the project, I don't really like this idea) will serve the same files from the same SD card over a WiFi network. I may come up with a better idea for the WiFi later, like editing patterns through a web-interface or something.

The audio files themselves have to be a PCM WAV file at 16kHz sampling rate and 8bits per sample. These are very low quality samples which will create a very retro video game feel.

So far that is the idea behind all this. I will update more with prototyping layouts, schematics and PCB designs. Along with photos of my actual parts coming together.