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):

1-40 of 212Next »
shwey15 days ago

Hi Amanda, I've run the code through Python 2.5.4 and it is saying there is a syntax error. Here is the code I'm running:

import wave

import math

import struct

bitDepth = 8#target bitDepth

frate = 44100#target frame rate

fileName = "FemmeMono.wav"#file to be imported (change this)

#read file and get data

w = wave.open(fileName, 'r')

numframes = w.getnframes()

frame = w.readframes(numframes)#w.getnframes()

frameInt = map(ord, list(frame))#turn into array

#separate left and right channels and merge bytes

frameOneChannel = [0]*numframes#initialize list of one channel of wave

for i in range(numframes):

frameOneChannel[i] = frameInt[4*i+1]*2**8+frameInt[4*i]#separate channels and store one channel in new list

if frameOneChannel[i] > 2**15:

frameOneChannel[i] = (frameOneChannel[i]-2**16)

elif frameOneChannel[i] == 2**15:

frameOneChannel[i] = 0


frameOneChannel[i] = frameOneChannel[i]

#convert to string

audioStr = ''

for i in range(numframes):

audioStr += str(frameOneChannel[i])

audioStr += ","#separate elements with comma

fileName = fileName[:-3]#remove .wav extension

text_file = open(fileName+"txt", "w")



amandaghassaei (author)  shwey15 days ago

does it say what line?

Thank you for your reply! I fixed the problem, how thick was the wood that you used for the record?
amandaghassaei (author)  shwey6 days ago

doesn't really matter, I used 1/8 to 1/4". as long as it's pretty flat and stays flat it should be ok.

I keep getting unterminated string constant

amandaghassaei (author)  shadowchameleon15 days ago

are you missing a closing double quote on your filename variable?

amandaghassaei (author)  shadowchameleon1 month ago

which line? and what version of processing?

kakashibatosi4 months ago

For the 3d printed version, have you tried printing a blank record and then recording onto it as a baseline for potential audio quality? If so, how did it turn out?

Have you tried any additional materials since? Perhaps wax? I'm looking into replicating old edison wax tubes as a side project. :)

amandaghassaei (author)  kakashibatosi1 month ago

I've thought about that, but the geometry of the streaks that cause the noise is different on every print, so I think you would only add more noise by trying to correct for it. I'm going to do a text in a few weeks milling a record, on brass I think.

Awesome.. Will be great for personal records. :)

wintxan1 month ago

Hi , I thought I was original changing the diamond tool by a Laser one to cut the viny!!!.....I am subscribed to "INSTRUCABLES" and decide to look here for a transducer sound-mechanical.....and I ve found "my" Idea hahaha......Ideas are on air ....ok Congratulations.

However I am involved in laser cutting /gravure of surface for automation in machines , these grooves must be read by an electronic eye , we move to the laser a year ago ( we use tu use Copper and cnc with diamond tool), in our experience you can get great results with engraving Polyimide ( warning: Not Polyamide) ....is Thermoset and stands high temperature , and the cut is very very precise and without the tipycal deformation of thermoplastics at High temperature, , the scrap is just a fine powder that you can remove with a brush, colors in the market are ambar and Black.

peigan1 year ago

im getting an error on python:

Traceback (most recent call last):

File "/Users/eidtecnico/Downloads/LASER RECORDS/LaserCutRecord-master/LaserCutRecord/wavtotext.py", line 26, in <module>

frameOneChannel[i] = frameInt[4*i+1]*2**8+frameInt[4*i]#separate channels and store one channel in new list

TypeError: 'map' object is not subscriptable


amandaghassaei (author)  peigan1 year ago

did you put the audio file in the same folder as the python script?

Hello! I'm also getting the same problem when I run the file in Python 3.4.1. When I run the file in Python 2.7.8 it says

Traceback (most recent call last):

File "/Users/flaviawilson/Desktop/UNIVERSITY/CCDN244 Expanded Photographics/Project Two - Lomo/LaserCutRecord-master/wavtotext.py", line 26, in <module>

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

Do you have any ideas? The audio file is definitely in the same folder as the python script. Sorry to be a bother, I'm new to python but super excited about this instructable! You've done an awesome job, thanks so much :)

FlaviaW FlaviaW11 months ago

Figured out the problem - I'd already converted the audio track to mono, so the python code was getting confused because it was thinking the track was in stereo.

Also the code does only seem to work in 2.5.4, but I might be wrong.

Koos007 FlaviaW2 months ago

Thanks! Stereo Mono issue solved it.

amandaghassaei (author)  FlaviaW11 months ago

cool, yeah I haven't tested other versions.

matthewbay FlaviaW11 months ago

use 2.5.4. I tried using other python releases as well and they didnt work

I am confused on step 10 what do I rename in processing?

if your text file was called mySong.txt then you should change the line to:

String filename = "mySong.txt";

the name of your song, the text file to import.

shieldy4 months ago

hi there - when you say the track length must be 3:10 is this minutes or hours? many thanks! stephen

amandaghassaei (author)  shieldy4 months ago


BixLives32.4 months ago

I am a E.E. with a background in audio -including phonograph lathing. Wow. Now, why did I not think of lasers? Actually, RCA DID think of lasers back in the early 1980s to cut digital laser-disks for video (3.5 mHz bandwidth!). And they worked beautifully (with hi-fi and resolution higher than of USA TV)! Unfortunately VCRs were a good deal cheaper (for consumers), but the RCA disk system had a life in network TV for slow-motion playback in sports. Tape with flying heads had a lot of distortion and jitter (back then), but disks were great.

As for your wonderfully clever wood records...try using African Ebony as it will yield better resolution than maple. However, it is difficult to cut. (It is more like metal than wood!).

Keep the old noodle (needle?) working -you are a clever young person and the world needs such people DESPERATELY. Brains that lead emotion and ego are refreshing. God Bless.

Just like playing Beatle records backwards...this is a GREAT way to screw up your stylus! Just don't use it on a Shure V-15 xVMR! -Please!

waxpress6 months ago

I'm wondering whether you think the quality could be improved with this machine, which is listed as 4000 steps per inch (or 32000 with an upgrade), compared to 1200 with the laser you used.

Is that the main factor that would be involved in improving quality? What other factors would you consider?

amandaghassaei (author)  waxpress4 months ago

not really, the issue is that the width of the cut is pretty large and the finish is not so smooth, so the needle is getting bumped around quite a bit as it plays.

Hi all. I'm a D&T teacher, and wanted to try this to demo to my students.

After completing the record, has anyone tried using different styli- Given that the grooves are larger than LP grooves, I was wondering if certain types of stylus i.e. those for 78's might maximise tracking and sound quality, as opposed to an LP stylus.

any thoughts appreciated

yes I believe a 78 needle would work better, haven't tried though

ceasarkbeirut5 months ago
Hi Amanda, great project, i want to try this with my cnc mill.. Did you hear about anyone that was able to do it, or has everyone been using laser cutters only?
amandaghassaei (author)  ceasarkbeirut4 months ago

that should be possible, I'm curious to hear about how it works! what kind of mill?

Hi all. I've completed my pdfs (thanks for the code!), and am ready to cut. I wanted to check... should the record groove be a cutting or engraving path?

If it is a cutting path, is there a way of separating out the cuts for the inner/ outer dimensions of the record into a separate file (so they can be cut all the way through at higher power)?

As a variation of the acrylic version, I've got a box of old laserdiscs from the 90's I'm happy to sacrifice- they would look really cool! The outer circumference is within 1 or 2 mm, but the spindle hole is larger, so I just need to modify the code to enlarge the hole to the size of the old 45rpm singles, so I can play them with a regular spindle adaptor.

You'll want to cut (vector not raster) the grooves, but turn down the power so they don't get cut all the way through. The paths to cut through are in red - the inner and outer circumference of the record. The innerRadius hole is specified in the code, just look for it a the top of the file. You can also open these files in illustrator, corel draw, inkscape or something similar and edit them by hand if that works better. Please make sure the laserdics are ok to go in the laser before attempting to cut them. They might be too shiny or a weird kind of plastic.

my4pop16 months ago

Very nice liked. I hope you the further development.

Udemyrobert6 months ago

Going to check this on personal record.

Great design, just proves that music can be made on anything


bizsai6 months ago

This one was far better than other tut Thanks to writer.

waxpress6 months ago

The audio quality of some of these actually seems quite listenable, except for the constant background noise -- any thoughts on what would be involved in decreasing the amount of noise? It seems like this might be improved even without increasing bit depth/sampling rate.

interesting, i've got some wood in the back here............oh no its the wrong type.

1-40 of 212Next »