Skip to content

Python script to "play" a *.SMF/*.mid file on a 3-axis CNC machine

License

Notifications You must be signed in to change notification settings

michthom/MIDI-to-CNC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

THIS PROGRAM COMES WITH NO WARRANTY
PLEASE KEEP AN EYE ON YOUR MACHINE AS THE
GENERATED CODE MAY BRING YOUR BUILD PLATFORM OFF LIMITS

usage: mid2cnc.py [-h] [-infile [INFILE]] [-channels N [N ...]]
                  [-outfile [OUTFILE]]
                  [-machine {cupcake,custom,shapercube,thingomatic,ultimaker}]
                  [-units {imperial,metric}] [-ppu XXX.XX YYY.YY ZZZ.ZZ]
                  [-safemin XXX.XX YYY.YY ZZZ.ZZ]
                  [-safemax XXX.XX YYY.YY ZZZ.ZZ] [-prefix [PRE_FILE]]
                  [-postfix [POST_FILE]] [-axes XYZ] [-verbose]
                  [-transpose Nx Ny Nz]

Utility to process a Standard MIDI File (*.SMF/*.mid) to "play" it on up to 3
axes of a CNC machine.

optional arguments:
  -h, --help            show this help message and exit

Input settings:
  -infile [INFILE], --infile [INFILE]
                        the input MIDI filename (default: ./input.mid)
  -channels N [N ...], --channels N [N ...]
                        list of MIDI channels you want to scan for event data
                        (default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
                        13, 14, 15])
  -outfile [OUTFILE], --outfile [OUTFILE]
                        the output Gcode filename (default: ./output.gcode)

Machine settings:
  -machine {cupcake,custom,shapercube,thingomatic,ultimaker}, --machine {cupcake,custom,shapercube,thingomatic,ultimaker}
                        sets everything up appropriately for predefined
                        machines, or flags use of custom settings. (default:
                        cupcake)

Customised settings:
  -units {imperial,metric}, --units {imperial,metric}
                        set the measurement and feed rate units to your
                        preferred scheme. (default: metric)
  -ppu XXX.XX YYY.YY ZZZ.ZZ, --ppu XXX.XX YYY.YY ZZZ.ZZ
                        set arbitrary pulses-per-unit (ppu) for each of the X,
                        Y and Z axes (default: None)
  -safemin XXX.XX YYY.YY ZZZ.ZZ, --safemin XXX.XX YYY.YY ZZZ.ZZ
                        set minimum edge of the safe envelope for each of the
                        X, Y and Z axes (default: None)
  -safemax XXX.XX YYY.YY ZZZ.ZZ, --safemax XXX.XX YYY.YY ZZZ.ZZ
                        set maximum edge of the safe envelope for each of the
                        X, Y and Z axes (default: None)
  -prefix [PRE_FILE], --prefix [PRE_FILE]
                        A file containing Gcode to set your machine to a known
                        state before the MIDI is played e.g. homing the axes
                        if supported or required. (default: None)
  -postfix [POST_FILE], --postfix [POST_FILE]
                        A file containing Gcode to return your machine to a
                        known state after the MIDI is played e.g. homing the
                        axes if supported or required. (default: None)

Output settings:
  -axes XYZ, --axes XYZ
                        ordered list of the axes you wish to "play" the MIDI
                        data on. e.g. "X", "ZY", "YZX" (default: XYZ)
  -transpose Nx Ny Nz, --transpose Nx Ny Nz
                        Transposes each axis N keys up/down the scale, e.g. 12 0 0 will raise the X axis one octave.
  -verbose, --verbose   print verbose output to the terminal (default: False)

Midiparser.py is old and cludgy and fail to process some files. You may want to use python-midi by just providing -pymidi option,
but then you would need to install it manually from https://github.com/vishnubob/python-midi,

=================================================================
Please join our Mailinglist at:
http://groups.google.com/group/makerbotmusic

and post your working tunes to the MakerBot Wiki:
http://wiki.makerbot.com/makerbot-music
=================================================================

Have fun and set all axes to MUSICCCCC!

About

Python script to "play" a *.SMF/*.mid file on a 3-axis CNC machine

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages