How to make Arduboy Chiptune

(Pablo E. Cortés) #1

How do people make chiptune for the Arduboy? Do people use any program or methodology/process in particular?

(Scott) #2

It depends on the functions or library you use to generate sound.

The “Beep” classes built into the Arduboy2 library are really just intended to produce simple beeps and other effects. You probably wouldn’t want to use these to generate music.

The ArduboyTones library plays scores consisting or frequency/duration pairs. You can fairly easily create scores directly. You can also convert simple MIDI files using the midi2tones program on a PC. The MIDI files can be created using your favourite tracker program or any other method that can produce them.

The ArduboyPlaytune library plays scores that are loosely similar to MIDI. As with ArduboyTones, you can use midi2tones to convert MIDI files.

Team A.R.G.'s ATMlib has its own ATM tracker editor to create scores.

(Scott) #3

I forgot to mention @igvina’s ArdVoice library. It’s more intended to play speech but I suppose it could produce music, as well.

(Pharap) #4

You might also want to look into a technique called “bytebeat”.
It might not be of much use to you if you’re new to programming,
but it can be a very good way of producing decent chiptunes without using much memory.

The basic idea is that you write a function that takes a ‘time’ argument (a number of ticks, e.g. the number of frames passed) and then you use that input to generate an output sound value.
Mostly it’s trial and error and it usually sounds repetative and/or very alien,
but it can be pretty cool if done well.

(Pablo E. Cortés) #5

Wait, so people make Arduboy chiptune in the actual code? How do they make it sound good? That sounds hard.

I tried ARG’s music tracker and it seems to malfunction on my web browser (Chrome).

(Simon) #6

If you are lucky, you might be able to find some appropriate theme music in MIDI format. You can then strip the music right back to a single channel and convert it using the Midi2Tones tool that comes with ArduboyTones. You have to really ‘simplify’ the songs and ensure that there are not two notes playing simultaneously.

I did this for 1943. After generating the ArduboyTones code, I then went back in and removed a lot of the repetitive notes - for example, it would generate a note for a duration and then immediately follow it with the same note and a different duration / same for rests. I simply combined them together to reduce the PROGMEM size.

Laborious but if you are not musically inclined, you can get some simple music to work.

(Pablo E. Cortés) #7
  1. So what you’re saying is that you didn’t make your music for 1943. You downloaded a song, stripped to a single channel version, and converted to the Arduboy’s format?

  2. Are you also saying that chiptune for the Arduboy must only use 1 channel?

  3. But what about actually making your own music? That’s what I would like to do.

(Simon) #8

That’s right …

I aren’t particularly musical and I wanted the same tunes as per the original game, so this approach worked well for me.

The different libraries support a different number of channels. the ATMLib can support multiple channels but it comes at a cost in terms of memory. I worked with another member here to put some ATMLib music on my Karateka game but it was using 3K of memory just for some ‘basic’ music albeit multi channel. I understand that some of this was the library itself and additional assets would be smaller but it still is a large chunk of the available memory.

If you want to develop your own, you can hand craft you own in code for ArduboyTunes or by using the TeamARG’s tool (have you tried other browsers?). The ArduboyTones format is really simple to understand and you can covert music you have written elsewhere by hand. The TeamARG format is complex and you will need their tool.

(Pablo E. Cortés) #9

The TeamARG format is complex and you will the tool.

What do you mean by “you will the tool” ?

(Kevin) #10

I think he means “will need their tool”

(Simon) #11

Yep … sorry, my mind must be preoccupied with other things!

One thing to keep in mind with all this … the Arduboy has a little piezo speaker and this limits the quality of the music it can produce. Game play is much more important than the sounds IMO - I actually turn the sound off on my AB.

(Pharap) #12

For the ‘bytebeat’ approach it’s basically trial and error.

There are tools that can be used to test:

Here’s a few articles about bytebeat:

And a really boring academic paper that has a few useful examples of commonly used patterns:

It should be possible to automate that if you ever need to do it again.

I aren’t either. :P

I concur.

(Kevin) #13

This made me think of putting a GAN on 8 bit music, if only I knew how to use AI.