Music downloads
Video clips
Scene productions
Chip music
Hardware projects

The hardware chiptune project

by kryo

(This video at youtube)

Download:

Normally, when you create a chiptune, you start with an existing chip (such as the SID chip or the YM2149) and write a tune for it. We decided to start from scratch, and create a chip and a tune.

It all started at St. Lars Meeting III, an oldschool demo party held in Lund. Yarrick, flex and I were there. I had gotten the idea for the project on the day before the party, so things were a bit spontaneous, and we had to make do with whatever components I had laying around.

In the beginning, we used a homebrewn AVR programmer, which I had built as part of a course in mechatronics. flex valiantly supplied the USB-to-serial adapter. However, at one point we started experimenting with the so called fuse bits of the AVR, basically trying to make the processor run at 8 MHz instead of the default 1 MHz. When we did this, the AVR programmer stopped working.

Luckily, I had brought some spare microcontrollers, but we knew that we'd eventually need those 8 MHz anyway. So we called Laban on the telephone, and asked him to bring his STK500 (a commercial AVR programmer). In order to use it, we realized that we needed some software, so Yarrick downloaded avrdude, using his mobile phone as an internet gateway. (Did I mention it was an oldschool party?)

chiptune stlarschiptune stlars
chiptune stlarschiptune stlars

We wrote all the sound-reproducing software at the St. Lars meeting. One particularly interesting bug that kept us wondering was the fact that when we tried to multiply two integers on a particular source code line in the interrupt routine, all sorts of weird things would occur. If we commented out the multiplication, things would work. However, there were other multiplications in the interrupt routine that did work. The "weird things" were that, for instance, we wrote a constant to an output port at startup, and never wrote to that port anywhere else in the program; but when we un-commented the multiplication in the interrupt routine, that output port emitted a quite different signal.

This confused us to no end, until we looked at the generated machine code and started counting the clock cycles. Apparently, the multiplication was the final straw that caused the interrupt routine to run for too long. Before the interrupt routine would finish, another interrupt would occur, causing a new frame to be pushed onto the stack. The stack would fill up and the new stack frames would overwrite RAM and eventually the I/O registers.

This meant that we would have to rewrite the interrupt routine in assembly language.

Once we had the software up and running, we had to compose a chiptune. I had been experimenting with chip trackers before, so I re-used some code, and hooked it up to the sound routine, which was quickly ported from the AVR.

Tracker screenshot

Unfortunately the party was very noisy, and we were sitting just below a loudspeaker, so it was quite impossible to compose anything. Since I lived nearby, and had recently had a cold, I was sleeping at home. So, this night I went home, got some sleep, and wrote the chiptune in the morning.

Sadly, when I got back, the party was already over. There were several people left, but the lights were on. I asked the crew if we could stay for an hour or so, and see if we could get it to work (which would have been nice, because then we would have completed the whole project in just one weekend). We were allowed to stay, but alas, the chiptune that I had written was too large to fit into the 8 KB of flash ROM together with all the code. This was such a setback that we had to give up.

