Step 2: Printer Specs

Here at Instructables HQ, we have access to Autodesk's fleet of Objet Connex 500 printers.  These printers use UV light to cure resin layer by layer until a complete model is produced.  They are very different from the fused deposition printers you may have seen or used before (MakerBot, RepRap, Up!, etc), not only can they print out of many types of materials (ranging from flexible rubbery material to hard polymer), but they are also extremely precise.  In the x and y axes they have 600dpi resolution (that's about 42microns), and in the z axis they have a resolution of 16microns.

Before I started printing anything, I used these numbers to calculate the resolution I'd be able to achieve- so I could decide if this project was even worth pursuing any further.  First I wanted to make sure that I would be able to get a good sampling rate on my audio.  Sampling rate is the amount of samples per second in a song.  Usually the sampling rate is 44.1kHz (or 44,100 samples a second).  When the sampling rate drops below about 40kHz the higher frequencies of a song start losing their detail, but depending on the song you can go down to 10kHz sampling rate without too much of a problem.

To calculate the sampling rate of the 3D printed record I used the following relationship:

sampling frequency = (resolution per inch)*(inches per revolution)*(revolutions per second)
in order to maximize the sampling frequency, I want all of these numbers (res/inch, inch/rev, rev/sec) to be as high as possible

First I'll start with revolutions per second.  Record players typically play at two different speeds: 33.3 and 45rpm.  (Some record players also have a 78rpm speed, but this is less common and only used for very old records).  I wanted to use the lower 33.3RPM speed in order to make this more like a real 12" record (45 RPM is only used for 7" records, and 33RPM for the full sized 12") and so that I could fit more audio onto each side of the disc.

revolutions per second = (revolutions per minute)/(seconds per minute)
revolutions per second at 33 rpm = 33.3/60 = 0.55

Next is inches per revolution, this number depends on the circumference of the disk where the needle is hitting it. The largest sized records are 12" in diameter (30cm).  According to the RIAA standards, the outermost groove of a 12" record falls at a radius of 5.75" and the innermost groove falls at about 2.25".  I'll use these numbers to determine the range of sampling rates I can achieve at 33RPM.  The circumference (the distance in inches traveled by the needle during one revolution of the record) is calculated as follows:

inches per revolution = 2*pi*(radius of needle)
max inches per revolution = 2*pi*5.75 =~ 36
min inches per revolution = 2*pi*2.35 =~ 15

I already know that the resolution per inch of the 3D printer is 600 (600 dpi  in the x and y axes).  So combining this all I get:

sampling frequency = (resolution per inch)*(inches per revolution)*(revolutions per second)
max sampling frequency at 33 rpm = 600*36*0.55 =~ 12000 = 12kHz
min sampling frequency at 33 rpm = 600*15*0.55 =~ 4900 = 4.9kHz

This is a pretty good starting point.  If I scale this to 45rpm instead of 33 the sampling rate becomes:

max sampling frequency at 45 rpm = 600*36*0.75 =~ 16000 = 16kHz
min sampling frequency at 45 rpm = 600*15*0.75 =~ 6700 = 6.7kHz

I'll keep this option in mind in case sampling rate becomes an issue.  The other piece of information that I needed was the bit depth I'd be able to achieve with the Objet printer.  Bit depth is the resolution of the audio data.  Most audio these days in 16 bit, meaning each sample can have one of 65536 (2^16) possible values.  8 bit audio has only 256 (2^8) steps of resolution and still sounds pretty close to the original.  Even going down to 3 and 4 bit sounds recognizable.  (I should note here that the music commonly referred to as "8-bit" like the music in early Nintendo games is actually 1 bit resolution, it's called 8 bit because it was first made with 8 bit computers, not with 8 bit resolution).

Since the z axis is the most precise axis on the Objet printer, I wanted to print my record so that the needle vibrates vertically in the groove to trace out the audio wave to maximize my bit depth.  The following equation calculates the vertical distance that the needle will move as it traces the a wave of a given bit depth:

vertical displacement of needle = (2^bit depth)*(precision of z axis)
where the precision of the z axis is 16micron.  I used this to calculate the following table:

bit depth          vertical displacement                steps of resolution

2                             64um                                          4
3                            128um                                         8
4                            256um                                        16

5                            512um                                        32
6                          1.024mm                                      64
7                          2.048mm                                     128
8                          4.096mm                                     256

The bolded rows in the table are the numbers that I wanted to shoot for with this project.  A vertical amplitude of 64-512um is an order of magnitude (~10x) larger than the amplitude of a vinyl record groove, but I felt like I'd probably be able to get away with it and still maintain a reasonable bit depth.
<p>thanks</p>
<p>Phew! Don't give up! I managed to get it to work after some trial and error and re-reading the instructions. Most of my problems came about from using different versions of Windows. I found I could only get it to work on my desktop, not my laptop.</p>
<p>thanks for posting this, lots of good info here.</p>
<p>Hello Amanda!</p><p>I represent a national touring band that wants to talk with you about your 3D printed vinyl concept. They want to release plans for people to print a new song for record store day. I'd love to have a quick chat about how feasible this may be and if you'd ever be interested in working with us? Or perhaps recommending someone to work with as I'm sure you're very busy...All the best to you!</p><p>Vance Anderson<br>vanderson7@me.com</p>
<p>Here's an interesting question to put to you and the community. How could the Processing Code be modified to generate the groove on a cylinder, instead of a flat record. I&quot;m doing a bit of material research for a class and want to try 3D printing working phonograph cylinders. Your record printing seems to be in line with what I&quot;m trying to do, but I'm not sure how to go about generating the file. Any suggestions or insite would be appreciated. </p>
<p>In<br>addition, this 3D printer has a dual extrusion having a closed environment. It includes a sliding door that simplyprovides you withaccess to your prints.<br> <br><a href="https://www.allthat3d.com/cheap-3d-printer/" rel="nofollow">Allthat3D.com/Cheap-3D-Printer/</a></p>
<p>Hello Amanda,</p><p>The vinyl 3D generate with record generator as somme error.</p><p>when i repair the STL with Slic3r there are a probleme of layer. How resolve this probleme and use the STL to gcode.</p><p>Do you have this probleme to print the STL?</p>
<p>Hello Amanda,</p><p>I resolve my probleme and i made it.</p><p>Could you tel me de good parameter for a rmp 33.3</p><p>I have take the following parametter an i have a little disque. 11.8 m x 11.8 m</p><p>rpm = 33.3;//rev per min<br>float secPerMin = 60;//seconds per minute<br>float rateDivisor = 4;//how much we are downsampling by<br>float theta;//angle variable<br>float thetaIter = (samplingRate*secPerMin)/(rateDivisor*rpm);//how many values of theta per cycle<br>float radius;//variable to calculate radius of grooves<br>float diameter = 11.8;//diameter of record in inches<br>float innerHole = 0.286;//diameter of center hole in inches<br>float innerRad = 2.35;//radius of innermost groove in inches<br>float outerRad = 5.75</p><p>many thanks.</p>
<p>draw record and groove geometry Looks awesome</p><p>Thanks in advance</p>
<p>Good project</p><p>I did not find the program or code to do the following (i download the processing 3 softwar):</p><p>- draw record and groove geometry</p><p>- export model in STL format (the link is break)</p><p>could you help me to made your project,</p><p> </p>
https://github.com/amandaghassaei/3DPrintedRecord
<p>Dear Amanda,<br>Thanks for this brillant project.</p><p>Is there any way to use it as sort to get something more extruded, more like a sculpture?</p><p>I'm thinking about these prints made from different songs (http://www.realitat.com/microsonic/portishead.html)</p><p></p>
<p>Good post. I learn some thing tougher on distinct blogs everyday. Most commonly it really is stimulating to learn to read content material from other writers and exercise a specific thing there.</p><p><a href="http://enablerslove.tumblr.com/" rel="nofollow">http://enablerslove.tumblr.com/</a></p>
<p>First off, you've got bloody good taste in music. Thank you for not printing any Beatles tracks . . . that would be fine, but . . .</p><p>Next, I'm shocked you can hear anything at all printing this stuff. It's fascinating. Obviously the higher the frequency, the higher the resolution needed. Prints of older music containing less fidelity will naturally sound closer to what we're used to hearing, due to the lack of upper harmonics. </p><p>At any rate, what I'm really wondering here is, someone needs to write a new slicer, or whatever software, that can route the printer in circles. I clearly hear the &quot;sawing&quot; of the needle traversing the lines that are created by the printhead going at 90&ordm; angles all the time. Shouldn't we be trying to print this stuff in a spiral? Just a thought. The resolution requirements would actually be less if the material were deposited in a spiral. The resolution requirements of printing curves using only right angles is far beyond where we're at for now.</p><p>Thoughts?</p>
<p>This is incredible! I am trying to do this with my own music, however the 3d printer i have access to can only print an area 8in wide. I tried changing the processing code to reflect that and it failed. Any advice what needs to change to shrink the diameter of the 3d model? I really want to try this!</p>
<p>Thats exceptional...</p>
<p>Awesome! If you do a 7&quot; 45, both the resolution could be higher (pickup moves past more groves per time) and the files smaller/easier to generate, right? Experimented with any 45 rpms?</p>
<p>Ah, of course the quality is lower at 7&quot; than at the outer edges of a <br>12&quot; anyway. But still interested in your progress, if you ever did try <br>with RIAA eq, higher RPMs etc.</p>
<p>Ah, of course the quality is lower at 7&quot; than at the outer edges of a 12&quot; anyway. But still interested in your progress, if you ever did try with RIAA eq, higher RPMs etc.</p>
<p>I love learning new and interesting things ...<br> and this web is full of this.<br> Thank you very much for sharing knowledge and continue to do so</p>
Is this possible to make on Ultimaker? Can I make the vinyl 5&quot; and can I make muliple short tracks on it ? Sorry for all the questions but you got me all excited lol
<p>@Amanda Ghassaei</p><p>Hello. Have you ever considered to use GPU computing? That might be helpful for sound processing on my opinion.</p>
<p>Incredible. A little info off topic- as far as I know Kurt Cobain hated Nevermind, the album which contains Smells Like Teen Spirit. He hated this song even more. The reasons he stated: the album sounded too perfect and clean, much unlike Nirvana's first album. He felt they had sold out. I wonder what he would say if he heard how Smess like teen spirit sounds on this record. :D</p>
<p>Learned some cool things in this tutorial, thank you.</p>
<p>This is such a cool program! But I am having trouble running the processing sketch. It says</p><p>&quot;No library found for unlekker.util</p><p>No library found for unlekker.modelbuilder</p><p>No library found for ec.util</p><p>Libraries must be installed in a folder named 'libraries' inside the 'sketchbook' folder.&quot;</p><p>I tried putting the files in a bunch of different folders but non of them seemed to work. Any thoughts?</p>
<p>I have the same trouble! Any way to fix it?</p>
<p>the modelbuilder library isn't in the right folder.</p><p>this project uses the same library, see if following the instructions from the top comment helps you:</p><p>https://www.instructables.com/id/3D-Printed-Photograph/</p>
<p>this is simply amazing! I can't believe it's printed!</p>
<p>Hey guys,</p><p>I had an issue with the python script that kept sending me this error: IndexError: list index out of range</p><p>If you run into the same issue this fixed it:</p><p>Just add this line right below: for i in range(numframes):</p><p> if len(frameInt)&gt;=(4*i+1):</p><p>Cheers,</p><p>Leart</p>
<p>What a creative technology 3D printing. Btw, can I made iPhone with 3D printing machine?</p>
<p>Great</p>
<p>This is incredible. I'm impressed at how far 3D printing has gone. Someday most of our items will be 3d printed, I assume. What do you think?</p>
<p>Hi Amanda, I just sent you an e-mail regarding a film shoot inquiry. Can you please check your gmail and let me know what you think? Thank you~</p>
<p>Amazing!</p>
The problem seems to be in the nature of the printer output design. I think a much simpler solution would be to develop a printer that printed a long line for the audio then use a separate device that rolled it into a record like a really short but very thick jelly roll. I don't know if my idea makes sense but basically you'd be printing and then rolling a line of sound into a record format. I don't know of any type of printer that does this though or if one could even be made. It just seems that printing it all at once as a single object is where the problem with audio quality is coming from.
<p>Thank you for all what they offer</p>
<p>I have just showed this to my cousin and the reaction was ... @#!</p>
<p>deym!</p>
<p>Hi, Amanda, great project. Can you tell me how can i make a sound loop record?</p>
<p>Smells like teen spirit is a timeless song. And that record is so cool. Great job.</p>
<p>Excellent</p>
<p>Hi, this is a really great tutorial but I ran into a problem when trying to find the &quot;wavtotxt&quot; file on Python. Since Python has updated I wondered if it had been removed or possibly i just couldn't find it. I would really like to know how you found it as I was hoping to use this as a part of a project.</p><p>Thanks</p>
<p>Hey Amanda,</p><p>This is a very cool project, with detailed instructions. I work for a Computer Science Dept. at a University, and one of our Media Studies classes would would like to do this with some audio they created, and were very excited when they discovered your instructable. We have an Ultimaker 2. Since the print bed is only 8&quot; I figured it would make more sense to print a 7&quot; - 45. Using your code isn't a problem, but I am having some problems with how the changes affect the audio. I've also be unable to determine what the dpi for the Ultimaker 2 is. I know it's capable of printing 20 micro layers, but I'm not sure what xy values you use to determine it, when it's not published. I've posted the top of my processing file below, and was hoping you could give me an idea of how to modify the audio and groove parameters.</p><p>On another note, the slicing software for the Ultrimaker displays in mm rather then inches (and doesn't convert, which is annoying). If I wanted to do all the calculations in mm would I just need to change the record dimensions at the top and the scaling factor (which you've set to 25400 micros per inch) near the bottom, or is there something I'm missing.</p><p>Thanks so much</p><p>//record parameters</p><p>float diameter = 6.9;//diameter of record in inches</p><p>float innerHole = 0.286;//diameter of center hole in inches</p><p>float innerRad = 2.125;//radius of innermost groove in inches</p><p>float outerRad = 3.31;//radius of outermost groove in inches</p><p>float recordHeight = 0.06;//height of top of record (inches)</p><p>int recordBottom = 0;//height of bottom of record</p><p>//audio parameters</p><p>float samplingRate = 44100;//(44.1khz audio initially)</p><p>float rpm = 45;//rev per min</p><p>float rateDivisor = 4;//how much we are downsampling by</p><p>//groove parameters</p><p>float amplitude = 24;//amplitude of signal (in 16 micron steps)</p><p>float bevel = 0.5;//bevelled groove edge</p><p>float grooveWidth = 2;//in 600dpi pixels</p><p>float depth = 6;//measured in 16 microns steps, depth of tops of wave in groove from uppermost surface of record</p><p>//printer parameters</p><p>float dpi = 600;//objet printer prints at 600 dpi</p><p>float micronsPerLayer = 20;//microns per vertical print layer</p>
<p>Hi,</p><p>the x/y resolution for the Ultimaker is going to be dependent on the thickness of the extruded plastic coming out the nozzle. I suspect an Ultimaker will probably be too low res to get anything interesting to print unfortunately - closer to 60dpi rather than 600. Maybe try the laser cut records?</p><p>https://www.instructables.com/id/Laser-Cut-Record/</p><p>You're right about converting to mm.</p>
Hi Amanda ! This is a really amazing work you made here ! Congratulation ! <br>I tried to make my own 3D model with processing but I have some trouble with step 10. &quot;Change the name of the import file in the Processing sketch to your txt file name: String filename = &quot;your_file_name_here.txt&quot;;&quot; <br> <br>Should we write &quot;String filename = &quot;your_file_name_here.txt&quot;;&quot; in the text editor of Processing or make file&gt;open and open the .txt file ? <br> <br>Thanks in advance for your advices !
cool, glad to hear you're messing with the code! I just changed that line to whatever the name of my file was. so if I had a file called daftpunk.txt, I changed the line to read:<br /><br />String filename = "daftpunk.txt";<br /><br />does that make sense?
<p>Hello Amanda - I understand this Question was answer 2 years ago - but here I am asking the same question. </p><p>I have created the &quot;myfile.txt&quot; file through Python programming. But now trying to &quot;import the data within 'myfile.txt' file&quot; into Processing, and then also where should I be typing &quot;String filename = &quot;myfile.txt&quot;; ... Everytime I run Processing, all I get is a Grey 'java' box appear with nothing happening?</p><p>Any suggestions you may have?</p>