-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.muzak
127 lines (107 loc) · 5.92 KB
/
README.muzak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# *pew* L A S E R M U Z A K *pew*
#
# === What? ===
#
# It converts music in a chicken scratch format to numeric code (g-code) for
# controlling CNC machines. You'll want to edit the settings at the top of
# lasermuzak.rb or your robot might go berzerk and start flinging router bits
# at you. Which reminds me, I will not be held responsible if your robot goes
# berzerk and starts flinging router bits at you. Seriously, this is the kind
# of thing that mankind was probably just not meant to do, like flying and
# buttsex.
#
# === Usage ===
#
# ruby lasermuzak.rb <file_containing.muzak> > output.gcode
#
# Try it on this file!
#
# === Syntax ===
#
# The following commands are used to represent music. They are executed in
# the order they appear. They can be seperated by whitespace, but they don't
# have to be.
#
# :A Axis - switch to axis A, which can be any single letter. Each
# axis has its own track that plays in sync with all other axes.
# Commands are added to the end of the track for the current axis.
# Default: x
#
# lR Length - set default note length to 1/R of a whole note.
# R is a rational number and can be written as a fraction.
# For example, 4 is a quarter note, 8 is an eighth note,
# 16/3 is a dotted eighth note and 6 is a triplet quarter note.
# Default: 4
#
# P[L][!|-] Note - play a note of pitch P, which is any of the following:
#
# c c# d d# e f f# g g# a a# b
#
# L is an optional note length, which overrides the default.
# ! and - play the note staccato and legato, respectively
#
# .[L] Rest - play silence of default length, or length L if provided
#
# oN Octave - set octave to N. Middle C is in octave 4
# Default: 4
#
# > Octave Up - move up one octave
# < Octave Down - move down one octave
#
# tN Tempo - set global tempo to N quarter notes per minute. Tempo
# changes affect all axes.
# Default: 120
#
# sR Set note dynamics to R, which is a rational number
# representing the actual time that notes are held relative
# to their logical length. Valid alues are 0 < R <= 1
# Default: 1
#
# # Comment - everything on the line following the # character
# is ignored. Notice that this is part of the syntax and that
# the Note command also uses the # character.
# And now, an old familiar tune...
# | . . . : . . . : . . . : . . . | . . . : . . . : . . . : . . . | (this line does nothing)
:y l16 t100 # Y axis plays the melody
o4 s7/8 e e . e . c e . g . . . . . . . # the hook
s1 c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. . # unison intro
c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. .
. . g f#f d#. e .<g#a>c .<a>c d . . g f#f d#. e .>c . c c<. . . # counterpoint x2
. . g f#f d#. e .<g#a>c .<a>c d . . d#. . d . . c . . . . . . .
. . g f#f d#. e .<g#a>c .<a>c d . . g f#f d#. e .>c . c c<. . .
. . g f#f d#. e .<g#a>c .<a>c d . . d#. . d . . c . . . . . . .
c<a>. c . c d . e c .<a g . . .>c<a .>c . c d e . . . . . . . . # bridge
c<a>. c . c d . e c .<a g . . .>e e . e . c e . g . . . . . . .
e c .<g . . g#. a>f . f<a . . . # variation
l12 b> a24.24a24.24a g f
l16 e c .<a g . . .
e c .<g . . g#. a>f . f<a . . .
l12 b> f24.24f24.24f e d
l16 c . . . . . . .
s1 c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. . # reprise
c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. .
. . g f#f d#. e .<g#a>c .<a>c d . . g f#f d#. e .>c . c c<. . .
. . g f#f d#. e .<g#a>c .<a>c d . . d#. . d . . c . . . . . . .
c . .<g . . e . # game over
l12 t80 a b a t60 g# a# g# g2
# | . . . : . . . : . . . : . . . | . . . : . . . : . . . : . . . |
:w l16 t100 # W axis plays the bassline (moves the table on my machine)
o2 s7/8 d d . d . d d . g . . . g . . . # the hook
o2 s1 c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. . # unison intro
c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. .
c . . e . . g . f . . a . .>c<. c . . e . . g . . g . g g .<g>. # counterpoint x2
c . . e . . g . f . . a . .>c<. . .<g#. . a#. .>c . . g g .<g>.
c . . e . . g . f . . a . .>c<. c . . e . . g . . g . g g .<g>.
c . . e . . g . f . . a . .>c<. . .<g#. . a#. .>c . . c c .<g>.
o1 l16/3 g# >d# f8 g e c8 <g# >d# f8 g c <g8 # bridge
l4 f f# g a l16 d d . d . d d . g . . .<g>. . .
o2 c . . e . . g . f . . a . .>c<. g . . b . .>d . c . .<g . .<g>. # variation
c . . e . . g . f . . a . .>c<.
l12 <g g g g a b
l16 >c<g . g c . . .
o2 s1 c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. . # reprise
c . .<g . . e . . a . b . a g#. g>c . e a . f g . e . c d<b>. .
c . . e . . g . f . . a . .>c<. c . . e . . g . . g . g g .<g>.
c . . e . . g . f . . a . .>c<. . .<g#. . a#. .>c . . g g .<g>.
o2 c . .<g . . e . # game over
l4 t80 f t60 g# >c2