I brought it all home, and ordered a few new components (in particular, a resistor ladder, so that we wouldn't have to use discrete resistors for the D/A conversion). flex and I also discussed various ways of compressing the song data.

chiptunechiptune
chiptunechiptune

Eventually, we managed to cram it all into 8 KB. We couldn't use any standard compression algorithms, since we were so low on RAM (i.e. there was no room for the unpacked data). Instead, we devised a solution involving variable bit-length data structures and lots of bit shifting. We also removed one of the command tracks; as you can see in the tracker screenshot, every note can be followed by two effect commands. To save space, we removed support for the second command, and edited the tune to cope with this new limitation.

At this point we had decided to bring the project to Birdie 17, and participate in the wild compo.

The time had come to move the project from the solderless protoboard. The technique of using schematics printed on paper, glued to a veroboard, is part of the rapid prototyping method taught in the mechatronics course. I wrote the schematics in PostScript, using a set of functions that I had designed during that course.

chiptunechiptune
chiptunechiptune
chiptunechiptune
chiptunechiptune

We ended up with a 5th place in the Birdie wild compo. That's actually good, given that it was a non-technical audience. The winning entries featured humour and/or singing girls, of course. =)

Here's the Pouët page for the chiptune project.

Posted Saturday 30-Jun-2007 11:04

Discuss this page

Disclaimer: I am not responsible for what people (other than myself) write in the forums. Please report any abuse, such as insults, slander, spam and illegal material, and I will take appropriate actions. Don't feed the trolls.

Jag tar inget ansvar för det som skrivs i forumet, förutom mina egna inlägg. Vänligen rapportera alla inlägg som bryter mot reglerna, så ska jag se vad jag kan göra. Som regelbrott räknas till exempel förolämpningar, förtal, spam och olagligt material. Mata inte trålarna.

Anonymous
Wed 6-Feb-2008 22:15
You've got a lot of patience to do all of that. I'd say fuck it half through. Keep up the good work though.
Anonymous
Mon 7-Apr-2008 05:57
Nice job you did. I will study the work you made and try to learn from it. Iĺl put a post on my blog about it as soon as possible.
Jeronimo, from Brazil
www.blogdoje.com.br
Anonymous
Mon 7-Apr-2008 10:32
Great Job, impressive!

One small hint for prototyping boards. The vertical "bridges" are looking a bit messy (i know, its a prototype).

Before using silver wire: Unroll 1 Meter of wire, attach it to a fixed object, grab the other end (with a gripper) and pull it hardly. Now you have very straight silver wire which looks quite nice :)

Thx for the idea of gluing the layout onto the board, i will give it a try....

kiu
Anonymous
Fri 25-Apr-2008 12:18
can i use this as a project for college?

i mean, could u tell me what i need to build it?

like the components?
Anonymous
Mon 28-Apr-2008 00:53
You should compose some nice tunes for it and share them :)
Anonymous
Fri 2-May-2008 17:20
AWESOME!

What diode did you use? I just started to order all the parts needed ;-)
Can i use any standard diode at the 9V power source?
Anonymous
Tue 6-May-2008 21:06
Is the AMplifier chip actually needed? My electronics shop do not have those. Can i use a LM386 instead?
Anonymous
Wed 7-May-2008 21:41
Use external audio DAC, you got much better sound quality... This is my simple MOD player based on ATMEGA32 and TDA1543:
http://youtube.com/watch?v=tuvwfJhWyik
Anonymous
Mon 19-May-2008 16:22
This is cool, I have also begun building my own hardware player but I´m using a PIC18F452. And I do all the programming in C as I´m not that good in assembler, just have to run the core at 40Mhz instead =). I have got basic sound via the ressitor ladder to work but using a DAC sounds more interesting, what type do you use ?
Anonymous
Mon 16-Jun-2008 18:41
Yeah ! Very good job ;)
Anonymous
Sun 3-Aug-2008 22:37
Sounds like Jeroen Tel :D
Anonymous
Sat 20-Sep-2008 03:07
Linus, I'm trying to compile the tracker under mingw32 envirotment... well.. it compiles allright (after getting rid off err() calls, replacing ncurses with pdcurses and adding some os specified libraries for SDL) but nothing happens - not even an error message (i replaced err with printf())
could you provide any help? i'm more assembly coder than c one :(
Anonymous
Sat 20-Sep-2008 05:22
after another two hours i got this to work
instead pdcurses for win32, there is pdcurses for SDL library which works as it should (win32 version needs LINES and COLUMS as system envirotment variables, and works only if run from command prompt)
anyway...
MakeFile:
LDFLAGS=-lpdcurses -lmingw32 -lSDLmain -lSDL -mwindows

main.c:
if(argc != 2) {
fprintf(stderr, "usage: %s <filename>\n", argv[0]);
}
...
if(SDL_OpenAudio(&requested, &obtained) == -1) {
fprintf(stderr, "SDL_OpenAudio");
}

and <err.h> (main.c, gui.c) is no longer needed

hope it will be of some use for someone...
Anonymous
Fri 7-Nov-2008 01:51
You could have probably used a much more powerful chip, like the atmega324p or the atmega644p.
Anonymous
Wed 19-Nov-2008 16:37
Nice work. Why you don't use one PWM output with one resistor and one capacitor instead of all that parts for D/A??
Anonymous
Fri 19-Dec-2008 00:06
For the fun of it, I've made a SID version of the tune:
http://galway.c64.org/~sid/Kryo_Chiptune.sid

