Algorithmic Noise Machine




About: IMPORTANT: Please do not message me personally with technical questions. Use the comments in the respective Instructables. I really love sharing and helping people makes much more sense in a shared space whe...
This project is a part of experiments done while doing an artist in residence at Instructables. You can see the other projects here.

You can use bit-shifting as an alternative way of creating "music". This principle enables you to squeeze as much processing power as possible out of the Arduino while creating novel and interesting effects. The challenge lies in composing through bitshifting.  This is an example of how such composition could look like:

OCR0A = ((-t&4095)*(255&t*(t&t>>13))>>12)+(127&t*(234&t>>8&t>>3)>>(3&t>>14)); // by tejeez

I have made this box to explore the consequences of changing the different parameters in the pieces. This enables me to see how they effect the overall sound qualities and enables me to prototype new compositions. The different parameters are changed through the 4 potentiometers. One potentiometer to choose the current algoritm and the other potentiometers to change the parameters of it. Although the sounds can be considered crude, it is quite engaging to experiment and play with.

This project is based on Duane Banks code. He does a good job on crediting his sources, I want to embed them here for reference: The original tunes were produced by Viznut and by others in response to his original blog post here - The original Arduino port was completed by Arduino Forum user Stimmer. Duane Banks used the synth schematic found in this instructable plus a customized version of the timing functions found in the code. I adopted his code and modified the different algorithms so you can play around with their parameters and get a sense of how it affects the sounds.


Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Components Needed

You will need to following components:
  • Arduino board
  • Prototyping shield.
  • Pin headers.
  • 4 10kOhm potentiometers.
  • 2.2k Resistor.
  • 100n Capacitor.
  • 100u Capacitor.
  • Jack connector.
  • A pair of computer speakers.

If you want to make the enclosure you would need:
  • 3mm black acrylic.
  • A wooden box (I got mine from the container store in SF).
I used a lasercutter to cut the acrylic, you could use a piece of plywood and cut the 4 holes manually.

Step 2: Making the Circuit

Wiring it up is pretty much according to the diagram. If you would like to experiment with wiring the sound circuit up on a breadboard you can find pretty detailed pictures and instructions in this instructable.

The potmeters should be connected with 5v on one side and Ground on the other. The middle pin should be connected individually to each analog in on the Arduino.

Step 3: Uploading the Code

There are lots of tutorials which already explains how to program an Arduino and they do a much better job than I could. So I will just give you a couple of links:

The 3 things that usually cause trouble:
  • On windows you have to install the proper drivers (sometimes also on mac).
  • Remember to select the right serial port in the gui.
  • Remember to select the right board in the gui.

Below are the simplified steps to uploading the code to your Arduino board:
  • Download Arduino:
  • Connect the Arduino board to the computer via usb.
  • Download the code from here.
  • Move the libraries in the libraries folder into your Arduino libraries folder. If you do not know how to this please refer to this toturial.
  • Upload the code to the Arduino board.

Step 4: Debug With Guino

I am using Guino to visualize the code. Guino is a new program to visualize data coming from the arduino board and it enables you to manipulate it on the fly.

You can find the the Instructable here on how to use it. It is really simple to get up and running and it enables you to control some of the internal values. Download the program from here and run the program (you have already installed the libraries in the previous steps).

Step 5: Making the Enclosure

You should do the following steps to makethe enclosure
  • I used a laser cutter to cut the acrylic plate to put on top.  You can download the diagram here.
  • Mount the potentiometers inside the holes.
  • Drill a square hole in the box where the usb port on the Arduino is located.
  • Drill a hole in the enclosure for the jack connector.
  • Mount the Arduino board with a gluegun or a little screw.
  • Wire the sound output to the jack connector on the box. The left and right channel should be connected to the same wire.

Drilling a square hole
Drilling a square hole in a wooden box has proven to be a tricky task. I have yet to find the perfect solution for it. My solution in this case was to use a drill press, a tiny drill bit and a larger drill bit.

Start out by marking with a pen the approximate area where the hole should be. Then drill many, many tiny holes inside this area. Since it can be tricky to get the precise placement of the square hole I usually compare it to the arduino board to see what areas I am missing. When you have drilled enough holes for the wood to be porous then use the larger drill bit to remove all the loose bits.

I would love to hear if anybody have a better way to do this?
DIY Audio

Participated in the
DIY Audio



    • Indoor Lighting Contest

      Indoor Lighting Contest
    • Make It Fly Challenge

      Make It Fly Challenge
    • Growing Beyond Earth Maker Contest

      Growing Beyond Earth Maker Contest

    27 Discussions


    1 year ago on Introduction

    For some reason i cannot edit my own instructables - so uploading a correct diagram here :)


    I was wondering if the Prototyping shield is absolutely necessary? I am new to Arduino and know nothing of the shield but it looks like a perf board could be used in place of the shield. Would this be true?

    many thanks


    3 years ago

    I've tried running this and no matter what I get an error message calling the Guino_libray an invalid library. The only time it acknowledges the library is if I open the full example sketch, but not when I use the Synth sketch.


    3 years ago

    ET.begin(details(guino_data), &Serial);

    No matching function for call to 'EasyTransfer::begin(byte*, unsigned int, Serial_*)'

    What is going on?

    jesternBlast Master

    Reply 3 years ago

    HI Blast Master, I'm curious, would you share your code, I think the rate change would be cool as a feature :)


    4 years ago on Introduction

    Would it be possible to make this project with a, lets say, mini or nano?


    4 years ago on Introduction

    I'm new to arduino so I can't tell what I'm doing wrong

    I keep getting this message:

    onelineSynthGuino.ino: In function 'void paramChanged(int*, int)':

    onelineSynthGuino:131: error: 'gUpdateValue' was not declared in this scope

    onelineSynthGuino.ino: In function 'void setup()':

    onelineSynthGuino:151: error: 'gBegin' was not declared in this scope

    onelineSynthGuino.ino: In function 'void loop()':

    onelineSynthGuino:160: error: 'guino_update' was not declared in this scope

    onelineSynthGuino:172: error: 'gUpdateValue' was not declared in this scope

    onelineSynthGuino.ino: In function 'void gInit()':

    onelineSynthGuino:183: error: 'gAddLabel' was not declared in this scope

    onelineSynthGuino:184: error: 'gAddSpacer' was not declared in this scope

    onelineSynthGuino:185: error: 'gAddSlider' was not declared in this scope

    onelineSynthGuino:190: error: 'gAddToggle' was not declared in this scope

    onelineSynthGuino:192: error: 'gAddColumn' was not declared in this scope

    onelineSynthGuino:198: error: 'gAddMovingGraph' was not declared in this scope

    Any help is much appreciated.

    1 reply

    Reply 4 years ago on Introduction

    your librarys aren't properly installed in the arduino master folder.. all this has to do with the serial monitor.

    I am trying to upload the code for this into an UNO, but I am getting an error with the EasyTransfer ET create object part of the code. I am new to coding so any help would be much appreciated. Here are the error messages:

    Guino_libray:64: error: 'EasyTransfer' does not name a type
    Guino_libray.ino: In function 'void guino_update()':
    Guino_libray:93: error: 'ET' was not declared in this scope
    Guino_libray.ino: In function 'void gBegin(int)':
    Guino_libray:172: error: 'ET' was not declared in this scope
    Guino_libray:172: error: 'details' was not declared in this scope
    Guino_libray.ino: In function 'void gSendCommand(byte, byte, int)':
    Guino_libray:390: error: 'ET' was not declared in this scope

    2 replies

    Reply 5 years ago on Introduction

    i had this problem too. i read the tutorial, but i'm not sure what im doing wrong. what did you do?


    5 years ago on Introduction

    Ever wonder how to made one on this noise machines but made them independent from a computer and guino ? and have more flexibility overall. Try this code,77884.0.html

    like all the same without the above mentioned stuff, override the leds and stuff. keep it minimal :)


    5 years ago on Step 2

    Can you buy the prototyping shield online. I am in Australia and can't find that specific model in store

    1 reply

    Reply 5 years ago on Introduction

    u can make easily the shield on very basic Phenolic prototyping board. i made mine in one morning, and it works great...


    5 years ago on Introduction

    Hi, I build one and is great. It just run when GUINO in on, or it is a way to override Guino to make it independent from a computer? I can´t find it how.


    5 years ago on Introduction

    Or it is possible make another scheme for people who know how to solder, but have just basic knowledge about wires connections ? Thanks a lot !


    5 years ago on Introduction

    Hi, I really like this project but I am total "noob" with Prototyping shield and i dont know, how to design scheme for jack with this model of ProtoType Shield :( can you help me

    please ?

    it is different model then you have.


    5 years ago on Introduction

    I got the thing working and it is quite awesome. :)

    how does one go about altering the code to change the composition? is there a repository for variations that can be plugged in?