Programming an Arduino using an audio file

This proof-of-concept is just waiting for you to put it to good use. [Mike Tsao] wrote an Arduino sketch that lets him decode incoming audio data which could be used to program the device. He’s calling the project TribeDuino because it decodes an audio file which is actually the firmware update for a Korg Monotribe.

Earlier in the month [Mike] read our feature on a project that reverse engineered the audio-based firmware update for the Korg hardware. He wanted to see if he could write some code to read that file on his own hardware. All it took was an audio jack and two jumper wires to get the Arduino ready to receive the audio file. His firmware reads the Binary Frequency-Shift Keying encoded data as the audio is played, then echos a checksum to prove that it works.

This would be a fantastic addition to your own projects. Since the audio connection only needs to be mono, it only takes just one Arduino pin to add this jack (the other is a ground connection). Having just played around with alternative ways to push data to a microcontroller ourselves, we might give this a try when we have some free time.

Reverse engineering a Korg Monotribe

Yesterday, Korg released a firmware update to their ribbon controller synth, the Monotribe. The firmware is just an audio file that needs to be played to the sync input of the box. [gravitronic] thought this was rather interesting, so he decided to decode the monotribe firmware. It’s the first step to custom Monotribe firmware, and on the path towards reverse engineering this neat box.

After converting the firmware update to a .wav, [gravitronic] looked at the file with a hex editor and found that each sample is two bytes, and the left and right channels are the same. That made enough sense, so after getting rid of one channel, he sent it through Python to take a look at the patterns of ones and zeros.

Of course, [gravitronic] arbitrarily chose high = 1, low = 0, and little-endianness. The first result didn’t produce a nice “KORG SYSTEM FILE” in the header, so he tried other combinations until the output file looked reasonable. The result is the actual .bin file that’s going to serve as the basis for a nice homebrew firmware. You can grab [gravitronic]’s Python script here and decode your own firmware.