A custom Fisher-Price clockwork record player record - plays "Still Alive" from Portal! The tune and model were all generated in Processing.
Some people have asked for some more details on the way I made the model:
I started with measuring out the discs that came with our player, they're injection moulded and all seem to have quite close tolerances which gave me a great interest in getting the right size for my model.
Once I worked out that it might be possible I moved on to setting up the notes so I could work out a tune. I spent quite a long time with a tone generator and a toothpick (driving my wife half crazy in the process) until I had worked out the frequencies of the notes that the music box part of the player could make. I made the tone generator in Processing using the Beads library.
I found that, although there are 22 separate notes on the music box there are only 16 unique notes, 6 are doubles. I've assumed that this is so that the notes can be played more quickly - due to the mechanism in the player 'tone arm' there's a risk of a missed note or jam if only one track is used and the pips (knobs? dots?) are too close together.
Once I had this information I made Processing sketches (Beads again) to make up new tunes and also check that I had the right notes by playing back one of the existing discs (good job I checked since I had two notes wrong...) with note positions copied from a photo of the disc.
Working out the new tune was complicated since there isn't a full chromatic scale available so some tunes simply can't be played even if you shift the key up and down, I wasn't able to get the rest of the 'Still Alive' tune, for example. The tune repeats twice around the disc and wraps so it keeps playing (for as long as the spring lasts)
Once the tune was done I had to transform from linear note positions which I'd used to work out the tune (the sketch looks like a music stave but with each line being a note on the available scale) into polar coordinates around the disc and verify the dimensions.
I created a blank disc by 'lathing' the vertex-by-vertex profile I measured using vernier calipers around an axis in Processing and exporting it for later use.
The "notes" are added onto the blank disc by compositing some boxes that I generate in Processing from the notes with the pre-rendered disc which is stored as an STL file - here I used the Unlekker library for both export and import/combine/re-export.
Once this is done it can be uploaded directly in Processing to Shapeways.
...and believe it or not that's the short form and entirely skips my (mis)adventures in Blender, Autodesk 123D, Solidworks...
At some point I'd hope to be able to make at least some of the code available but it's in a really bad state at the moment so I'd like to tidy it up before I release anything...