Step 3: First Tests

First I prepared some test files to print to get an idea of what is possible with the printer and optimize the dimensions of the grooves.  These record files have circular grooves on them containing sine waves of various frequencies, amplitudes, groove depths, groove widths, and beveled groove edges.  (When I say that the groove "contained" a sine wave, I mean the bottom of the groves moves up and down in a sinusoidal pattern around the record).  I generated all of these files in Processing using the ModelBuilder library to export straight to STL.


My first test record had 72 grooves on it, screen shots of the model are shown in figs 2 through 6  I tested two frequencies of sine waves:

1000 cycles per revolution = 555Hz at 33RPM
500 cycles per revolution = 277Hz at 33RPM

I tested a few different amplitudes, depths, and groove widths for these frequencies and gave each groove a constant bevel size of 2px on each side (you can see in fig 5 how the edges of the groove flare outward).  I printed the record in Objet's Vero Clear material, this material is a fairly hard, clear resin.  I printed the file with the "smooth" setting to prevent any support material from being deposited in the grooves.  Unfortunately, when I was ready to make this print we were having some problems with power in our shop, so I had to use another Objet machine that was not set up for high resolution printing; the best I could do was 300DPI X/Y resolution with 30um Z steps.  This is half the resolution that each of these axes is capable of, meaning the print came out at (1/2)3, or 1/8th resolution overall.  The results are shown in the video below (the grooves were not deep enough to keep the needle inside, so I had to hold in it place with my hand).  The record was also a little big for my record player, I decreased the diameter of my STL file to 11.8" in later versions.

In this video you can hear a periodic frequency sweep on top of the steady sine wave (best heard w headphones).  This sweeping sound is caused by the needle moving over the thousands of tiny parallel bumps in the print caused by adjacent print-heads on the Objet machine.  This noise is unavoidable, but increasing the strength of the signal will help to make it less noticeable.

The Processing sketch that generated this record is given below:


In my next test I made a record with 108 grooves, still sine waves, but this time I made the grooves deeper, increase the bevel of each groove to equal half the amplitude of the sine wave, and tried out three different frequencies: 555hz, 277hz, and 139hz (1000, 500, and 250 cycles per revolution at 33.3rpm).  I also tested different amplitudes (4, 8 and 16 steps), groove depths (2, and 3 steps below the top of the record), and groove widths (1, 2 and 3 pixels).  Since our shop came back online, I switched printers and started printing with Objet's Vero White material, which is similar to Vero Clear in texture, but (as you might image) is a translucent white color.  This time I was finally able to print with the full 16 micron and 600 dpi resolution of the printer.  Here is a video of the results:


In my third test I increased the resolution of my stl file to test out some higher frequency sine waves.  I used 22000 points per revolution to draw out the sine waves (as opposed to 10000 in my previous tests), this puts me at about the max resolution I can get with 600dpi (calculated in the last step).  I tested three frequencies: 1110hz, 832hz, and 694hz (2000, 1500, and 1250 cycles per revolution at 33.3rpm).  I also tested different amplitudes (12 and 16 steps) and groove widths (2 and 3 px).  Here is the video:


At the end of all these tests I learned a few things about 3d printing records with the Objet:

Groove Depth min of 48um below top of record - I found that grooves that kept the waveform at a minimum of 48um (or 3 16 micron steps) below the top of the record kept the needle in place while being played.  This was true for all the frequencies I tested.

Groove Width 2px - At lower frequencies I found that the 2px grooves were much less noisy than the 1px, but I didn't hear too much of a difference between 2 and 3px.  However, when I tested again with the higher frequencies (2000 cycles/rev) I could hear much more noise on the 3px groove than the 2px.

Frequency Range - at 22000 points per revolution, I easily achieved the upper limit of the human vocal range (about 1.1kHz).  Theoretically I should be able to reproduce frequencies equal to half my sampling rate.  With a sampling rate of 12kHz (calculated in the last step), the highest frequency I can theoretically achieve is 6kHz.  I suspect that the movement of the liquid resin during the curing process will prevent me from actually achieving these frequencies, but if I can just get into the 2kHz range it will still sound reasonably good.  Based on the tests I've run so far, I think this is possible.

Dimensions - Although it seems like a 12" record should measure 12" in diameter, I found that printing at 12" made the record slightly too large for my record player.  I decreased the diameter down to 11.8" and it worked great.

Max file size of ~300MB - Although Processing is capable of producing much larger files, the Objet Software that runs the printers seems to only handle about 300MB of data at a time.   It's possible that increased RAM might bring this up to 500mb, but this still does not give me a lot of room to work with.  Although this is plenty for normal CAD purposes, I found out that I would have to be very efficient with the way I packed data onto the STL for the final version of my Processing sketch.  One problem with my current sketch is that is has a constant angular sampling rate, this means that the same amount of data is used to describe a groove on the outer edge of the record and a groove near the center of the record.  Since the groove at the center of the record is much smaller it would a higher resolution than the outer groove, unfortunately, this extra precision goes to waste because the printer has constant DPI across the entire surface of the record.  Eventually, I hope to decrease the angular sampling rate of the inner grooves to save storage space and pack as much audio into the STL file as possible.
<p>I received an email today from someone asking me about how far I managed to go with replicating Amanda's process, so I thought I'd share my experience in more details. </p><p>Note that this experience below occurred in December 2014.</p><p>My goal was to try print a 3mn song on 1 side of a 12 inches vinyl and see what is the best quality and output I could achieve, noticing that it has been already more than 2 years since Amanda did her project, so I assumed that the technology would have progressed rapidly.</p><p>Amanda's instructions and provided programs help you generate the binary file, then create a 3D model (STL file) for a one sided vinyl with that song on it (eq'd specifically for vinyl previously as per the video). At this stage, I don't know if you can even generate a two sided vinyl STL model but this didn't matter to me for that experience. </p><p>I downsampled the file to 12hz as per her initial instructions and default settings. The outcome was a file that was 700MB. Generating this file alone requires HUGE amount of processing power. Note that I'm using a Mac Book Pro with 16GB of ram, solid state drive and a very powerful processor. It was nevertheless a painful process for the computer to generate the file. See attached an image of the model. You'll note that the entire surface is not covered, which I couldn't quite figure out why. I assumed that if it did take the entire width, the grooves would be a be bigger and therefore more tolerant to the level of precision currently available via 3D printing.</p><p>I then tried changing the downsampling rate to something higher (I started at 24hz), so I could get to a quality closer to what I'm after (i.e. that can be released). It looked something like this:</p><p>Unfortunately, the file couldn't even get generated. My computer would hang permanently. That wasn't even trying 44hz which is what I was ideally after...</p><p>To note: the output STL file had dimensions for X and Y initially rendering in mm instead of inches for some reason so something to keep an eye out on if you try that technique using Amanda's program (unless it had to do with the program I used to render the shape - I then had to update the dimensions manually to the equivalent in mm).</p><p>I stuck to my 12hz downsampling rate then and contacted the most advanced 3D printing company in Melbourne I could find (3Dsystems.com). They had by very far the best machines I could find on the market for once off printing. I figured this would provide me already with a significant improvement of quality from what Amanda had produced.</p><p>The machine used was SLA Flex Printer with XHD 0.050 mm layers. Resolutions were uniform on all 3 axis, XYZ with all parts having an accuracy of 0.001 &ndash; 0.002 inch per inch of part dimension. This was by far the best printer I could find. The material used was 'Accura Xtreme'.</p><p>Unfortunately, the machine and vinyl would break before it could be fully printed, the file being far too large. Files are generraly a few dozens MB at most, and Amanda herself mentions that 300MB is already pushing it. </p><p>Doing some further research, I then thought that the model may be using a lot of polygons which are not required to print all the details. I therefore asked Amanda if she thought we could use a technique called decimation to remove useless polygons and therefore make the file lighter, but she confirmed that the program she created was pretty efficient. Considering how precise vinyls are in terms of geometry, this makes perfect sense. <br></p><div>Note that the price quoted to me was about US$250 for 1 copy (price goes down obviously as you order more). Copy of the quote attached.</div><div><p>As of today, there therefore doesn't seem to be a way to print even one single song in a decent quality. The song I used was just below 3mn and in mp3 format.</p><p>I'm not sure whether there are elements I could have tweaked to change the output (type of printer or material used, settings in the file), but it seemed that as of early 2015, we were still a long way to being able to 3D print vinyls from the comfort of our home, or as an alternative manufacturing process to the vinyl plants (which was the main goal of my investigation here). </p><p>If anyone has tried similar experiences and maybe had better outcomes, I'd love to hear about it.</p><p>Cheers, Charly</p></div>
<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>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>http://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>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>
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>This is really impressive. Can someone make 10 of these for me? It's for an exclusive project with a world renouned artist, using an unreleased song. Let me know and thanks in advance!</p>
<p>This is so awesome ! I love innovative projects like this one.</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>Very Good.....</p>
<p>I like your work </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>http://www.instructables.com/id/Laser-Cut-Record/</p><p>You're right about converting to mm.</p>
<p>Very nice liked. I hope you the further development.</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>
<p>do you see processing printing something like "drawing groove 1 of 100"? sometimes it takes a while to process, let it sit for a few minutes.</p>
<p>I dont unfortunately. I have 16Gb of RAM to</p><p>I dragged and dropped the &quot;mytext.txt&quot; file into the Processing window.</p><p>Then it says down the bottom - &quot;One file added to sketch&quot;</p><p>Then I typed - String filename = &quot;myfile.text&quot;; into the White section of the Processing window</p><p>And hit Run.</p><p>All I see is a small grey Java Window, and I can then even edit the text in the Processing window, almost like it has stopped running.</p>
<p>This is the coolest shit ever! bravo</p>
<p>Dear Amanda, I'm sorry for my stupid answer...<br>I understand all the steps... <br>But I did understand how I can print the vinyl... in a generic 3D print shop?<br>Which file I have to bringh there?<br>Thank you so much.</p>
<p>Very nice liked. I hope you the further development.</p>
<p>It&rsquo;s really cool to kind of push the <br>technology and see what you can get out of it. I&rsquo;ve got <br> a bunch more that I want to do.</p><p>Thanks...</p>
<p>Hello Amanda!</p><p>I represent a band that wants to talk with you about your 3D printed vinyl concept. They want to release plans for people to print their new album. 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? All the best to you.</p><p>Vance Anderson<br>vanderson7@me.com</p>
<p>Wow I never thought you could do this with laser printing. And you're right, the songs are easily recognisable. This is pure genius. The sound from your printed record actually sounds like an old school record. I mean you can actually create a record nowadays and you don't even need the same material as that of classic records! I'm truly impressed.</p>
<p>3D printing is amazing. It's the first time I see something like this. </p>
<p>I'm not sure that i understand this fully, but well done anyway</p>
<p>Just so i've got this right, we will be able to print our own vinyl's and add our own music to that vinyl? if that's right, then that is amazing!</p>
<p>Yes <a href="http://www.instructables.com/member/RobertGoldring/" rel="nofollow">RobertGoldring</a>, you are correct printing our own vinyl's, so exciting!</p>
<p>Hi Amanda, thanks a lot for this great tutorial and for sharing all the amazing experimental work you're doing. I've been getting my head around it all day and I'm hopefully very close to output the STL file to try 3D printing it next. I'm curious to see what audio quality/resolution 3D printers can output these days, in comparison to the time where you made your demos.</p><p>I was looking at the video and noticed that in Audacity, you invert the curve in the equalisation effect and then apply a low pass filter. However, none of these steps seem to be mentioned in point 7. </p><p>Are you able to explain what these steps are for and whether they are required?</p><p>Thanks in advance! Charly</p>
<p>yeah that was the riaa eq step, I made that video after I published this instructable. You can find more info about that step in this project:</p><p><a href="http://www.instructables.com/id/Laser-Cut-Record/">http://www.instructables.com/id/Laser-Cut-Record/</a></p><p>step 7</p>
<p>3D printing is just round the corner, this will be a bigger hit to the high street.</p>
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 &quot;pre-de-emphasized&quot; signal and hopefully the result is increased fidelity.
<p>She actually applies the RIAA (as well as invert the curve and apply a low pass filter) in the video but just doesn't mention it in step 7, and coincidentally I asked her why she was doing this just a few minutes ago, so the en</p>

About This Instructable


750 favorites


Bio: I'm a grad student at the Center for Bits and Atoms at MIT Media Lab. Before that I worked at Instructables, writing code for ... More »
More by amandaghassaei: OTCA Metapixel - Conway's Game of Life "9 Degrees of Freedom" IMU Twitter Controlled Pet Feeder
Add instructable to: