loading

A few months back, I wrote about how I used a 3D printer to transform any mp3 into a physical record.  Though all the documentation for that project is available here, and the 3D models could potentially be printed through an online fabrication service, I knew that the barrier to entry for normal people interested in trying out the process themselves was prohibitively high.  With this project I wanted to try to extend the idea of digitally fabricated records to use relatively common and affordable machines and materials so that (hopefully) more people can participate, experiment, and actually use all this documentation I've been writing.

These records were cut on an Epilog 120 Watt Legend EXT to a theoretical precision of 1200dpi (the kerf of the cut and some tricks I used to avoid crashing the laser cutter dropped the actual precision down by ~1/6).  The audio on the records has a bit depth between 4-5 (typical mp3 audio is 16 bit) and a sampling rate up to about 4.5kHz (mp3 is 44.1kHz).  So far I've successfully cut audio on wood (figs 1-2), acrylic (figs 3-4), and paper (figs 5-6), and I'm sure there are many more materials that would work.  I wrote the Processing sketch that generates the record cutting paths so that it can be modified for any song, material, cutting machine, record size, and turntable speed (skip ahead to download the code and learn how to make your own records).

You should also note that in this Instructable I'll demonstrate specifically how I used a laser cutter for this process, but the cutting files I'm using are standard vector graphics in a PDF format, so they can be extended to many other digital fabrication tools. For example, I'm curious to see if it's possible to use a CNC mill or a CNC razor blade paper cutter with my cutting files (a group of people were able to cut out some sine waves on paper using a Cameo in this Instructable).

Below are some of my final results, read on to see how they were made and how you can make your own.

Joy Division - Love Will Tear Us Apart on clear acrylic (download vector files):


Radiohead - Idioteque on wood (download vector files):


The Velvet Underground and Nico - Femme Fatale on maple (download vector files):

Step 1: How Does a Record Work?

I've explained a bit about how a record works and the scale of vinyl microgrooves in my 3d printed record project.  The main difference between these laser cut records and my 3d printed records is the axis that the grooves are cut on.  Since I can't control the power of the laser while it is cutting a vector path, the laser cut records are cut laterally on the surface of the material.  This means that the needle only vibrates in the plane parallel to platter of the turntable.  The 3d printed records are "cut" vertically, meaning the needle vibrates in the plane perpendicular to the platter.  I chose to modulate the grooves vertically for the 3d printed records because the vertical axis is the most precise axis on the machine (resolution of 16 microns).

Stereo (2 channel) vinyl records are cut both vertically and laterally, this way it's possible for two isolated channels of audio to fit into one groove.  Mono vinyls are cut laterally only, this is because the vertical cuts can become distorted, especially if you try to increase the amplitude of your waveform to increase the dynamic range of the sound.  Although I didn't really have a choice in the matter, it's better to to cut a mono groove laterally.

To give you an idea of the size of the grooves on a modern record, check out the image above from Chris Supranowitz, a researcher at The Institute of Optics at the University of Rochester.  This is a close up image of a vinyl record, taken with an electron microscope.  The dark objects in the grooves are tiny particles of dust.  The laser cutter cannot make such precise cuts because the width of the beam is too large, so the grooves on my records are about 1-2 orders of magnitude larger in every dimension than these grooves.
<p>hi amanda, hi community</p><p>attached you see two screenshots from the same .pdf. the more complete looking one is preview/acrobat the smaller one comes from illustrator. anybody? solutions or explainations? </p><p>hugs</p><p>cc</p>
<p>Hey,</p><p>Just wanted to pin this comment to the top since lots of people are running into it. the problem is that illustrator doesn't like to import so much data at once, so it cuts it off. You need to break your data into smaller chunks to import.</p><p>If you look at the processing code:</p><p><a href="https://github.com/amandaghassaei/LaserCutRecord/blob/master/LaserCutRecord.pde">https://github.com/amandaghassaei/LaserCutRecord/b...</a></p><p>there's a variable called </p><p><strong>numGroovesPerFile</strong></p><p>lower this number so that you export more files with fewer grooves on each (maybe 7 is a good place to start, but you may need to go lower). Once you make the chunks of data small enough, you will be able to import the files into illustrator without loosing anything.</p><p>Hope that helps!</p>
hi amanda, <br><br>thanks a lot. i reuced the numgroovesperfile down to 5. it worked now. couldn&acute;t believe it. thanks for pointing out the importance of it.<br><br>will post the results here soon.
<p>Hey Community,</p><p>I've done old school Edison style record carving, but would love to do this for an upcoming project. Would love to pay someone to help me out. In the bay area.</p><p>Thanks, </p><p>Tim</p>
<p>Hi Amanda, </p><p>can you think is it possible to cut a full album on a face ?</p>
no, the spacing of the grooves is too large to cut more than a few min.
<p>How do I open the processing sketch??</p>
<p>hi amanda, hi community</p><p>I'm having issues w/ getting the laser cutter to recognize all the .pdfs - It only cuts the final .pdf (the one w/ the cut lines), which prints the groves great. The laser cutter recognizes the files, but when I hit 'go' on the cutter, it immediately says 'Done'. As read in previous posts, I've tried the following to no avail:</p><p>- I've restarted the laser cutter and resent.<br>- I've changed the 'minDist' to prevent cutter stall<br>- I've included the cut lines (inner circle/outer circle) in with other grove .pdfs</p><p>Can't seem to figure out why it cuts the groves in the last file, but not any other ones. Any thoughts?</p><p>Below is a pic of the final file where it included the groves - no other grove files will cut.</p>
<p>really weird. Maybe it has something to do with your print settings on certain colors? or maybe the line thickness? what kind of laser are you using?</p>
<p>line thickness is .001 (hairline). i've tried changing the color settings (both in the print output and changing the color of the vector paths), and experimented w/ all the available color variables one by one. I resorted to running a new set of .pdfs and keep getting the same thing - it prints only the final .pdf. (I am printing them individually. I've included the final .pdf (#13 - with the cut lines) along with a couple of other .pdfs (the ones that won't print). I'm using a Epilog Laser Mini 30w. it is weird that one file will print, but not the others.</p>
<p>ok - i think i have this figured out. !!! i set the 'numGroovesPerFile' down to 5 - It puts out 27 files instead of 13. It printed the last file (of course), but it also printed every file under 100k. It looks like ~100k is my cutoff point (my inner rings are 89k, my outer rings are 129k - 169k). My outer rings won't print, but inner rings print fine. The reason that my final file was the only one to print on previous tests, is that it was the only file under 100k. I'm going to keep experimenting. Thanks, Amanda!!!</p>
<p>Hi all,<br><br>I have a 30 sec. ~2 mb wav from Audacity.<br>I get this error in phyton:<br></p><p>Traceback (most recent call last):</p><p> File &quot;wavtotext.py&quot;, line 26, in &lt;module&gt;</p><p> frameOneChannel[i] = frameInt[4*i+1]*2**8+frameInt[4*i]#separate channels an</p><p>d store one channel in new list</p><p>IndexError: list index out of range</p><p><br>What can be wrong?</p>
<p>Problem solved. I used a mono wav file. Converted stereo and it worked.</p>
<p>Hi Amanda! I don't know anything about code and I'm getting this error in the last step in processing (sketch&gt;run).... any ideas??</p><p>Thanks!!!</p>
<p>Jordan, did you solve your problem? Because I'm getting the same error message. </p>
No I haven't.... The best I can figure it out is that there's never a definition for the value &quot;section&quot;. I'm not really sure how to fix it... I'm fairly sure I had followed the directions well up until this point.
<p>ok, I took a look at it, I think you guys are using a newer version of processing. It's not happy that variables are used in the following line:</p><p>size(int(cutterWidth*scaleNum),int(cutterHeight*scaleNum));</p><p>an easy fix is to just set the width and height as static numbers. So for example if are using:</p><p>int cutterWidth = 100;//width of laser cutter bed in inches </p><p>int cutterHeight = 50;//height of laser cutter bed in inches</p><p>float scaleNum = 72.0;//scale factor of vectors (default 72 dpi)</p><p>then </p><p>cutterWidth*scaleNum = 100*72 = 7200</p><p>and </p><p>cutterHeight*scaleNum = 50*72 = 3600</p><p>so you should replace the size() line with:</p><p>size(7200,3600);</p><p>Also Michael, I don't think you are using the newest version of the code, find it here:</p><p>https://github.com/amandaghassaei/LaserCutRecord</p>
<p>Thanks, Amanda!</p><p>I'm using the newest version of the code, and used your suggested fix of using static numbers and it worked!!</p><p>I do have a new problem, though. The sketch runs and produces a .pdf w/ the lines - but the .pdf closes immediately (opens for not quite a full second). I've restarted the computer to clear out any bad juju, but it still happens. Any thoughts on that one?</p><p>I'm using Processing 3.0.1 - newest one updated in October. Is there a legacy version that would work better?</p>
<p>Hi Amanda, Nevermind on the .pdf questions above. I found them all in the LaserCutRecord folder.</p><p>Now off to playing w/ lasers!!</p><p>Thanks so much!</p>
<p>great!</p>
<p>not sure, is your txt file in the right folder? check the lines that use the size() function, the error is happening on one of those lines.</p>
<p>Here's the txt file i created!</p>
<p>I suppose it could be in the wrong folder- when I open the file called &quot;LaserCutRecord.pde&quot; it gives me this error asking me to create a folder. When I first unzip the file the structure looks like this, but this is where I've copied files once it creates the folder. </p>
<p>Hi Amanda - I'm super excited about this code, but I'm running into the same error message as Jordan above. My .wav, .txt., .pde files are all in the same folder. The error is in line 66. Any thoughts? (my image is above in the reply to Jordan)</p>
<p>This is an amazing project, cant wait to try it. I cant find any mention of it, but how long does it take to laser one record?</p>
<p>1.5hrs, this could be sped up a lot, but the laser cutter gets stuck on the high density of the points in these paths unfortunately.</p>
<p>Hi Amanda and community,<br>I study architecture and I'm doing a project at the University of Technology in Graz, Austria (the one without kangaroos :P ). I just printed it out as several .pdf files, can't wait to try it out on lasercutter tomorrow.<br>Thank you a lot for the codes and instructions</p>
<p>Hi Amanda, (in regards to the laser cut record project) I'm having some trouble because when I send the files to be cut on the laser cutter, the laser cutter messes up. Is there any reason why this is happening?</p><p>Thank you.</p><p>Kind regards</p>
You'll have to be a little more specific, what does "messes up" mean? Can you upload a photo?
Sure, sorry I'll attach the photos. I did two test runs with the velvet underground song, the first one (black record) was fine up until the end when stopped following the vector paths. The second test was with the white-ish material, the laser cutter didn't even cut the circle right from the start. Pictures are attached :)
<p>did you end up getting it to work?</p>
<p>Yes I got it working! Thank you so much, I look forward to more instructables from you!</p>
Sure, sorry heres two test ones I ran. The first one came out the way it should until it got to the end and thats the black record. The white-ish record just messed up from the start, it wouldn't cut the circle properly.
<p>wow I've never seen this before. what model is the lase cutter? Maybe try increasing the number </p><p>minDist </p><p>to 8 or 9 and see if that does anything. It's at the top of this file:</p><p><a href="https://github.com/amandaghassaei/LaserCutRecord/blob/master/LaserCutRecord.pde">https://github.com/amandaghassaei/LaserCutRecord/b...</a></p><p>that will space out individual points on the vector path a little more. I found that if they were too close together my laser would just stop. The behavior you're seeing is very strange, but maybe related.</p>
<p>I got it to work!!! (digitally anyways)</p><p>This is amazing. Now my laser cutter just has to be delivered...</p><p>Here are the first 3 min of &quot;The General&quot; by Dispatch</p>
<p>cool, hope it works!</p>
I'm having a bit of an issue running the processing sketch. <br> <br>Processing crashes when I load the split strings into this array. My .txt file is 43mb. Which seems gigantic for a plain text. But at 44100 x 180~ sec. I guess that makes some sense. <br> <br>it's this line that causes the sketch to run out of memory. I've changed my processing prefs to allocate 512MB but it still crashes. I suppose I'm confused, or not doing something right, as no one else has posted this issue... <br> <br> float audioData[] = float(split(rawDataString,',')); //separated by commas <br> <br>any thoughts?
<p>Having the same issue with roughly the same size txt file, the original song was 3.10 minutes long. Can anyone give me any tips on what i'm doing wrong?</p>
<p>can you post the text file? click on "add images" when you leave a comment, it will let you upload a file.</p>
<p>interesting, I haven't seen that one before. can you upload your txt file? (use the "add images" button)</p>
<p>Does anyone have any suggestions for making a straight line (instead of a circular record shape) with this? </p>
<p>Just put in an empty sound file, that should work. The sound waves are made by the &quot;wiggles&quot; so anything with no sound would just be a regular curve.</p>
<p>Oh, no, sorry for the confusion - I meant, I'd like to take the audio and plot it along a straight line, rather than curved as a record..Is it possible to do that with this Processing code? I'm not very good with equations..</p>
<p>put this code and the attached files in the same folder and run it in processing. You'll probably want to play around with xScale depending on how fast you want to read the audio.</p><p>import processing.pdf.*;<br><br>//parameters<br>String filename = "casbah.txt";//generate a txt file of your waveform using python wav to txt, and copy the file name here<br>float samplingRate = 44100;//sampling rate of incoming audio<br>float dpi = 1200.0;//dpi of cutter<br>int cutterWidth = 100;//width of laser cutter bed in inches<br>int cutterHeight = 5;//height of laser cutter bed in inches<br>float amplitude = 5.0;//in pixels<br><br>float xScale = 1.0;//in pixels<br><br>void setup(){<br> <br> float[] songData = processAudioData();<br> <br> float scaleNum = 72.0;//scale factor of vectors (default 72 dpi)<br> amplitude = amplitude/dpi*scaleNum;<br> xScale = xScale/dpi*scaleNum;<br> <br> size(int(cutterWidth*scaleNum),int(cutterHeight*scaleNum));<br> <br> <br> //change extension of file name<br> int dotPos = filename.lastIndexOf(".");<br> if (dotPos &gt; 0)<br> filename = filename.substring(0, dotPos);<br> <br> <br> float x = 0;<br> <br> beginRecord(PDF, filename + ".pdf");//save as PDF<br> background(255);//white background<br> noFill();//don't fill loops<br> strokeWeight(0.001);//hairline width<br> <br> beginShape();<br> int i;<br> for (i=0;i&lt;songData.length;i++){<br> x = i*xScale;<br> if (x &gt; cutterWidth*scaleNum) break;<br> vertex(x,cutterHeight/2*scaleNum + amplitude*songData[i]);<br> }<br> <br> println("sample " + i + " of " + songData.length);<br> println(i/float(songData.length)*songData.length/samplingRate + " seconds of " + songData.length/samplingRate + " fit on this pdf");<br> <br> endShape();<br> endRecord();<br> <br> exit();<br> <br> //tell me when it's over<br> println("Finished.");<br><br>}<br><br>float[] processAudioData(){<br> <br> //get data out of txt file<br> String rawData[] = loadStrings(filename);<br> String rawDataString = rawData[0];<br> float audioData[] = float(split(rawDataString,','));//separated by commas<br> <br> //normalize audio data to given bitdepth<br> //first find max val<br> float maxval = 0;<br> for(int i=0;i&lt;audioData.length;i++){<br> if (abs(audioData[i])&gt;maxval){<br> maxval = abs(audioData[i]);<br> }<br> }<br> //normalize amplitude to max val<br> for(int i=0;i&lt;audioData.length;i++){<br> audioData[i]*=amplitude/maxval;<br> }<br> <br> return audioData;<br>}</p>
<p>just added it to the repo too:</p><p>https://github.com/amandaghassaei/LaserCutRecord/blob/master/LinearRecord.pde</p>
<p>Oh Wait did you mean a line that isn't curved at all? This guy printed this with a laser engraver, so if you don't have a laser engraver, you can't cut or etch anything. A laser printer can easily engrave a straight line, usually all you have to do is draw a straight line on a computer, adjust the print settings and print it to the engraver</p>
<p>No, I mean I'd like to take the audio signal modulation and print it in consecutive lines, rather than curving the grooves around a record shaped disc.I have a laser engraver. </p>
<p>Like this - except spec'd for record player groove size. </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>hi amanda!<br><br>i have the same problem with the pdf files not matching properly. The preview and the acrobat reader/pro show me the exact turns and geometries. but when opening in an vector editing program such as illustrator or rhino a certain part doesn&acute;t show up. so the bit&acute;s don&acute;t fit. can you tell why?! and what to do? thanks a lot and much respect for this incredibly easy and understable manual! </p>

About This Instructable

180,268 views

496 favorites

License:

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: