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 296Next »
codegamc1 year ago

the plastic records look so cool!

This is amazing. I think we haven't even seen the tip of the iceberg here. 3D printing will change the way we view resources.

gazumpglue1 year ago

This is just Fantastic your project is trully exciting !!!

You're a wonderfull woman ! I wish you the best !

TP_inc1 year ago
I think I may have seen this on popular science

You definitely did, I saw it there too.

This is just Fantastic your project is trully exciting !!!

You're a wonderfull woman ! I wish you the best !

salyhp1 year ago

Hey this is truly incredible, I've been trying to follow too but last night (10pm-7.50am) was how long it took to create the .stl file after running it on processing (the .stl file is 975.5MB) and whenever I go to open it on MeshLab it comes to the end of the loading bar and it freezes. Is the file too big, (my audio file was 51.8MB/ 04.54min long)? Should I open this file on another programme? Can anyone help please, it would be appreciated

amandaghassaei (author)  salyhp1 year ago
sounds like the file is just too big for your computer. Is their a computer with more RAM that you can use?
Mistwalker1 year ago
This is very interesting. I wonder if it might be easier to make a 78 than a 33 1/3RPM record. 78s hold between three and five minutes of music per side, depending on the size of the record. I would think that this would mean everything would be larger.

Also, I could then play one of these very modern records on my 90 year old vv-80 victrola. Though, likely not for long, as the heavy steel needle would likely chew up the plastic (78s have ground up stone in them to make them harder than the steel in the needles).
amandaghassaei (author)  Mistwalker1 year ago

yes I'd really like to do this eventually!

A lot of modern record players have a setting to play 78s. You might be able to play them on yours.

Fantastic! I am blown away. Best instructable ever :)

amandaghassaei (author)  ChippMarshal1 year ago


T0BY1 year ago

I wonder if anyone can help me, I am a bit stuck! When I run the Processing Sketch I keep getting the error 'The function close() does not exist'. I have checked some forums and have made sure all the [ and ] brackets are in pairs and that the file name doesn't include the word 'close' but it's still not working. can anyone help?
amandaghassaei (author)  T0BY1 year ago

did you figure it out? it sounds like there's something wrong with your import of modelbuilder?

nerd74731 year ago
kjm26721 year ago
I think the 3-D printed record is a great idea!

I think I can help with some issues. Believe it or not, the issues that you are having are the same issues that engineers had when they were in the process of developing the first microgroove record, the earliest of which were made available to the public in 1948.

The reason why it sounds thin and the stylus wants to hop out of the groove whenever there is bass is because it's physically impossible to record the entire spectrum of sound within the physical confines of a record groove.

The way they get around this is by using what is called an equalization (EQ) curve.

The standard curve for all vinyl microgroove records since around 1953 or so is the RIAA (Recording Industry Association of America) equalization curve.

What it does is it decreases (compresses) the sound level peaks of the bass frequencies on a graduated scale across the sound spectrum. The lower the bass frequency, the more the sound levels produced at the frequency are decreased (compressed).

This allows the long wavelengths that are characteristic of bass frequencies to still be recorded, while keeping them at a proportional size small enough to produce what is known as a "trackable groove".

Your RIAA phono preamp (can also be the "phono" input on your receiver) that your phonograph is connected to then boosts (expands) the bass frequencies upon playback in the exact same amount they were decreased (compressed) during the recording process.

This puts the bass frequencies back up to full level as they originally were recorded, and therefore allows the full wide range of sound to be reproduced when the audio from the phonograph is sent to an RIAA standard phono preamp or "phono" input and amplified.

You can add RIAA equalization to any audio file by using the free, downloadable audio editing software Audacity.

It is recommended that audio files have a "flat" EQ prior to adding the RIAA EQ curve.

This is to ensure that when the record is played back through the RIAA phono preamp (or input on receiver marked "phono), it will recover the wide range and flat response of the original recording.

If it is something that has already been professionally mastered, such as a premastered audio CD, tape or any other source and the tonal characteristics of the audio hasn't been altered in any way then it will already be "flat" and you can then apply the RIAA EQ curve to the audio file.

If it is not a recording that was ever mastered and mass produced, then it may need to be equalized "flat" so that all of the audio frequencies in the recording peak out at the same level.

Doing so would then allow the audio frequencies to be equally recorded and therefore make it possible to produce sound with the widest range and fidelity.

This also explains why only a phonograph can sound right when connected to the "phono" inputs on the receiver.

If any other source is connected to the "phono" input, then it will sound distorted and have too much bass.

If the phonograph is connected to something other than a "phono" input, it will hardly have any volume, sound weak and tinny with no bass.

The only exception to this rule are professional DJ turntables that have a built-in switchable RIAA phono preamp that when switched on, allows the phonograph be connected to any preamp level input.

When records are mastered, they can also do things like vary the spacing of the grooves to allow for a variant amount of recording time.

The further the grooves are spaced apart, the louder the sound level that is fed to the cutter can be, yielding a shorter recording time.

Likewise, the closer the grooves are spaced together, the lower the sound level that is fed to the cutter has to be, yielding a longer recording time.

To make the most efficient use of the recording surface otherwise, the groove spacing will vary to accommodate louder or softer passages.

That's why if you ever look at a record closely, in particular a recording that has both soft and loud passages, you will find that the loud passages will reveal a greater amount of space between them, while the soft passages will be spaced more closely together.

I sincerely hope this helps.

Kevin J. Mzyk
San Antonio, Texas

P.S. I also know how to make the groove capable of producing STEREO sound as well!
kjm26721 year ago
There is also a way to do STEREO as well.

You have the sound waves for left and right channels recorded (RIAA EQ,ed of course....) could be 3-D printed into a groove that has 45 degree angled sides.

Whatever sound waves that are the same in both left and right channels will produce singular side-to-side modulations that produce mono sound from both channels.

Whatever sound waves that are different in both left and right channels will produce two separate modulations that produce stereo sound from left and right channels separately.

Stereo records started to be mass produced on a wide scale since about 1958, although since about 1955 they were in the process of developing stereo records with some of the earliest released to the public in late 1957.

Kevin Mzyk
JoaCHIP1 year ago
This is such a brilliant proof of concept, and because I was just talking with a bunch of musicians about 3D printing LPs, I remembered this page.

And how about the future? I can only imagine that the resolution of 3D printing will improve over time. When that happens, printing LPs should also improve in both signal/noise ratio and reproducable frequency range. I can hardly wait! :D
Love all your work!
I really want to print a 3D record but i'm failing with the final step. When I want to input my max ram memory in processing which is 4 GB I can only go up to 2000 MB. If it's higher there is an error. But it works fine with 2000 MB so thats okay but then when he is done building the STL file and I open it in Cura, (the only 3d viewing program I have on this laptop) I see that it is reeeaaaaaaally small. Like 10 mm or so. What did I do wrong?

Ohyeah and also I want to print it on a objet30 3D printer, is it capable to print this?
amandaghassaei (author)  merijnhaenen1 year ago
I had the same thing happen on my machine (4gb ram, processing only allows 2000mb), if you need something bigger you'll have to move to a machine with more ram. STLs have no units, so it sounds like you are importing the stl in mm. See if there is a setting that let's you import as inches. I know that objet studio has this setting, maybe try that. You can print on an objet, but be sure to print at high res (600dpi 16 micron steps), regular res will work, but you'll only be able to hear the drums and bass, high frequencies will get lost.

send me a video if you get this to work, I'd love to see it!
Is it possible that objet studio is only for windows? what other program can I use that is available for mac? I watched the other questions and I also have to change the size to 8" and the radius of the outermost groove to 3.8"

And what exactly in processing do I have to change for the 600dpi 16 micron steps?

Thanks for helping!
amandaghassaei (author)  merijnhaenen1 year ago
if you just want to view the stl, download meshlab. Sounds like you are changing the diameter and outermost groove radius correctly.

by default I have the settings for 600dpi 16 microns steps. If you want to change this find the following lines:
float dpi = 600;//objet printer prints at 600 dpi
byte micronsPerLayer = 16;//microns per vertical print layer
ScottVinyl1 year ago
Amanda, I've been trying to figure this out for like 3 hours so far, but I'm still getting an error. TypeError: 'map' object is not subscriptable. Please help. I'll really appreciate it.
amandaghassaei (author)  ScottVinyl1 year ago
this is in python? what version are you running? you might also reach out to fabacademy in the comments below, looks like they might have solved this.
I just saw your comment. I already looked through the comments and realized i was using the wrong version. I did processing and got my Stl file, but it doesn't open in any of the 3D programs I've tried. It didn't even open when i used the computer to put it in the tray for the 3D printer. I changed a few things make it on a 7 inch record, but im sure that isn't the reason for it not working cause i did try the one you gave me without changing anything except the file name and like I said it still wouldn't open in any program. Thanks.
amandaghassaei (author)  ScottVinyl1 year ago
what happens? does it crash the software? try opening it in meshlab - it's really lightweight. also how big is the file?
By the way, In Processing; All i did was change the rpm and changed 11.8 to 7 If this is even possible. Let me know what else I need to change. Still need help opening my .stl file. Do I need to click "Export Application" in Processing?
Win951 year ago
I can record two channels in the file?
This line says 2 channels, but only half of the file:
frameOneChannel[i] = frameInt[2*i+1]*2**8+frameInt[2*i]
amandaghassaei (author)  Win951 year ago
this line is supposed to merge the two channels together into one mono channel - frameOneChannel. However, there is a bug in my program that is not mixing these together properly. I haven't had a chance to address it, for now the workaround is to make your audio mono in audacity and then copy it and export a stereo track consisting of two identical mono channels. Sorry about that!
amandaghassaei (author)  bubblewrathful1 year ago
cool! definitely post a video if you do it!
wdoyle19801 year 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)  wdoyle19801 year 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
maxhirez1 year 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...
« Previous41-80 of 296Next »