Wednesday, October 28, 2009

Monophonic Cassette Walkman "Mellotron" - First Look


So I've got a few cassette walkmans just lying around, doing not much. I decided to build a three-voice sample playback device. Here you can see the heart of a monophonic version. Once I build and test the three voice version, I will post schematics, pictures and video.

Tuesday, October 27, 2009

Basic Audio Playback with Arduino

This is one of the simplest way to play back a very short snipped of audio using an Arduino. This is only meant to be an example, nothing too serious.


Hardware
The hardware is very, very simple. The output is PORTD, with the following schematic (bits 0 - 7 refer to Arduino digital pins 0 - 7). This is a resistor ladder.

Arduino Code

Download here: http://milkcrate.com.au/_other/basic_audio.pde


Video

Arduino-based Low Bit Stand Alone Digital Delay Line

I made a very basic standalone digital delay line using Arduino.

Hardware
The hardware is very, very simple. The audio input is analog pin 5. The output is PORTD, with the following schematic (bits 0 - 7 refer to Arduino digital pins 0 - 7). This is a resistor ladder.

Arduino Code

byte array[1900]; // create an array

void setup() {
DDRD = 0xff; // set PORTD to all outputs - digital pins 0 - 7
analogReference(INTERNAL); // change the analog input reference voltage level
}

void loop() {
for(int i = 0; i < 1900; i ++) { // set up a loop
PORTD = array[i]; // play back sample
array[i] = analogRead(5) >> 1; // record sample
}
}


Video

RAM Music: The Audio Contortionist

Background and Overview
I have started working on what I am calling "RAM Music" after my previous exploration of EPROM Music. In many ways, this is an extension of EPROM Music, as it shares many traits. In particular, this idea of manipulating digital sound directly, without the need for pre-programmed parts, or anything that computes (such as a microcontroller).

What I love about projects like these is the physical nature of the setup - because all of the components are very simple parts, plenty of breadboarding must be done in order to get something work. And when something like this does work nicely, then it is a very satisfying experience. I can see this sort of idea being pushed quite a bit further, with multiple RAM loops that are synced together.

I am thinking of getting some PCBs made up, so that I can more easily use these circuits during performance without getting fearful of everything falling apart. If anyone is interested in getting hold of such a PCB (and perhaps related components), drop me a line.

The circuit can basically record a short section of sampled audio, from an external source (computer / guitar / microphone / whatever). This section of audio is stored in a RAM-based area of memory. The memory is constantly being played back in a loop (unless RECORD is activated). At any point in time, the user can "drop in" a new snippet or chunk of audio by clicking the record button. The input level for the analog to digital converter can be changed via a potentiometer. The sampling rate / speed of the circuit can be changed via a potentiometer. The loop itself can be made longer or shorter by adding or removing address lines from the address bus (up to 512KB). Manipulating the address lines can also hack up and granulate the audio.



How it Works
The circuit is made up of some basic components, as shown below:
• oscillator
• 2 x binary counters
• RAM
• analog to digital converter
• digital to analog converter
• 2 x potentiometers
• 1 x switch
• associated resistors and capacitors

As usual for many of my ideas, the cost of these items is not high at all.


(click to see a larger version)
(click to see a larger version)


Above, there is a basic representation of this circuit. The oscillator (the basic clocking mechanism that sets the sample rate for record and playback) is a 40106 inverter with a resistor / capacitor type configuration. The output of the oscillator is routed to the first binary counter, whereby the lower twelve address bits (A0 - A11) are generated.

The twelfth address bit also acts as a "carry count" for the second binary counter, which then generates the higher address bits (A12 - A18). Both binary counters are 4040 chips. All of these address lines make up the address bus, which is directly connected to the RAM chip (which is a 628512).

The RAM chip has an I/O bus, which means that the input pins are the same pins as the output pins. The I/O bus is eight bits wide. The RAM I/O is simultaneously connected to two places; the digital to analog portion of the circuit (the audio output), and the analog to digital portion of the circuit (the audio input).

There is a switch that switches the circuit to record mode. This is a push-type, normally-open switch. The default (not pushed) position of the switch is the playback mode.

The output pins of the analog to digital converter chip (an ADC801-type chip) are directly connected to the I/O bus of the RAM. When in playback mode, the chip select line of the analog to digital converter is set to deselect the chip, placing the output pins into a high impedance. This is so that the analog to digital output does not interfere with the RAM I/O bus, which is set to read mode.

As the binary counters count from 0 to 524287 (which equals 512 x 1024), each sample is read back from the RAM chip, and presented on the I/O bus, where the pins are in an output mode. Each sample is then sent to the digital to analog converter, which is simply a resistor network.

When in record mode, the chip select line of the analog to digital converter is set to select the chip, making the output pins present the results of the analog to digital conversion to the RAM on its I/O bus. As the RAM is set to write mode, it's I/O pins are set to input. As a result, the RAM samples / records the audio from the analog to digital converter. As the RAM's I/O bus is shared between the ADC and the DAC, the input is monitored on the output during recording.



Contorting the Audio
This circuit currently has a few ways to manipulate audio. These are:
• A record button allows the user to sample incoming audio to a RAM buffer
• A potentiometer sets the input level
• A potentiometer sets the sample rate / pitch for playback. The changing of sample rate can be recorded if desired, by physically changing the position of the pot during recording.
• The address lines A0 - A18 can be manipulated ie. moved around, removed, replaced, giving a wide range of effects such as stuttering, repeating and basic granulation.

Although this does not sound like heaps of manipulation, keep in mind that this circuit can absolutely mangle a sound beyond recognition. The ADC is running at its maximum speed, and as such the sample rate can be varied greatly for example.

Future additions may include additional RAM slots, synchronisation for other devices including EPROMs and more manipulation. Nonetheless, I am very happy with these initial results.




Photos




Video Example

Sunday, October 25, 2009

Chipsounds SN76489 - Very Basic Example

Those people that are interested in chipmusic will no doubt be aware of the recent release of the highly-anticipated Chipsounds. Although I have not had a lot of time to deal with the software, I have been really impressed by both the quality of the emulation as well as the ease of use.

Here is a recording of the SN76489 (found in the Sega Master System). There are two identical phrases. The first phrase is played by the Chipsounds. The second phrase is played on the Sega hardware.

Listen here.

Dry and Unbent Buddha Box Samples

Someone recently asked me to record and upload a dry, unbent buddha box sound sample. Here we go! The sample is from the same model of buddha box as the one used in my circuit bent buddha box #4 video.

Ukulele Time!

Nadaum Experiment Wrapup

The two shows put on by Darren Curtis and Bradley Pitt of Sacred Resonance went quite well last night. It was pretty much a sell out crowd in the Adelaide Planetarium.

I think the best aspect of the show was the fact that all of the music and visuals flowed very well - this was in part assisted by the playing of the crystal bowls by Allen Stevens.

In terms of what I did, you can read quite a bit about the mapping of muon detection from a three Geiger tube detector to sonic / musical parameters here. I was pretty happy with the musical outcome; it was paced well and there were no technical issues (what? really?) in terms of my setup.

Some of the NASA footage was amazing, and it was also great to see the analog projector put to use in the planetarium.

Apologies for the lack of footage; I forgot my camera or my video camera.


From left to right - Bradley Pitt, Darren Curtis and Allen Stevens

Darren's laptop setup and Allen's crystal bowls

My setup

YM2413 Drums Sample Kit for LSDJ

I've made a YM2413 drums sample kit for the Game Boy sequencer LSDJ. Get it here.

Friday, October 23, 2009

Circuit Bent Buddha Box 4

Using a different Buddha Box than the one I previously used (I fried that one unfortunately - how distasteful; I really liked the sounds it made), I added the generic pitch resistor modification with the slight twist of using an LDR instead of a pot, and then using an LED connected to an Arduino to control the amount of light hitting the LDR (in other words - a vactrol).

I've been quite happy with the result, and in a way it reminds me of controlling the speed of a tape motor using a similar setup (ie. PWM from the Arduino - controlled by an outside source etc).





Thursday, October 22, 2009

Extending the Mapping for the Muon Detector

I woke up at 3AM and decided to extend the mapping used for the sonification of Robert Hart's 3GM homemade muon detector. You can read what I have done previously in terms of mapping here. The way in which I have extended the mapping is relatively opaque and distanced from the actual data - this is because mapping sonic data from what is essentially a one bit stream in a meaningful feels a little like squeezing blood from a stone.

You can listen to an outcome here. This does not represent the final state of a mapping with which I am happy, but it is some sort of start. I hope.

However, I would consider this a challenge and a way to overcome limitations rather than a negative aspect. So, as a result, the mapping is a little more abstract and indirect now compared to my previous example.

The mapping and subsequent audio output has been extended in a number of ways. Instead of triggering just one sample, the mapping triggers a total of 11 samples - 3 of which are triggered 'directly' from the incoming data, and 8 of which form part of a drum machine.

The three 'directly' triggered samples have their velocity controlled by the accumulator system (as described in my previous blog entry on this subject). One of the samples has the pitch also set by the accumulator.

With the more indirect samples (the drum machine), the data that controls them is generated in a more complex fashion. In a sense, the first part of this generation / interpolation aspect is similar to the accumulator setup.