Thanks for the great inspiration!
Anonymous
Tue 27-Jan-2009 10:19
You guys are awesome. And you just have saved my day. A cool tune which i can listen to during office hours and a nice idea that i can work on after that. This is the best Idea for what i can do with my Atmel's which are laying around.
Anonymous
Wed 11-Feb-2009 07:12
it's amazing. good job!
Anonymous
Wed 11-Mar-2009 05:50
Im gathering all the parts from different dealer. this is just awesome!!
Anonymous
Sun 5-Apr-2009 01:51
Wonderful design and music ! I'm trying to reproduce it and to understand it, but for now I'm stuck on a few build problems.

Thierry C.
Anonymous
Wed 8-Apr-2009 19:53
hah... thats amazinggg.(: youre wayy smart *___*
Anonymous
Fri 8-May-2009 14:03
At last it worked ! (mysterious failure worked around).
(project adapted on ATMega8, with a PWM with low-pass filter based "DAC").

Thierry C.
Anonymous
Fri 3-Jul-2009 03:54
Really cool. This is also one of the first things I did in 2001 with my first AVR project. I did a rendition of Zoolook, but only with pulze waves.
Some other variations: using 9 colors of c64 video to create sound (with loud buzzing from vsync!), using sp of CIA (8bit autoshift register) to create stereo pwm dac (I never saw anyone else do this, they were always hooking up parallel dac0808).
One could make an exact sid replacement in microcontroller.
I always wanted to make a portable music toy to capture/compose musical ideas on the go .. like coffeeshop. Inspriation hits at odd times, sometimes upon waking.
Anonymous
Mon 3-Aug-2009 06:32
You've got a lot of patience to do all of that. I'd say fuck it half through. Keep up the good work though.
Anonymous
Sun 20-Sep-2009 22:34
I would so love an .XM or .MOD of this.
Or some clear samples of it, I think this sounds gorgeous.

Apart from your technical genius you're a magnificent composer.
Good work.
lft
Linus Åkesson
Sat 26-Sep-2009 19:05
I would so love an .XM or .MOD of this.
Or some clear samples of it, I think this sounds gorgeous.

Apart from your technical genius you're a magnificent composer.
Good work.

Thank you very much!

If somebody would like to make a .mod or .xm cover, feel free to! For details, have a look at the original song, which is available in the tracker source code archive (in a special format that can be loaded into the tracker).
Israel
ijruiz@hotmail.com
Fri 9-Oct-2009 13:35
Nice Job! Really impressive sound generated from the AVR. There was mention of a rapid prototyping method for the circuit. This is very useful information was wondering if the technique could be explained i.e. software used and methods for generating diagrams. For those who build circuits for oneself or others this is a fantastic way for assembly! much easier than referencing a schematic.
Anonymous
Wed 9-Dec-2009 02:17
Hi Linus,

at first i have to say: Great project and awsome tune!
I started to bulid one here at home but something is weird.
The controller seemed to run much to slow, so i switched to 8 mhz via ckdiv8 - now the contoller seems to run much faster... too fast... the tune is done in about 2 seconds...
Which fuse config did you use?

Greetz,
Retrobot0r
Anonymous
Wed 9-Dec-2009 20:41
Hi Linus,

at first i have to say: Great project and awsome tune!
I started to bulid one here at home but something is weird.
The controller seemed to run much to slow, so i switched to 8 mhz via ckdiv8 - now the contoller seems to run much faster... too fast... the tune is done in about 2 seconds...
Which fuse config did you use?

Greetz,
Retrobot0r

Got it. my compiler had produced some crazy stuff...
Anonymous
Sat 19-Dec-2009 23:34
Hi Linus,

at first i have to say: Great project and awsome tune!
I started to bulid one here at home but something is weird.
The controller seemed to run much to slow, so i switched to 8 mhz via ckdiv8 - now the contoller seems to run much faster... too fast... the tune is done in about 2 seconds...
Which fuse config did you use?

Greetz,
Retrobot0r

Got it. my compiler had produced some crazy stuff...

What was your fix? I'm still out of luck here.
Tried with CKDIV/8 and without.
Anonymous
Mon 21-Dec-2009 16:48
What was your fix? I'm still out of luck here.
Tried with CKDIV/8 and without.

Fixed it by myself. The compiler optimization produced crazy stuff. Bad results with -O2 but compiling with -O1 has worked great for me.
Anonymous
Mon 21-Dec-2009 17:29
I patched your gui.c for my purposes:
--- gui.c.orig 2009-12-21 17:23:14.000000000 +0100
+++ gui.c 2009-12-21 17:23:46.000000000 +0100
@@ -625,16 +625,16 @@
case '>':
if(octave < 8) octave++;
break;
- case '[':
+ case KEY_PPAGE:
if(currinstr > 1) currinstr--;
break;
- case ']':
+ case KEY_NPAGE:
if(currinstr < 255) currinstr++;
break;
- case '{':
+ case KEY_HOME:
if(currtrack > 1) currtrack--;
break;
- case '}':
+ case KEY_END:
if(currtrack < 255) currtrack++;
break;
case '`':

This makes it a lot easier (at least for me).
You can change the current track with HOME and END keys
and change the instrument with PageUp and PageDown.

Hope that's okay for you, linus.
Great project - by the way. I've already started making tunes for your
platform.
Anonymous
Mon 21-Dec-2009 23:40
Hey, what license do you use for this project?
lft
Linus Åkesson
Tue 5-Jan-2010 21:42
Hey, what license do you use for this project?

Oh, I guess it's more or less public domain. I like getting credit, but I won't try to enforce it legally.

By the way, under Swedish law there is no way for an author to release a work to the public domain, so you'll have to trust me. Copyright snafu. =)
Anonymous
Thu 14-Jan-2010 17:05
hi,
nice project but how to add own files (.wav,.mp3,pcm) can be added in it
Anonymous
Mon 25-Jan-2010 02:26
Hi, I am also a mechatronics guy, but from KTH. The music I hear impresses me a lot. For certain among the best 8-bit music I have ever heard, great sound quality and melody. If I find time I will build a device based on your schematics to plug into my stereo. Have you entertained any thoughts on integrating a memory card so that you can play other music (like amiga, atari, nintend)?
lft
Linus Åkesson
Thu 28-Jan-2010 16:10
Hi, I am also a mechatronics guy, but from KTH. The music I hear impresses me a lot. For certain among the best 8-bit music I have ever heard, great sound quality and melody. If I find time I will build a device based on your schematics to plug into my stereo. Have you entertained any thoughts on integrating a memory card so that you can play other music (like amiga, atari, nintend)?

Thank you! No, there's no particular reason, but I haven't made any devices to play existing file formats. I'm sure it's doable, though. IIRC there's an AVR based MOD player and a Propeller based MIDI player around, and probably lots of similar projects.
Anonymous
Sat 30-Jan-2010 21:39
Would it be possible to do the same but using an arduino?
It uses the same microproccesor that you used for this project
Anonymous
Wed 3-Feb-2010 20:04
Oh dear it sounds great *.*

Now, I´m just an electronics technician apprentice but I hope I will be able to build this in the future *.*

Jesus its great!

Greetings
Chris
Anonymous
Mon 22-Mar-2010 09:54
I would so love an .XM or .MOD of this.
Or some clear samples of it, I think this sounds gorgeous.

Apart from your technical genius you're a magnificent composer.
Good work.
lis6502:hi i did it :P. If you like you can listen to final version on http://modarchive.org/index.php?request=view_by_moduleid&query=168134
or contact me via mynick_on_gmail, so i can send U final version or just patterns (this second one could be good to make remixes).
lft
Linus Åkesson
Tue 23-Mar-2010 07:15
I would so love an .XM or .MOD of this.
Or some clear samples of it, I think this sounds gorgeous.

Apart from your technical genius you're a magnificent composer.
Good work.
lis6502:hi i did it :P. If you like you can listen to final version on http://modarchive.org/index.php?request=view_by_moduleid&query=168134
or contact me via mynick_on_gmail, so i can send U final version or just patterns (this second one could be good to make remixes).

Great cover! Rock on!
Anonymous
Wed 14-Apr-2010 20:58
Could you please make commentary to variables and functions as description(at least for avr source?). cause its so hard to understand code.
i'm currently trying to do a simple replica of your project(on PC), but i have problems with callback. do you know books or web-pages where it's explained(how to make interrupt also).
many thanks.
lft
Linus Åkesson
Sat 24-Apr-2010 18:55
Could you please make commentary to variables and functions as description(at least for avr source?). cause its so hard to understand code.
i'm currently trying to do a simple replica of your project(on PC), but i have problems with callback. do you know books or web-pages where it's explained(how to make interrupt also).
many thanks.

If you are programming a PC application, you don't have to worry about interrupts. That's where a callback function becomes useful. You'd use a library such as libSDL, and provide a pointer to one of your own functions. This function will then get called back whenever new audio samples are needed. Please refer to SDL audio tutorials.
Anonymous
Mon 10-May-2010 20:25
can anyone explain how the output wave is generated here? pwm or just port toggling?
lft
Linus Åkesson
Thu 13-May-2010 15:32
can anyone explain how the output wave is generated here? pwm or just port toggling?

By writing PCM samples directly to the port. The port pins are then connected to an R-2R ladder DAC.
Anonymous
Wed 2-Jun-2010 20:52
Hi, I've started to experiment a bit with avr's.
Just tried to build the Hardware Chiptune and flashed the atmega88 with the hexfile containing the tune.
My only problem is that some pins from the PortD just contain a signal sounding like fast random notes in the range of 10khz and above. Maybe it's a faulty atmega88 now caused by an accidental short between the input of the 7805 and PD7? Anyway I will get another atmega88 within the next few days to try out :)

Keep up your fantastic work!
Anonymous
Fri 4-Jun-2010 14:25
I tried it with another Atmega88 but with the same result.
lft
Linus Åkesson
Sun 6-Jun-2010 13:37
My only problem is that some pins from the PortD just contain a signal sounding like fast random notes in the range of 10khz and above.

This sounds like a hardware problem, such as an accidental short between signals. It's also possible that it's caused by interference from a nearby AC signal, although if you're using a 7805 I don't see where the interference would come from. Also, if there's a break somewhere in the DAC ladder (e.g. faulty connection to ground), it could start to behave as an antenna and pick up interference.
Anonymous
Tue 8-Jun-2010 17:32

lft wrote:

This sounds like a hardware problem, such as an accidental short between signals. It's also possible that it's caused by interference from a nearby AC signal, although if you're using a 7805 I don't see where the interference would come from. Also, if there's a break somewhere in the DAC ladder (e.g. faulty connection to ground), it could start to behave as an antenna and pick up interference.

I solved the problem, the resistor ladder I used was no R-2R one, now it works as ecpected :)
Anonymous
Fri 23-Jul-2010 09:27
I have to ask, what is the name of the R2R ladder? its not a very common part if your not looking for it.
-Primis
Anonymous
Sat 24-Jul-2010 18:34
I have to ask, what is the name of the R2R ladder? its not a very common part if your not looking for it.
-Primis

it's not a specific component you make it using a series of resistors ...
http://en.wikipedia.org/wiki/Resistor_ladder but it's easier to use the PWM trick mentioned earlier at least less parts. http://www.k9spud.com/traxmod/pwmdac.php
Anonymous
Tue 11-Jan-2011 03:59
here is an interesting port of this code to arduino,
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1265488118
tested it and seems to work.

Excellent code linus :)
Anonymous
Sat 29-Jan-2011 14:58
Guys, maybe it's worth to send the idea to the http://quirky.com/ and start mass production?
Anonymous
Wed 9-Feb-2011 18:47
Could you post links to some resources you used to learn how to synthesize the channels?
Anonymous
Mon 7-Nov-2011 12:17
Hello

Is there any difference between the ATmega88/168 that should be taken into account when working on this?
Anonymous
Thu 10-Nov-2011 01:51
Nice work. Why you don't use one PWM output with one resistor and one capacitor instead of all that parts for D/A??
as a beginner i wonder the same. i guess its just another approach with its own benefits, i.e. in terms of code size and perhaps easier interrupt handling.
i am not sure, but i think it's easier to generate a triangle wave with a DAC.
Anonymous
Sun 4-Dec-2011 13:30
Amazing work! congrats..... Darkangel of Ex-Unreal
Anonymous
Sun 25-Dec-2011 15:40
Would It Be possible to do this but useing a Commodore SID Chip for audio??
Anonymous
Sat 31-Dec-2011 21:39
Hello.
I was trying to compile your project, but got stuck on the file exported.s.
How do I get the tracker to export that file?

