amandarecord__edit_1.jpg
amandarecord__edit.jpg
amandarecord__edit_5.jpg
amandarecord__edit_2.jpg
model3.jpg
model1.jpg
model2.jpg

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.



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

Step 1: How Does a Record Work?

record_grooves.jpg
record_groove2.jpg
grooves.jpg
mono groove (rev.1).jpg
groove depths (1).JPG
The basic mechanism of a record player is very simple.  The record moves at a constant rotational speed (usually 33.3 or 45 rpm) and a needle (also called a stylus) moves along a long spiral groove cut into the record's surface.  As the record spins, the needle hits tiny bumps in the groove and vibrates to produce audio signals.  I won't get into the specifics of how the needle extracts data from the record, but it is really interesting and there's a great demo of it here

The record player and record cutter were invented by Edison in 1877.  Due to a lack of precise machinery and technique at the time, the grooves on the first records were much larger than those on modern microgroove records and, subsequently, the audio signals were much noisier.  This is a similar situation that I found myself in when starting this project: despite the high precision of the Objet machines, the resolution is nowhere near modern vinyl quality.  Here and here are two examples of Edison's first phonograph tests.  You can hear that the quality of recording of these tests is pretty close to what I've been able to 3d print; although I can't find the exact specs on these records, I'd imagine that the scale of the grooves was similar to what I was working with.

To give you an idea of the resolution of a modern record, check out the images above.  Figs 1-3 are from Chris Supranowitz, a researcher at The Institute of Optics at the University of Rochester.  These are close up images of a vinyl record, taken with an electron microscope.  The dark objects in figs 1 and 2 are tiny particles of dust.  Fig 3 is a bird's eye view of the record grooves, the darker regions are the top (uncut) surface of the record.

Fig 4 was made by branku62 at vinylengine.com, it shows the profile dimensions of a standard microgrove mono groove, this is what you would find on a modern mono 33 or 45 (stereo grooves are actually cut a bit smaller).  In the diagram 1 mil = 1/1000", which is about 25um.  Microgroove records require a stylus with a 0.7 to 1.0 mil radius tip, the tip makes contact with the groove at E in fig 1, a width of about 1.4 mil.  The total depth of the groove is around 1.1 mil.  These dimensions match up nicely with the dimensions of the electron microscope images.

Fig 5 is from Ron Geesin and Mark Berresford's website, it shows the groove depths of the older 78's.  These records were much more coarse than microgroove records, both the needle and grooves were about 3x as large in every dimension.  Fig 2 shows the groove depth for 78's was somewhere between 2.2 and 3.6 mil.  The stylus radius was around 2.7 mil.
1-40 of 218Next »
chenty says: Mar 11, 2013. 10:55 AM
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 ?

C H
amandaghassaei (author) in reply to chentyMay 20, 2013. 8:55 AM
I've also just posted this:
http://www.instructables.com/id/3D-Printed-Sound-Bites/
amandaghassaei (author) in reply to chentyMar 13, 2013. 10:56 AM
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.
eon997 says: May 17, 2013. 6:24 AM
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!
rm32 says: May 16, 2013. 1:36 PM
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.
christaharris says: May 10, 2013. 7:00 PM
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!
Nicapizza says: May 9, 2013. 1:20 PM
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) in reply to NicapizzaMay 9, 2013. 2:13 PM
I just don't have the resources to do it unfortunately. try the laser cut version maybe?
www.instructables.com/id/Laser-Cut-Record/
sorry I couldn't help more
Nicapizza in reply to amandaghassaeiMay 10, 2013. 7:24 AM
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) in reply to NicapizzaMay 10, 2013. 9:19 AM
awesome! good luck!
fabacademy says: May 9, 2013. 2:25 PM
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.
Romain
amandaghassaei (author) in reply to fabacademyMay 9, 2013. 4:13 PM
what version of python are you running?
eric m says: May 9, 2013. 3:21 PM
Would like to see photo of the 3d grooves.
amandaghassaei (author) in reply to eric mMay 9, 2013. 4:12 PM
we're getting a macro lens in the office soon, maybe I'll post it then.
toxonix says: May 9, 2013. 8:19 AM
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) in reply to toxonixMay 9, 2013. 9:34 AM
wow, 7 min per side. were you spinning them at 45rpm? thanks for the comment!
toxonix in reply to amandaghassaeiMay 9, 2013. 11:23 AM
Nope, 33 1/3!
chenty says: Apr 10, 2013. 11:25 AM
Not to worry, I worked it out :-)
amandaghassaei (author) in reply to chentyMay 7, 2013. 8:18 PM
you might also check out this technique:
http://www.instructables.com/id/Laser-Cut-Record/
chenty says: Apr 8, 2013. 1:59 PM
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.
chenty says: Apr 8, 2013. 9:34 AM
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 ?
cheers
charlie
amandaghassaei (author) in reply to chentyApr 8, 2013. 11:10 AM
I haven't. how big are the files you're exporting from processing?
SG1Oniell says: Apr 3, 2013. 5:34 PM
This. Is. Amazing! Fantastic work! Now I have to convince my Dean to let me use our 3D printer in the college of engineering.
T0BY says: Mar 5, 2013. 9:25 AM
Hello!

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\wavtotext.py", 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?

T
amandaghassaei (author) in reply to T0BYMar 5, 2013. 3:59 PM
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?
T0BY in reply to amandaghassaeiMar 5, 2013. 11:59 PM
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!

Toby
amandaghassaei (author) in reply to T0BYMar 6, 2013. 10:18 AM
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?
T0BY in reply to amandaghassaeiMar 7, 2013. 1:01 AM
I am using the included code. I've been through everything many times and I can't see anything wrong with it. I'm using Python 2.5.4 as you suggested, on Vista. I'm wondering if Vista might be the problem, I'll start again on another computer. Has anyone used this on a Mac?
T0BY in reply to T0BYMar 7, 2013. 2:07 AM
Just tried on my VPS running Windows Server, with a different .wav file, getting the same response. I'll try on my Mac. I must have missed something!
T0BY in reply to T0BYMar 7, 2013. 3:17 AM
Sorry about the multiple posts, I'm very keen to get this working! Same results on my Mac as well. The results I listed earlier are from opening the file within the Python GUI; if I right click 'Open' using the standard Python a window opens and just closes again straight away.
amandaghassaei (author) in reply to T0BYMar 7, 2013. 3:55 AM
Hmmm, so on the Mac you can't even open the python file? Can you upload the wav you're working with? Click on rich editor when you reply, it will give you an option to upload a file.
T0BY in reply to amandaghassaeiMar 8, 2013. 3:09 AM
Sorted it! I made a schoolboy error; I thought the .wav I was using was stereo but it was mono! I've got the text file but now I'm stuck with Processing! I've followed you instructions to the letter, except I can't find a way to import files as you have described so used 'Add file' which seems to add it but when I hit run nothing happens. I've tried versions 2.0b7 and 2.0b8 and I'm using vista. Thank you for your patience!
amandaghassaei (author) in reply to T0BYMar 8, 2013. 7:50 AM
you need to find this line in the procesing sketch:
String filename = "your_file_name_here.txt";
and change your_file_name_here.txt to whatever the name of your txt from python is. this is the same way you should have imported the wav into python.
Watch the video at the very beginning of the instructable, you'll see what I mean.
T0BY in reply to amandaghassaeiMar 12, 2013. 2:53 AM
Thank you, I've got it now!
T0BY in reply to T0BYMar 12, 2013. 3:24 AM
What would be the best way to create a mono record?
amandaghassaei (author) in reply to T0BYMar 13, 2013. 10:55 AM
this script only does mono, it takes the stereo file and converts it to mono, then incorporates it into the record geometry.
amandaghassaei (author) in reply to amandaghassaeiMar 17, 2013. 9:54 AM
hey, just a heads up, I realized I make a mistake in the code "final code" I posted, the rateDivisor variable should be set to 4, not 40.
amandaghassaei (author) in reply to amandaghassaeiMar 17, 2013. 9:57 AM
in case that's confusing, I've uploaded a new version of RecordGenerator.zip
T0BY in reply to amandaghassaeiMar 19, 2013. 6:02 AM
Thank you for all your help.
T0BY in reply to amandaghassaeiMar 19, 2013. 6:02 AM
Thank you for all your help.
1-40 of 218Next »
Pro

Get More Out of Instructables

Already have an Account?

close

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!