Picture of 3D Printed Record

In order to explore the current limits of 3D printing technology, I've created a technique for converting digital audio files into 3D-printable, 33rpm records and printed a few functional prototypes that play on ordinary record players.  Though the audio quality is low -the records have a sampling rate of 11kHz (a quarter of typical mp3 audio) and 5-6 bit resolution (less than one thousandth of typical 16 bit resolution)- the songs are still easily recognizable, watch the video above to see the process and hear what the records sound like.  Also check out my laser cut records, made on wood, paper, and acrylic.

This past year I've been posting a lot of audio projects, specifically, I've been experimenting with using relatively simple tools and techniques and very little memory to approximate and recreate digital audio signals.  A great example is my Arduino Vocal Effects Box, where I used an Arduino to perform realtime pitch-bending on an incoming audio signal.  Through these projects, I've learned that audio is a very resilient medium, it can take a fair amount of abuse (in the form of distortion and compression) while still maintaining most of the integrity of the original sound.  The key is as long as you loosely approximate the overall shape of an audio signal, the output will sound reasonably recognizable.  We have evolution to thank for this: as we hear audio, some complicated processing goes on in our brains that makes us very good at ignoring noise and focusing on the important pieces of information coming through.  We can work off of relatively few cues (sometimes these even include contextual or visual cues) to piece together mangled or noisy audio and make sense of it; this is how we are able to focus on one voice in crowded room or decipher a message sent over a cheap walkie talkie. 

This project was my first experiment extending this idea beyond electronics.  I printed these records on a UV-cured resin printer called the Objet Connex500.  Like most 3D printers, the Objet creates an object by depositing material layer by layer until the final form is achieved.  This printer has incredibly high resolution: 600dpi in the x and y axes and 16 microns in the z axis, some of the highest resolution possible with 3D printing at the moment.   Despite all its precision, the Objet is still at least an order of magnitude or two away from the resolution of a real vinyl record.  When I first started this project, I wasn't sure that the resolution of the Objet would be enough to reproduce audio, but I hoped that I might produce something recognizable by approximating the groove shape as accurately as possible with the tools I had. 

In this Instructable, I'll demonstrate how I developed a workflow that can convert any audio file, of virtually any format, into a 3D model of a record, and how I optimized these records for playback on a real turntable.  The 3D modeling in this project was far too complex for traditional drafting-style CAD techniques, so I wrote an program to do this conversion automatically.  It works by importing raw audio data, performing some calculations to generate the geometry of a record, and eventually exporting this geometry straight to a 3D printable file format.  Most of the heavy lifting is done by Processing, an open source programming environment that's often used for 2D and 3D graphics and modeling applications.  Here's a basic overview of my Processing algorithm:

use raw audio data to set the groove depth- parse through the raw audio data, this is the set of numbers that defines the shape of the audio waveform, and use this information to set the height of the bottom of a spiral groove.  This way, when a turntable stylus moves along the groove it will move vertically in the same path as the original waveform and recreate the original audio signal.
draw record and groove geometry- A 3D model is essentially a list of triangles arranged in 3D space to create a continuous mesh, use the data from the last step and some general record parameters (record diameter, thickness, groove width, etc) to generate the list of triangular faces that describes the record's shape and the detailed spiral groove inscribed on its surface.
export model in STL format- the STL file format is understood by all 3D printers, export the geometry calculated in the last step as an STL file.  To get Processing to export straight to STL, I used the ModelBuilder Library written by Marius Watz (if you are into Arduino/Processing and 3D printing I highly recommend checking this out, it works great).

I've uploaded some of my complete record models to the 123D gallery as well as the Pirate Bay.  Check Step 6 for a complete listing of what's there and what I plan on posting.  Alternatively, you can go to Step 7 to download my code and learn how to make printable record models from your own audio.

Special thanks to Randy Sarafan, Steve Delaire, Arthur Harsuvanakit, Phil Seaton, and Audrey Love for their help with this project.

Here's another video that gives a great overview of the printing process and shows the printers at work:

Remove these adsRemove these ads by Signing Up
« Previous41-80 of 270Next »
NoPegs10 months ago
I am thrilled at your enthusiasm and technical know-how. But I couldn't help but notice you don't seem to be aware of how phonographs apply the RIAA equalization curve to the signal prior to amplification. This would explain why you get so much Bass and nearly no Treble. (IMHO you haven't yet hit the physical printing resolution barrier yet.) You should try applying the inverse RIAA emphasis curve to your audio data prior to your current processing steps and see how it goes, this way when played back the deck itself will apply the RIAA emphasis to your "pre-de-emphasized" signal and hopefully the result is increased fidelity.
amandaghassaei (author)  NoPegs10 months ago
yes, this was a little oversight on my part. I haven't had a chance to go back and print out a record with RIAA eq, but all my laser cut records are properly eq'ed:
amandaghassaei (author)  bubblewrathful10 months ago
cool! definitely post a video if you do it!
wdoyle198011 months ago
Had a hard time sifting through the hundreds of comments, so I apologize if this is a duplicate -

My build area is only 8x8". What's the easiest way to scale this down to print a 6" or 8" record instead of the 12" ? I've only got about 2.5min of audio I wish to print.
amandaghassaei (author)  wdoyle198011 months ago
you need to change two lines:
float diameter = 11.8
this should be 8 instead of 11.8"

float outerRad = 5.75;//radius of outermost groove in inches
make this something like 3.8
maxhirez12 months ago
Cool Amanda. I almost expected to hear "Getting Away With It" by Electronic in the mix!
_jubjub_1 year ago
hi amanda,

great job with this (and the laser cut record instructable). i have a few questions about customizing your code for a less precise 3d printer than your objet.

i've gathered i should be changing this code:

//convert everything to inches
float micronsPerInch = 25400;//scalingfactor
float dpi = 600;//objet printer prints at 600 dpi
byte micronsPerLayer = 16;//microns per vertical print layer

and replace the dpi and layer thickness with specs from the target printer.

do you (or does anyone else reading this) have any experience printing this with with a stratasys uprint plus? it has a layer thickness of 254 microns, so i'm not sure how drastically i might break your code if i increase the micronsPerLayer variable exponentially. are there any other portions of the code i should be careful of in this case?

also, this might be more of an open question to anyone else reading this, but how would i convert the x y resolution of the uprint plus, which gives a minimum wall/feature thickness of .036"/914 microns (and a supposed .020"/508 microns bead diameter) into a DPI value?

thanks again for these two great projects!

- jasper
amandaghassaei (author)  _jubjub_1 year ago
cool! I'd recommend changing to these variables:

float amplitude = 24;//you'll want something between 2-5
float bevel = 1;//bevelled groove edge
float grooveWidth = 2;
float depth = 2;/depth of tops of wave in groove from uppermost surface of record

float recordHeight = 0.1;//height of record in inches

//convert everything to inches
float micronsPerInch = 25400;//scalingfactor
float dpi = 50;// 1.0/0.02 = 50
byte micronsPerLayer = 254;//microns per vertical print layer

I'd also recommend changing the rpm to 45 or 78 to get the most out of the lowered x/y res you are printing with.

I'm not sure it will work, but it's definitely worth a try! be sure to pisk something very bass-heavy to start, lower frequencies hold up better to this process than higher ones.

airbuff1 year ago
Hi Armanda,

I love your very impressing project, I thought of it and I might know the reason the sound quality is that  poor. Here is my guess:

Basically a record is able to hold two separated information in form of vertical and horizontal modulation. Due to certain concerns (mainly compatibility issues with existing mono record players with only horizontal modulation used) the left and right stereo signals are not split into:

vertical modulation = left
horizontal modulation = right

but into MS (mid side) stereophonic encoding:
M = L + R = horizontal modulation
S = L - R = vertical modulation

This is realized by turning both, the cutting stylus and the reproduction stylus coils, by 45°, which you can see very well in the link you posted.

How I understood, your 3D model is based on modulating the vertical depth of the groove only with no horizontal modulation at all. If so, your record holds side information only.