Thanks,
Tobias
Anonymous
Sat 31-Dec-2011 21:44
hehe. Got it to work. should probably read the README first :P

For everyone else, its the % key :)

Great project,
Tobias
Anonymous
Mon 27-Feb-2012 08:48
I can't seem to figure out how to fit this onto an ATmega88. The final hex seems to be 13.4KB. You mentioned you did some cool stuff with packing but I don't know how to do any of that on an ATmega chip.
Anonymous
Mon 27-Feb-2012 13:17
Hey! Thanks for an insirational project!
I'm currently studying your code and I can't figure out where does this "50 HZ" come from ?

"void playroutine() { // called at 50 Hz"

The routine runs in the main loop
"for(;;) {
while(!timetoplay);

timetoplay--;
playroutine();
}"

Please explain why is it triggered at 50 HZ ?
Anonymous
Thu 15-Mar-2012 19:04
Absolutely awesome!
Anonymous
Sun 20-May-2012 02:35
I really like the project and I'm even learning to program instruments and use the tracker effectively, but is there any easy way to add tempo functionality into the program? I don't write code, so I'm not sure how it could be implemented.
Anonymous
Sun 27-May-2012 10:32
Hello

I am currently working on a software synth of my own, but I kind of got caught up on mixing the different channels. How exactly do you mix them? Do you just calculate the average of all channels or just add them together?