Keep in mind that the muon detector can detect one ray at one given point in time, for only one position. What this means in terms of the data output is that if a ray is detected, then a high state (a 'one', basically) is sent to the computer.

What the computer does, in order to generate the drum machine data, is to poll the output of the muon detector once every 350 milliseconds (this can be changed based on the environment and how 'busy' the outcome should be). If in this polling period, the computer has detected a cosmic ray, then a high state is stored. If in this polling period, the computer has not detected a cosmic ray, then a low state is stored.

This series of 1's and 0's corresponding to each polling period is placed in a 32-bit buffer (which is, as a result of continuous detection polling, being updated constantly). This buffer of 32 bits in length actually forms the basis for the two high bytes and the two low bytes used in my bitwise rhythm generator (which can be read about here and here).

Basically, this bitwise rhythm generator uses these two words (so, two high bytes and two low bytes or 32-bits worth of information) and a set of user-determined logic gate operations to form a looping rhythmic sequence of one to four bars in length (depending on the user settings). The data from the bitwise rhythm generator is sent to Ableton Live as MIDI data - in a format suitable for the Impulse device.

This bitwise rhythm generator also includes provision for combining the data inside of the sequencer to generate MIDI CC messages (to be precise, message streams). The idea is to be able to use just four bytes of data to generate (relatively) complex rhythms as well as control data.

This MIDI CC data is then also sent to Ableton Live, where it controls various effects and instrument paramters associated with the previously mentioned Impulse device. Approximately forty parameters are controlled from just three MIDI CC streams, from reverb depth, delay times, frequency cut offs and compression thresholds, to transposition, time compression / expansion, bit crushing and saturation character. See the full list in the screen shots below.


MIDI Mapping, Page 1

MIDI Mapping, Page 2

Bitwise Rhythm Generator

The current muon detector Max/MSP patch

Circuit Bent Buddha Box 3

Today I continued my exploration of the circuit bent Buddha Box by adding a breadboard-based resistance step sequencer, so as to be able to sequencer out pitch changes. You can hear some results in the video below.




Unbricking a Bricked Arduino

An associate of mine recently somehow bricked a couple of Arduino board. The issue was caused (we believe) by using a RAM-based array to store pin numbers that can be called in a FOR loop. Why use this complex method than setting multiple pins using the PORTX registers?

Well, the Arduino program was written with education in mind, and since the class had already covered FOR loops but had not yet covered PINX and PORTX, it was perhaps the easiest way to approach things.

The symptoms of bricking the Arduino in this instance were: not being able to use the Arduino IDE to upload a new sketch; the sketch itself didn't run; and the LED on pin 13 was just rapidly turning on and off as soon as power was connected to the board. Furthermore, hitting the reset button did nothing - the LED would just keep blinking.

This problem was fixed by using a standalone Wulfden Arduino program to re-upload a different sketch to the ATMega168 chip (I just used the Blink example).



Broken Arduino board


The Wulfden programmer


Fixed Arduino board

Wednesday, October 21, 2009

Circuit Bent Buddha Box 2

Today I continued my exploration of the circuit bent Buddha Box by adding some breadboarded fun.



Circuit Bent Buddha Box

In order to relax for a little bit last night, I decided to circuit bend a little Buddha Box I had lying around. Although I really like the outcome so far, I want to work on getting some more extensive sounds out of it.




Tuesday, October 20, 2009

Blipfestival 2009: little-scale in the Big Apple!

The lineup for Blipfestival 2009 in New York City has been announced. I am happy to say that I am playing. Some of the other acts include I, Cactus, The J Arthur Keenes Band, Disasterpeace and Leeni, with more to be announced.

More information regarding the event can be found here.

Monday, October 19, 2009

Cosmic Radiation Detection Sample Triggering

I've been working on making music using the muon detector setup about which I have written previously. The feature that has been added is a simple accumulator. In essence, it outputs a MIDI CC value, which increases if there are many hits in a short period of time, but decreases if there are little or no hits. It is somewhat challenging to think about how a single, one bit data stream of control information can be mapped to a musical process. Consider this mapping a work in progress.




Saturday, October 17, 2009

Sega Master System (SN76489) Controlled By MIDI Keyboard

Landscapes





by Lauren

Friday, October 16, 2009

Commodore 64 SID 8580 Basic Sample Pack (112 Samples)

I've made a C64 sample pack. To be precise, it's a sample pack, featuring every C and G note from C-2 to G 6 for the main basic waveforms of a Commodore 64 (8580 SID chip). The waveforms are triangle, sawtooth, pulse and noise. The duty cycle for the pulse wave was set to approximately 50%. The samples were recorded from C64 hardware directly using a custom designed interface.

Download the uncompressed sample pack here
(WAV / 44.1 KHz / mono)
Download the compressed sample pack here (MP3 / 192 Kbps / mono)

If you like this sample pack, you might also be interested in some of the following sample packs (all recorded from hardware using custom designed interfaces):

Sega Master System YM2413 Preset Instruments
Sega Master System YM2413 Drums
Sega Master System SN76489
Sega Mega Drive YM2612
SPo256-AL2 Speech Chip Allophones
Atari POKEY Noise
Atari 2600 TIA

Sega Master System (YM2413) Controlled By MIDI Keyboard

Atari 2600 Controlled By MIDI Keyboard

Wednesday, October 07, 2009

Pig and Rabbit


by Lauren

Tuesday, October 06, 2009

e-Time Game Play (Sega Genesis / Mega Drive Clone)

e-Time Game Play (Sega Genesis / Mega Drive Clone with SD card support and second player port).

Sega Clone - D22+ e-Time Game Play

Monday, October 05, 2009

Nanoloop 1.5 (Game Boy) Synced to Ableton Live

Sunday, October 04, 2009

They Have Killed The Man In Man

A track inspired by the book Return from the Stars by Stanislaw Lem.

"Today there is no tragedy. Not even the possibility of it. We eliminated the hell of passion, and then it turned out that in the same sweep, heaven, too, had ceased to be. Everything is now lukewarm." - Lem

Listen to it here.

Commodore 64 As Bitcrusher Audio Effect (with Visuals)

I Am Playing At Sound Bytes 5 - Melbourne - November 20!

Who:
Sparkyboy (South Africa)
little-scale (Adelaide)
Dot.AY(Brisbane)
CTrix (Melbourne)

DJ Sets by Dr Dollar Dollar, Celsius and Cid


When: November 20, 2009 - 8PM Onwards


Where: Queensberry Hotel, Corner of Swanston Street and Queensberry Street, Melbourne

Saturday, October 03, 2009

YM2413 Original Versus Clone - May Only The Strong Survive


The real YM2413 - labeled 9904 HAAG




The clone YM2413 - labeled 0108 HABG



So, previously I wrote about replacing the clone YM2413 chip inside my Sega Master System with a real YM2413 chip.

I have recorded a comparison between the two. Although the original comes out on top over all, I do miss a certain 'filtered bass' - type sound that was a preset on the clone.

In the audio file (see below), the first fifteen notes are both sound chips simultaneously, with the original panned hard-left and the clone panned hard-right. The second lot of fifteen notes is just the original. The third lot of fifteen notes is just the clone.

It is important to note that with both chips in the audio file, the exact same data was used to produce the sound (ie. same volume, same frequency and same instrument preset setting).

The instrument preset settings follow the instrument preset register, and are 'supposed' to sound as follows:

1. violin
2. guitar
3. piano
4. flute
5. clarinet
6. oboe
7. trumpet
8. organ
9. horn
10. synthesizer
11. harpsichord
12. vibraphone
13. synthesizer bass
14. acoustic bass
15. electric guitar

The audio can be found here.

Milkcrate #31 - Brian Green - "rrrrrr"



Experimental musician / circuit bender / generative composer Brian Green (from South Carolina, USA) has made a work under the standard milkcrate conditions.

"rrrrrr" is a drone piece 149 minutes long, made from the sound of clinking stones together.

"I decided to give another go at the milkcrate project as i really enjoyed the last one i did and i feel i push myself alot to do very different things when im doing one of these," says Brian.

Listen to Brian's session and read more about it on his blog here.

Thursday, October 01, 2009

Will The Real YM2413 Please Stand Up?

The YM2413 board that I use in my Sega Master System 1 was hand made by Tim Worthington aka Viletim, and although it works pretty well, I have always found that it sounds a little strange when set to certain parameters, especially the 'Guitar' preset instrument.

It turns out that the chip supplied on my board was a clone (unbeknown to Tim) - luckily, Tim was kind enough to procure a batch of real YM2413 chips. Thanks go out to Jacko for ordering my replacement, real YM2413, the difference is truly remarkable.

I installed the real YM2413 chip in the SMS1 today, and not only does it offer a cleaner, smoother sound, all of the instrument presets work great!

Massive YM2413 Sample Pack (245 Samples)

I have recorded a sample pack from a real YM2413 chip.

The sample pack consists on 245 samples. These are:
• 5 drum sounds
• 16 sounds per instrument, across 15 preset instruments

In the case of all of the pitched sounds, the samples include every C and G pitch from C-2 to G6 (16 in total). Every even-numbered file is a G. Every odd-numbered file is a C.

Get the MP3 version here.
Get the WAV version here.