Here is an example of the resulting effect:

Given a mono Nirvana track with an imaginary amplitude of 200 (L = R = 100):

A real record would hold the following information:

horizontal modulation = M = L + R = 100 + 100 = 200
vertical modulation     =  S = L - R  = 100 -  100 = 0

After reproducing the information by playing the record, the reversed happens:

M + S = (L + R) + (L - R) = 2L   => M + S = 200 + 0 = 200 = 2L   => L = 100
M  - S = (L + R) - (L - R) = 2R   => M  - S = 200 - 0 = 200 = 2R   => R = 100

Your printed record holds the following information:

horizontal modulation = M = L + R = 0
vertical modulation     =  S = L - R = 200

After reproducing the information by playing the record, the reversed happens again:

M + S = (L + R) + (L - R) = 2L   => M + S = 0 + 200 =  200 = 2L    => L =  100
M  - S = (L + R) - (L - R) = 2R   => M  - S = 0  - 200 = -200 = 2R   => R = -100

The right signal is inverted, which means a complete cancellation in case of a mono signal.

Changing your 3D model by modulation the groove horizontally with fixed vertical depth, the sound should be highly improved.
amandaghassaei (author)  airbuff1 year ago
thanks for the comment! Yes I did consider this, the problem with lateral modulation for these records is that the resolution of the x/y axes is about 1/3 of the z axis of the printer. So I decided that it would still be best to go with vertical modulation. In my final audio sample I actually inverted the right channel and mixed the two signals together back to mono, Otherwise, yes, much of the signal gets cancelled out, it's actually really interesting to listen to the records as stereo and then unplug one of the channels to hear the huge difference it makes. I did go with lateral modulation in my laser cut record project, you can find that here:
Hey Amanda, great idea, i think it's a great proof of concept, and also a great proof of how awesome 3D Printers are (considering how precise they have to be to even print a recognizable sound wave/groove). But as far as the quality goes, how about printing a record with blank (straight) grooves, that are a little smaller than planned, and then building some kind of "record recorder" with maybe a small sewing neddle and old small speaker or something like that, where the sewing needle gets heated and melts the Audio signal into the groove?! I believe that could give you a cleaner groove and perhaps a better sampling rate, and therefore not such a "hollow" sound...
amandaghassaei (author)  delphino-9991 year ago
that could be cool. the material I'm using isn't heat sensitive, but maybe this could be done with a plastic blank or something.
Lasivian1 year ago
Ok, I have a homemade 3D printer, design my own models, etc. And even I think this is totally awesome. Excellent work :)
chenty1 year ago
Hello Amanda,
i was wondering if its possible to alter the processing code you have written to make the record grooves come out in a straight line instead of a spiral ?

amandaghassaei (author)  chenty1 year ago
I've also just posted this:
amandaghassaei (author)  chenty1 year ago
yes this is definitely possible, and could turn into a really interesting project! you should take a stab at the processing code and let me know if you have questions.
eon9971 year ago
This is incredible. I have made a 3D model, but I don't know where I can get it printed...can some one get me a link to place where you can get a model shipped to you? Thanks!
rm321 year ago
This is really cool.

Have you considered having a custom stylus made for these records by someone like Expert Stylus UK? I know they make 5 mil styli for early 78s, but they might be able to make a 10 mil stylus (or whatever the groove width for these 3D records is) as well. I imagine you would be able to reduce surface noise significantly.
This is very interesting!
as you are looking into making records from things other than vinyl, I thought you might be interested in hearing about a friend of mine who (a very
long time ago) successfully made a near perfect (although probably not very good for needles) fibreglass copy of the Beatles revolver, using alginate moulding compound to take an impression straight from the existing record. Although this technique is only useful if you have a vinyl copy already, it might extend your, and anyone elses, research... Lovely to read your posts anyway, very excited to see where this is going!
Nicapizza1 year ago
This is going to sound really weird, but I absolutely LOVE the way that "Smells Like Teen Spirit" and "Debaser" sound on that, but I'm afraid that my Prusa Mendel will not be able to print those, is there any chance that you would sell them?
amandaghassaei (author)  Nicapizza1 year ago
I just don't have the resources to do it unfortunately. try the laser cut version maybe?
sorry I couldn't help more
Thanks anyway! There is a FabLab in my area, and they have a Stratasys printer... Ill look into renting some shop time. Great project by the way! The grungy sound really works with those songs.
amandaghassaei (author)  Nicapizza1 year ago
awesome! good luck!
fabacademy1 year ago
Hi amandaghassaei,

I assume a lot of people are contacting you, so, I will be quick.

When I try to convert the stereo file into a mono file via Python, the .txt file never shows up in my folder. I have a TypeError message from Python saying :

'map' object is not subscriptable

Do you know how I can fix that ?
Bests from France.
amandaghassaei (author)  fabacademy1 year ago
what version of python are you running?
eric m1 year ago
Would like to see photo of the 3d grooves.
amandaghassaei (author)  eric m1 year ago
we're getting a macro lens in the office soon, maybe I'll post it then.
toxonix1 year ago
Amanda, this is flippin cool. I used to have a record label and we had our vinyl cut at Columbia Record's plant, which has been closed for a while. There was all kinds of trouble getting long playing records with big, thumping kick drums and bass lines to track properly and not bump the needle right out of the groove. We had to adapt our mastering techniques to get the vinyl to sound the way we expected. Eventually we did no more than 7 min per side for the maximum dynamic range and volume output.
I really like the idea of printing records on something other than vinyl, which isn't a very nice material except that it can be thermo-molded at least once in a very accurate way.
One of the problems with vinyl was always the thickness and warping. Nobody liked floppy records, ideally they'd all be 1/4"+ thick and flat as a pane of glass. As long as you don't have to carry 100 of them around to gigs etc...
I'm really interested to see where this goes.
amandaghassaei (author)  toxonix1 year ago
wow, 7 min per side. were you spinning them at 45rpm? thanks for the comment!
Nope, 33 1/3!
chenty1 year ago
Not to worry, I worked it out :-)
amandaghassaei (author)  chenty1 year ago
you might also check out this technique:
chenty1 year ago
22.0 mb, but the stl mesh is a pain to work with, as it doesn't want to stick to anything
is it possible that you could change the processing code in the linear strip file so it builds a box base, similarly to how the record generator builds the the record for the grooves to be applied too.
chenty1 year ago
hey amanda,
sorry i haven't replied in awhile, been up to my eyeballs in stuff
the processing code works brilliantly, thank You :-)
however i'm now having issues trying to plant it in to surfaces so now i'm going to print it them and place them in to object manually.
Have you tried to placing them in to 3d model ?
amandaghassaei (author)  chenty1 year ago
I haven't. how big are the files you're exporting from processing?
SG1Oniell1 year ago
This. Is. Amazing! Fantastic work! Now I have to convince my Dean to let me use our 3D printer in the college of engineering.
T0BY1 year ago

This is amazing, you're a genius!

I'm having trouble, I keep getting the following response;

Traceback (most recent call last):
File "C:\Users\Computer\Downloads\F0Y8Y6VHAUNM3D4\", line 34, in
frameOneChannel[i] = frameInt[4*i+1]*2**8+frameInt[4*i]#separate channels and store one channel in new list
IndexError: list index out of range

What do you think I'm doing wrong?

amandaghassaei (author)  T0BY1 year ago
thanks! did you load a stereo wav file into python? did you change anything in the code? I'm curious, what are you going to use it for?
I did, it's just a few seconds of sound which I converted exactly as you mentioned in Audacity. I didn't change the code other than that. I tried exiting and reloading it to make sure I hadn't changed anything by accident.

I'm gripped by the idea of making my own record and making a record player to play it on.

Thanks for your input!

amandaghassaei (author)  T0BY1 year ago
cool! I just tried it and it worked fine for me, are you using the code included in the "RecordGenerator" zip file? what version of Python are you running? operating system?
« Previous41-80 of 270Next »

Get More Out of Instructables

Already have an Account?


PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!