Thanks for your help
Anonymous
Sat 14-Jul-2012 15:09
BTW what does freqtable[] physically represent? I don't see the relation between note frequency and this table :x
mahldcat
AMS
Fri 19-Oct-2012 00:39
So I built one of these, and have the following programmer that I got working with AVRDude: https://www.sparkfun.com/products/9825.

Now the million dollar question...it looks like the Atemga controller I used (http://www.mouser.com/Search/ProductDetail.aspx?R=ATMEGA88PA-PUvirtualkey55650000virtualkey556-ATMEGA88PA-PU) is not supported directly by AVRDude? Any ideas on what might be required to get this working?
Anonymous
Mon 31-Dec-2012 08:05
Is there tracker for Windows in the world?
--
Project is great :)
Anonymous
Wed 9-Jan-2013 05:45
Very impressive and great sound!
Anonymous
Thu 17-Jan-2013 00:33
Impressive! Can you make a page where you explain the different kinds of waveforms, their sound in relation with the frequency (mostly for the different drum sounds with a noise wave)? It would be awesome!

Riccardo
mporshnev
Max Porshnev
Thu 17-Jan-2013 06:44

Riccardo wrote:

Can you make a page where you explain the different kinds of waveforms
http://www.linusakesson.net/music/elements/index.php
Anonymous
Sun 12-May-2013 11:33
Greetings from Aus.

The Hardware Chiptune Project is a work of Genuis!

I love your work and your website; I do hope you make other tunes with a similar orchestration in terms of the waveforms used. I hope to build something like this myself when I get the time. You're an inspiration!
Anonymous
Wed 17-Jul-2013 01:57

mporshnev wrote:

Riccardo wrote:

Can you make a page where you explain the different kinds of waveforms
http://www.linusakesson.net/music/elements/index.php
I was talking more about a physical/mathematical (and practical, in software) explanation and implementation of them :)
Anonymous
Wed 26-Mar-2014 16:54
This is, by far, one of the greatest chipetunes I have ever heard. Is this technically achievable on the C-64 MOS 6581-chipset? :)

Kind regards
Dennis
Anonymous
Thu 4-Sep-2014 11:55
Seriouse Condencending Wonka meme
Oh, you got an old-school party in the non-US
That must be soo better than out dubsteps.
Anonymous
Wed 31-Dec-2014 00:14
I wonder if there is a bug in your drum instruments.

bassdrum: the start frequency seems to be too low. so your bend-delta actually causes the frequency to go below zero and reverses the bend effect (so it goes upwards). I suspect that you originally meant to use an absolute tone in the instrument instead of a relative!

snaredrum: same stuff going on here... change note in instrument to be absolute instead of relative?

well - fact is that you build amazing stuff. Thanks for the inspiration!
Anonymous
Mon 13-Jul-2015 12:32
Hi! I want to some music with arduino but i don't convert wav files to hexadecimal type like this 0x76, 0xA3, 0x12, 0x75,...
I tryied some programs (itunes,winhex,sox) but i have no success. Please help me! Thanks...
mporshnev
Max Porshnev
Wed 15-Jul-2015 10:27
Hi! I want to some music with arduino but i don't convert wav files to hexadecimal type like this 0x76, 0xA3, 0x12, 0x75,...
I tryied some programs (itunes,winhex,sox) but i have no success. Please help me! Thanks...
Try HxD ( http://mh-nexus.de/en/hxd/ ). Paste the hex values to a text editor, then replace " " with " 0x". Don't forget to discard the file header. For uncompressed Windows PCM WAV files it's usually the first 44 (0x2C) bytes or so. And, of course, keep in mind, that using WAV files is not a good practice. It's better to synth the music by executing your code.
Anonymous
Sun 8-Nov-2015 10:29
How did you make the board schematic that you printed?
Anonymous
Tue 26-Apr-2016 14:58
Hi!
Don't know if you still read postings here, but anyhow:
The tracker fills the SDL audiobuffer using the audiocb callback, which in turn calls the interrupthandler() routine. Given the current audio settings (16KHz / AUDIO_U8 / 1 channel) the interrupthandler gets 16K calls / second. The interrupthandler in turn calls the playroutine() method once every 180th call (callbackwait counter). To me this translates to an update frequency of about 89Hz for the tracker, not 50Hz as stated in the code. Am I all wrong or is the 50Hz comment in the source code wrong?

Thank you very much for these inspiring projects!!!
Anonymous
Fri 12-Apr-2019 06:42
I still come here from time to time just to listen to this tune.
Anonymous
Mon 14-Sep-2020 09:08
This project is amazing. Thanks for the write up and especially the tune! I'd love to remix it :)
Anonymous
Wed 26-Apr-2023 14:52
> So, this night I went home, got some sleep, and wrote the chiptune in the morning.

just casually wrote an amazing tune in the morning, sure. This whole project is mind blowing to me
toivoh
Toivo Henningsson
Fri 6-Dec-2024 11:29
Nice tune! (as usual)
I tried to post this comment to one of your youtube videos, but it seems that youtube ate it up. I still hope that it is relevant to you, concerning interesting ways to make even more hardware chiptunes.

Have you looked at tinytapeout.com? You can submit a logic design, and then (after some time) you get it back on a silicon chip. You're quite limited in what you can do with such a the tiny area, but that's the challenge!
I've made three synths using Tiny Tapeout: One monophonic (but it turns out that I can play duophonic music on it), one 4-channel as part of a retro console (using external RAM), and one as part of my contribution to the Tiny Tapeout 8 demo competition (synth + song + graphics all hardcoded in one design). To give an example of the limitations, the demo uses c:a 300 flipflops, that is all the memory of any kind that I could fit. All graphics have to be calculated while racing the beam because there is no space for a frame buffer. All the designs are purely digital.

If you're interested, I written about how they work:
- Monosynth with two oscillators and a 2nd order resonant low pass filter: https://github.com/toivoh/tt05-synth/blob/main/README.md (demo tune: https://www.youtube.com/watch?v=ed3JROdFSls)
- Retro console with 4-voice synth (evolution of the monosynth with some major new tricks): https://github.com/toivoh/tt06-retro-console/blob/main/docs/info.md
- "Sequential Shadows", for the Tiny Tapeout 8 demo competition: https://github.com/toivoh/tt08-demo/blob/main/docs/info.md (not as detailed), video: https://www.youtube.com/watch?v=pkiTu3iLA_U The tune is admittedly a bit simplistic, in part due to space (it had to fit together with the graphics and the synth) and time constraints.