zgomot 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +326 -1
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/zgomot.gemspec +124 -0
- metadata +7 -22
data/README.rdoc
CHANGED
@@ -1,6 +1,331 @@
|
|
1
1
|
= zgomot
|
2
2
|
|
3
|
-
|
3
|
+
zgomot is a DSL for composing MIDI music. It does not do synthesis so to create sound it requires digital audio software such as Apple's Garage Band, Logic or Abelton Live. A program that plays a simple tune only requires a few lines of code.
|
4
|
+
|
5
|
+
# mytune.rb
|
6
|
+
require 'rubygems'
|
7
|
+
require 'zgomot'
|
8
|
+
|
9
|
+
# define a tune pattern with 5 notes and a rest
|
10
|
+
tune = [n([:C,5]), n(:B), n(:R), n(:G), n(:C,:l=>2), n([:E,5],:l=>2)]
|
11
|
+
|
12
|
+
# define a MIDI stream writing to channel 0 which plays the pattern 3 times
|
13
|
+
str 'notes', tune, :lim=>3 do |pattern|
|
14
|
+
ch << pattern
|
15
|
+
end
|
16
|
+
|
17
|
+
# write the MIDI stream
|
18
|
+
play
|
19
|
+
|
20
|
+
Now, specify beats per minute, time signature and resolution in <tt>zgomot.yml</tt>.
|
21
|
+
|
22
|
+
time_signature: 4/4
|
23
|
+
beats_per_minute: 120
|
24
|
+
resolution: 1/64
|
25
|
+
|
26
|
+
Install the gem,
|
27
|
+
|
28
|
+
sudo gem install zgomot
|
29
|
+
|
30
|
+
Run the program to play the tune,
|
31
|
+
|
32
|
+
ruby mytune.rb
|
33
|
+
|
34
|
+
A simple object model is defined by zgomot that makes it possible to write iterative transformations on note patterns within <tt>str</tt> blocks, which generate MIDI data streams. In the following details of the object model and supported transformations will be described.
|
35
|
+
|
36
|
+
== OS X MIDI Device Driver
|
37
|
+
|
38
|
+
For OS X the IAC Driver must be enabled for programs to communicate with the digital audio software used to render the MIDI generated by programs. To enable the IAC Driver open <em>Audio MIDI Setup</em>. Under the <em>Window</em> menu item select <em>Show MIDI Window</em>. Find the <em>IAC Driver</em>, double click it and be sure <em>Device is online</em> is selected. Also, when the when first activated be sure that no other MIDI devices are connected to your computer.
|
39
|
+
|
40
|
+
== Configuration
|
41
|
+
|
42
|
+
Three parameters are defined in the configuration file, <tt>zgomot.yml</tt>, that specify the timing of a composition.
|
43
|
+
|
44
|
+
* <b>time_signature</b>: Beats per measure.
|
45
|
+
* <b>beats_per_minute</b>: To map to real time the beats per minute are specified.
|
46
|
+
* <b>resolution</b>: Defines the length of a clock tick and is defined by the duration of the shortest note that can be played. In the first example this is a 64'th note. The maximum resolution is 1/1024 if your computer can do it.
|
47
|
+
|
48
|
+
== Pitch
|
49
|
+
|
50
|
+
Pitch is defined by a 2 dimensional array specifying the pitch class and octave, For example [:C, 4] would denote the note C at octave 4. Octave is an integer between -1 and 9 and acceptable values for pitch class with enharmonics, where <em>s</em> denotes a sharp, <em>b</em> a flat, and rest by :R are,
|
51
|
+
|
52
|
+
:C, :Bs;
|
53
|
+
:Cs, :Db
|
54
|
+
:D
|
55
|
+
:Ds, :Ed
|
56
|
+
:E, :Fd
|
57
|
+
:F, :Es
|
58
|
+
:Fs, :Gb
|
59
|
+
:G,
|
60
|
+
:Gs, :Ab
|
61
|
+
:A,
|
62
|
+
:As, :Bb,
|
63
|
+
:B, :Cb,
|
64
|
+
:R,
|
65
|
+
|
66
|
+
== Notes
|
67
|
+
|
68
|
+
A note is defined by,
|
69
|
+
|
70
|
+
n(pitch, opts)
|
71
|
+
|
72
|
+
Accepted options are,
|
73
|
+
|
74
|
+
* <tt>:l</tt>: Reciprocal length of note, Accepted values are 1, 2, 4,..., max. Where max is the inverse resolution defined in <tt>zgomot.yml</tt>. Mapping to standard durations gives; 1 a whole note, 2 a half note, 4 a quarter note, 8 and eighth note, ... The default value is 4, a quarter note.
|
75
|
+
* <tt>:v</tt>: The velocity of the note is a number between 0 ad 1 defining its loudness. Low values correspond to piano and larger values forte. The default is 0.6.
|
76
|
+
|
77
|
+
An F# half note at octave 5 with velocity 0.5 would be defined by,
|
78
|
+
|
79
|
+
n([:Fs, 5], :l => 2, :v => 0.5)
|
80
|
+
|
81
|
+
==== Transforms
|
82
|
+
|
83
|
+
Notes support the following transformations,
|
84
|
+
|
85
|
+
* <tt>bpm!(bpm)</tt>: change the bits per minute at which the note is played.
|
86
|
+
* <tt>octave!(ocatve)</tt>: change the octave of the note.
|
87
|
+
|
88
|
+
== Chords
|
89
|
+
|
90
|
+
A chord is defined by,
|
91
|
+
|
92
|
+
c(root, interval, opts)
|
93
|
+
|
94
|
+
Only trichords are supported. Here root is the chord root pitch and interval is the interval type. Accepted values of the interval type are: <tt>:maj</tt>, <tt>:min</tt>, <tt>:dim</tt>, <tt>:aug</tt>, <tt>:sus2</tt>, <tt>:sus4</tt>, representing major, minor, diminished, augmented, suspended second and suspended forth chord intervals respectively. If not specified the default value of interval is <tt>:maj</tt>.
|
95
|
+
|
96
|
+
Accepted options are,
|
97
|
+
|
98
|
+
* <tt>:l</tt>: Reciprocal length of chord, Accepted values are 1, 2, 4,..., max. Where max is the inverse resolution defined in <tt>zgomot.yml</tt>. Mapping to standard durations gives; 1 a whole note, 2 a half note, 4 a quarter note, 8 and eighth note, ... The default value is 4, a quarter note.
|
99
|
+
* <tt>:v</tt>: The velocity of the note is a number between 0 ad 1 defining its loudness. Low values correspond to piano and larger values forte. The default is 0.6.
|
100
|
+
|
101
|
+
An F# half note minor chord at octave 5 with velocity 0.5 would be defined by,
|
102
|
+
|
103
|
+
c([:Fs, 5], :min, :l => 2, :v => 0.5)
|
104
|
+
|
105
|
+
==== Transforms
|
106
|
+
|
107
|
+
Chords support the following transformations,
|
108
|
+
|
109
|
+
* <tt>bpm!(bpm)</tt>: change the bits per minute at which the chord is played.
|
110
|
+
* <tt>octave!(ocatve)</tt>: change the octave of the chord.
|
111
|
+
* <tt>arp!(length)</tt>: arpeggiate the chord using the specified length in units of note length. Accepted values are 1, 2, 4, 8, ... resolution, representing arpeggiation by a whole note, half note, quarter note, eighth note up to the specified clock resolution.
|
112
|
+
* <tt>inv!(number)</tt>: Invert the chord. When 0 the chord is unchanged, 1 is the first inversion and 2 is the second. Higher inversions just shift the chord to a higher octave.
|
113
|
+
* <tt>rev!</tt>: Reverse the order in which the notes are played. Only noticeable if the chord is also arpeggiated.
|
114
|
+
|
115
|
+
== Percussion
|
116
|
+
|
117
|
+
The General MIDI Percussion Map that maps percussion type to MIDI note is supported.
|
118
|
+
|
119
|
+
:acoustic_bass_drum => [:B,1],
|
120
|
+
:bass_drum_1 => [:C,2], :side_stick => [:Cs,2], :acoustic_snare => [:D,2],
|
121
|
+
:hand_clap => [:Ds,2], :electric_snare => [:E,2], :low_floor_tom => [:F,2],
|
122
|
+
:closed_hi_hat => [:Fs,2], :high_floor_tom => [:G,2], :pedal_hi_hat => [:Gs,2],
|
123
|
+
:low_tom => [:A,2], :open_hi_hat => [:As,2], :low_mid_tom => [:B,2],
|
124
|
+
:high_mid_tom => [:C,3], :crash_cymbal_1 => [:Cs,3], :high_tom => [:D,3],
|
125
|
+
:ride_cymbal_1 => [:Ds,3], :chinese_cymbal => [:E,3], :ride_bell => [:F,3],
|
126
|
+
:tambourine => [:Fs,3], :splash_cymbal => [:G,3], :cowbell => [:Gs,3],
|
127
|
+
:crash_cymbal_2 => [:A,3], :vibraslap => [:As,3], :ride_cymbal_2 => [:B,3],
|
128
|
+
:high_bongo => [:C,4], :low_bongo => [:Cs,4], :mute_hi_conga => [:D,4],
|
129
|
+
:open_hi_conga => [:Ds,4], :low_conga => [:E,4], :high_timbale => [:F,4],
|
130
|
+
:low_timbale => [:Fs,4], :high_agogo => [:G,4], :low_agogo => [:Gs,4],
|
131
|
+
:cabasa => [:A,4], :maracas => [:As,4], :short_whistle => [:B,4],
|
132
|
+
:long_whistle => [:C,5], :short_guiro => [:Cs,5], :long_guiro => [:D,5],
|
133
|
+
:claves => [:Ds,5], :hi_woodblock => [:E,5], :low_woodblock => [:F,5],
|
134
|
+
:mute_cuica => [:Fs,5], :open_cuica => [:G,5], :mute_triangle => [:Gs,5],
|
135
|
+
:open_triangle => [:A,5],
|
136
|
+
:R => :R,
|
137
|
+
|
138
|
+
A percussive tone is defined by
|
139
|
+
|
140
|
+
pr(perc, opts)
|
141
|
+
|
142
|
+
Where perc is the General MIDI Percussion code defined above that has a default value of <tt>:acoustic_bass_drum</tt>.
|
143
|
+
|
144
|
+
Accepted options are,
|
145
|
+
|
146
|
+
* <b>:l</b>: Reciprocal length of note, Accepted values are 1, 2, 4,..., max. Where max is the inverse resolution defined in <tt>zgomot.yml</tt>. Mapping to standard durations gives: 1 a whole note, 2 a half note, 4 a quarter note, 8 and eighth note, ... The default value is 4, a quarter note.
|
147
|
+
* <b>:v</b>: The velocity of the note is a number between 0 ad 1 defining its loudness. Low values correspond to piano and larger values forte. The default is 0.6.
|
148
|
+
|
149
|
+
A <tt>:closed_hi_hat</tt> percussive tone of half note length with velocity 0.5 would be defined by,
|
150
|
+
|
151
|
+
pr(:closed_hi_hat, :l => 2, :v => 0.5)
|
152
|
+
|
153
|
+
==== Transforms
|
154
|
+
|
155
|
+
Percussion supports the following transformations,
|
156
|
+
|
157
|
+
* <tt>bpm!(bpm)</tt>: change the bits per minute at which the note is played.
|
158
|
+
|
159
|
+
== Chord Progressions
|
160
|
+
|
161
|
+
Chord Progressions or Roman Numeral Notation permit the definition of a melody that is independent of key. Using Chord progressions it is possible to iteratively shift the key of a specified sequence of chords.
|
162
|
+
|
163
|
+
A chord progression consisting of the 7 notes of a specified key in a diatonic mode played sequentially will be defined by,
|
164
|
+
|
165
|
+
cp(tonic, mode, opts)
|
166
|
+
|
167
|
+
Where tonic is the tonic pitch of the key, mode is one of the 7 diatonic modes: <tt>:ionian</tt>, <tt>:dorian</tt>, <tt>:phrygian</tt>, <tt>:lydian</tt>, <tt>:mixolydian</tt>, <tt>:aeolian</tt>, <tt>:locrian</tt> or a number between 0 and 6 mapping sequentially onto the these modes.
|
168
|
+
|
169
|
+
Accepted options are,
|
170
|
+
|
171
|
+
* <tt>:l</tt>: Reciprocal length of chord, Accepted values are <tt>1, 2, 4,..., max</tt>. Where max is the inverse resolution defined in <tt>zgomot.yml</tt>. Mapping to standard durations gives; 1 a whole note, 2 a half note, 4 a quarter note, 8 and eighth note, ... The default value is 4, a quarter note.
|
172
|
+
* <tt>:v</tt>: The velocity of the note is a number between 0 ad 1 defining its loudness. Low values correspond to piano and larger values forte. The default is 0.6.
|
173
|
+
|
174
|
+
An chord progression in a key of F# dorian at octave 5 with notes of half note length and velocity 0.5 would be defined by,
|
175
|
+
|
176
|
+
cp([:Fs, 5], :dorian, :l => 2, :v => 0.5)
|
177
|
+
|
178
|
+
==== Transforms
|
179
|
+
|
180
|
+
* <tt>tonic!(tonic)</tt>: Change the tonic pitch of the progression.
|
181
|
+
* <tt>mode!(mode)</tt>: Change the mode of the progression
|
182
|
+
* <tt>[](*args)</tt>: By default when a progression is created it only consists of one each of the notes in the key played sequentially. Using this transformation it is possible to change the the notes played in the progression. For example <tt>cp([:Fs, 5], :dorian)[1,5,5,7]</tt> will play the sequence <tt>1, 5, 5, 7</tt> instead of <tt>1, 2, 3, 4, 5, 6, 7</tt>.
|
183
|
+
* <tt>velocity=(v)</tt>: Change the velocity of all notes in the progression.
|
184
|
+
* <tt>length=(v)</tt>: Change the length of all notes in the progression.
|
185
|
+
* <tt>bpm!(bpm)</tt>: change the bits per minute at which the chord is played.
|
186
|
+
* <tt>octave!(ocatve)</tt>: change the octave of all notes in the progression.
|
187
|
+
* <tt>arp!(length)</tt>: arpeggiate the chords in the progression using the specified length in units of note length. Accepted values are 1, 2, 4, 8, ... resolution, representing arpeggiation by a whole note, half note, quarter note, eighth note up to the specified clock resolution.
|
188
|
+
* <tt>inv!(number)</tt>: The inversion number. A value of zero will leave the chord unchanged, 1 is the first inversion and 2 is the second. Higher inversions just shift the chord to a higher octave.
|
189
|
+
* <tt>rev!</tt>: Reverse the order in which the notes are played. Only noticeable if the chords in the progression are also arpeggiated.
|
190
|
+
|
191
|
+
== Note Progressions
|
192
|
+
|
193
|
+
Note Progressions are similar to chord progressions but are composed of notes instead of chords. Most of the options and transformation are the same. To define a Note Progression use,
|
194
|
+
|
195
|
+
np(tonic, mode, opts)
|
196
|
+
|
197
|
+
Where tonic is the tonic pitch of the key, mode is one of the 7 diatonic modes: <tt>:ionian</tt>, <tt>:dorian</tt>, <tt>:phrygian</tt>, <tt>:lydian</tt>, <tt>:mixolydian</tt>, <tt>:aeolian</tt>, <tt>:locrian</tt> or a number between 0 and 6 mapping sequentially onto the these modes.
|
198
|
+
|
199
|
+
Accepted options are,
|
200
|
+
|
201
|
+
* <tt>:l</tt>: Reciprocal length of note, Accepted values are 1, 2, 4,..., max. Where max is the inverse resolution defined in <tt>zgomot.yml</tt>. Mapping to standard durations gives; 1 a whole note, 2 a half note, 4 a quarter note, 8 and eighth note, ... The default value is 4, a quarter note.
|
202
|
+
* <tt>:v</tt>: The velocity of the note is a number between 0 ad 1 defining its loudness. Low values correspond to piano and larger values forte. The default is 0.6.
|
203
|
+
|
204
|
+
An note progression in a key of F# dorian at octave 5 with notes of half note length and velocity 0.5 would be defined by,
|
205
|
+
|
206
|
+
np([:Fs, 5], :dorian, :l => 2, :v => 0.5)
|
207
|
+
|
208
|
+
==== Transforms
|
209
|
+
|
210
|
+
* <tt>tonic!(tonic)</tt>: Change the tonic pitch of the progression.
|
211
|
+
* <tt>mode!(mode)</tt>: Change the mode of the progression
|
212
|
+
* <tt>[](*args)</tt>: By default when a progression is created it only consists of one each of the notes in the key played sequentially using this transformation it is possible to change the the notes played in the progression. For example <tt>np([:Fs, 5], :dorian)[1,5,5,7]</tt> will play the sequence 1, 5, 5, 7 instead of 1, 2, 3, 4, 5, 6, 7.
|
213
|
+
* <tt>velocity=(v)</tt>: Change the velocity of all notes in the progression.
|
214
|
+
* <tt>length=(v)</tt>: Change the length of all notes in the progression.
|
215
|
+
* <tt>bpm!(bpm)</tt>: change the bits per minute at which the chord is played.
|
216
|
+
* <tt>octave!(ocatve)</tt>: change the octave of all notes in the progression.
|
217
|
+
|
218
|
+
== Patterns
|
219
|
+
|
220
|
+
Patterns are heterogeneous arrays of notes, chords, Chord Progressions and Note Progressions. Operations applied to the pattern will be delegated to the appropriate elements of the pattern array. Patterns also support all methods supported by Ruby the <tt>Array</tt> class.
|
221
|
+
|
222
|
+
== MIDI Channels
|
223
|
+
|
224
|
+
The MIDI Channel is used to specify MIDI device IO. A channel is created with the call,
|
225
|
+
|
226
|
+
ch(num)
|
227
|
+
|
228
|
+
Where number is the MIDI channel number which must be between 0 and 15. The default value is 0.
|
229
|
+
|
230
|
+
The << operator is used to write patterns to the MIDI IO device.
|
231
|
+
|
232
|
+
Write a note pattern to MIDI channel 1,
|
233
|
+
|
234
|
+
ch(1) << [n([:C,5]), n(:B), n(:R), n(:G), n(:C,:l=>2), n([:E,5],:l=>2)]
|
235
|
+
|
236
|
+
Channels are created within stream blocks which are discussed in the next section.
|
237
|
+
|
238
|
+
== Streams
|
239
|
+
|
240
|
+
A stream is used to define iteration on a pattern and outputs a stream of MIDI data.
|
241
|
+
|
242
|
+
str(name, pattern, opt, &blk)
|
243
|
+
|
244
|
+
Where name is an identifying string defining, pattern is an initial pattern, which may be nil, and blk is used to define operations on pattern and is yielded pattern.
|
245
|
+
|
246
|
+
Accepted options are,
|
247
|
+
|
248
|
+
* <tt>:lim</tt>: The number of iterations performed by the stream. The default value is infinite.
|
249
|
+
|
250
|
+
A program will consist of one or more <tt>str</tt> calls followed by a <tt>play</tt> call. Blocks passed to <tt>str</tt> perform operations on the yielded pattern and write the results to a MIDI channel. On the call to <tt>play</tt> a thread is spawned for each <tt>str</tt> which calls the defined blocks the specified number of times.
|
251
|
+
|
252
|
+
str 'grovin-1', cp([:C,3],:ionian), :lim => 3 do |pattern|
|
253
|
+
ch(0) << do_stuff_1(pattern)
|
254
|
+
end
|
255
|
+
|
256
|
+
str 'grovin-2', cp([:A,5],:dorian), , :lim => 3 do |pattern|
|
257
|
+
ch(1) << do_stuff_2(pattern)
|
258
|
+
end
|
259
|
+
|
260
|
+
play
|
261
|
+
|
262
|
+
Within a <tt>str</tt> block the following attributes are available,
|
263
|
+
|
264
|
+
* <tt>count</tt>: Current iteration.
|
265
|
+
* <tt>patterns</tt>: Chronological list of patterns.
|
266
|
+
|
267
|
+
== Callbacks
|
268
|
+
|
269
|
+
* <tt>before_start</tt>: called before application starts.
|
270
|
+
|
271
|
+
== Logging
|
272
|
+
|
273
|
+
By default logging is performed to STDOUT with level <tt>Logger::WARN</tt>. This can be changed by defining a new <tt>logger</tt> or specifying a new logger level in <tt>before_start</tt>.
|
274
|
+
|
275
|
+
== Examples
|
276
|
+
|
277
|
+
Many examples can be found at https://github.com/troystribling/zgomot/tree/master/examples/.
|
278
|
+
|
279
|
+
=== Markov Matrix
|
280
|
+
|
281
|
+
The Markov Matrix randomly plays a list of specified patterns with specified probabilities. The size of the matrix is determined by the number of patterns. For each pattern a list transition probabilities must be defined for all other patterns.
|
282
|
+
|
283
|
+
=== Methods
|
284
|
+
|
285
|
+
* <tt>add(transition_probs, &blk)</tt>: Add a pattern to the Markov matrix. Arguments are: <tt>transitition_probs</tt> a list that defines the transition probabilities between patterns and <tt>blk</tt> is a block in which the pattern is defined.
|
286
|
+
* <tt>next</tt>: Called within a <tt>str</tt> block to return the next random pattern.
|
287
|
+
|
288
|
+
==== Code Sample
|
289
|
+
|
290
|
+
A simple Markov Matrix with two patterns.
|
291
|
+
|
292
|
+
m = mark
|
293
|
+
m.add([0.6, 0.4]) do
|
294
|
+
np([:A,4],:dorian,:l=>4)[7,5,3,1,]
|
295
|
+
end
|
296
|
+
m.add([0.4, 0.6]) do
|
297
|
+
np([:A,4],:ionian,:l=>4)[7,5,3,1]
|
298
|
+
end
|
299
|
+
|
300
|
+
str 'markov' do
|
301
|
+
ch << m.next
|
302
|
+
end
|
303
|
+
|
304
|
+
play
|
305
|
+
|
306
|
+
=== Multiple MIDI Channels
|
307
|
+
|
308
|
+
A program can write to multiple MIDI channels with multiple <tt>str</tt> calls. The following example writes the same melody to two different MIDI channels at different bit rates producing a phasing effect.
|
309
|
+
|
310
|
+
str 'melody-1', np([:B,3],nil,:l=>4)[1,4,5,5], :lim=>:inf do |pattern|
|
311
|
+
ch(0) << pattern.mode!((count/4) % 7 + 1)
|
312
|
+
end
|
313
|
+
|
314
|
+
str 'melody-2', np([:B,3],:ionian,:l=>4)[1,4,5,5].bpm!(16.0/15.0), :lim=>:inf do |pattern|
|
315
|
+
ch(1) << pattern
|
316
|
+
end
|
317
|
+
|
318
|
+
play
|
319
|
+
|
320
|
+
=== Progression with Length and Velocity Defined for each Note
|
321
|
+
|
322
|
+
Different note duration and velocities for each note in a progression can be defined by by using arrays for the length and velocity options.
|
323
|
+
|
324
|
+
str 'prog', cp([:A,4],nil,:l=>[4,4,8,8,4], :v=>[0.6, 0.4, 0.7, 0.6, 0.4])[7,5,3,3,1], :lim=>6 do |pattern|
|
325
|
+
ch << pattern.mode!(count)
|
326
|
+
end
|
327
|
+
|
328
|
+
play
|
4
329
|
|
5
330
|
== Copyright
|
6
331
|
|
data/Rakefile
CHANGED
@@ -15,7 +15,6 @@ require 'jeweler'
|
|
15
15
|
gem.homepage = "http://github.com/troystribling/zgomot"
|
16
16
|
gem.authors = ["Troy Stribling"]
|
17
17
|
gem.files.include %w(lib/jeweler/templates/.gitignore VERSION)
|
18
|
-
gem.add_dependency('rake', '>= 0.8.3')
|
19
18
|
gem.add_dependency('midiator', '>= 0.3.3')
|
20
19
|
end
|
21
20
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/zgomot.gemspec
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{zgomot}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Troy Stribling"]
|
12
|
+
s.date = %q{2010-12-01}
|
13
|
+
s.default_executable = %q{zgomot}
|
14
|
+
s.email = %q{troy.stribling@gmail.com}
|
15
|
+
s.executables = ["zgomot"]
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"bin/zgomot",
|
27
|
+
"examples/arp_chords.rb",
|
28
|
+
"examples/full_scale_notes.rb",
|
29
|
+
"examples/inv_chords.rb",
|
30
|
+
"examples/modes_notes.rb",
|
31
|
+
"examples/notes.rb",
|
32
|
+
"examples/percs.rb",
|
33
|
+
"examples/percs_multi.rb",
|
34
|
+
"examples/phase_notes.rb",
|
35
|
+
"examples/prog_chords.rb",
|
36
|
+
"examples/prog_chords_multi_vel_length.rb",
|
37
|
+
"examples/prog_chords_rest.rb",
|
38
|
+
"examples/prog_notes.rb",
|
39
|
+
"examples/prog_notes_multi_vel_length.rb",
|
40
|
+
"examples/prog_notes_rest.rb",
|
41
|
+
"examples/progressive_modes.rb",
|
42
|
+
"examples/reverse_chords.rb",
|
43
|
+
"examples/scale_chords.rb",
|
44
|
+
"examples/scale_notes.rb",
|
45
|
+
"examples/scales_notes.rb",
|
46
|
+
"examples/simple_chords.rb",
|
47
|
+
"examples/simple_markov.rb",
|
48
|
+
"examples/simple_notes.rb",
|
49
|
+
"examples/simple_notes_length.rb",
|
50
|
+
"examples/simple_notes_velocity.rb",
|
51
|
+
"examples/zgomot.yml",
|
52
|
+
"lib/zgomot.rb",
|
53
|
+
"lib/zgomot/boot.rb",
|
54
|
+
"lib/zgomot/comp.rb",
|
55
|
+
"lib/zgomot/comp/chord.rb",
|
56
|
+
"lib/zgomot/comp/markov.rb",
|
57
|
+
"lib/zgomot/comp/mode.rb",
|
58
|
+
"lib/zgomot/comp/note.rb",
|
59
|
+
"lib/zgomot/comp/pattern.rb",
|
60
|
+
"lib/zgomot/comp/perc.rb",
|
61
|
+
"lib/zgomot/comp/permutation.rb",
|
62
|
+
"lib/zgomot/comp/pitch_class.rb",
|
63
|
+
"lib/zgomot/comp/progression.rb",
|
64
|
+
"lib/zgomot/comp/scale.rb",
|
65
|
+
"lib/zgomot/config.rb",
|
66
|
+
"lib/zgomot/main.rb",
|
67
|
+
"lib/zgomot/midi.rb",
|
68
|
+
"lib/zgomot/midi/channel.rb",
|
69
|
+
"lib/zgomot/midi/clock.rb",
|
70
|
+
"lib/zgomot/midi/dispatcher.rb",
|
71
|
+
"lib/zgomot/midi/interface.rb",
|
72
|
+
"lib/zgomot/midi/note.rb",
|
73
|
+
"lib/zgomot/midi/stream.rb",
|
74
|
+
"lib/zgomot/patches.rb",
|
75
|
+
"lib/zgomot/patches/object.rb",
|
76
|
+
"lib/zgomot/patches/time.rb",
|
77
|
+
"lib/zlive.rb",
|
78
|
+
"zgomot.gemspec"
|
79
|
+
]
|
80
|
+
s.homepage = %q{http://github.com/troystribling/zgomot}
|
81
|
+
s.require_paths = ["lib"]
|
82
|
+
s.rubygems_version = %q{1.3.7}
|
83
|
+
s.summary = %q{zgomot is a simple DSL for writting MIDI music.}
|
84
|
+
s.test_files = [
|
85
|
+
"examples/arp_chords.rb",
|
86
|
+
"examples/full_scale_notes.rb",
|
87
|
+
"examples/inv_chords.rb",
|
88
|
+
"examples/modes_notes.rb",
|
89
|
+
"examples/notes.rb",
|
90
|
+
"examples/percs.rb",
|
91
|
+
"examples/percs_multi.rb",
|
92
|
+
"examples/phase_notes.rb",
|
93
|
+
"examples/prog_chords.rb",
|
94
|
+
"examples/prog_chords_multi_vel_length.rb",
|
95
|
+
"examples/prog_chords_rest.rb",
|
96
|
+
"examples/prog_notes.rb",
|
97
|
+
"examples/prog_notes_multi_vel_length.rb",
|
98
|
+
"examples/prog_notes_rest.rb",
|
99
|
+
"examples/progressive_modes.rb",
|
100
|
+
"examples/reverse_chords.rb",
|
101
|
+
"examples/scale_chords.rb",
|
102
|
+
"examples/scale_notes.rb",
|
103
|
+
"examples/scales_notes.rb",
|
104
|
+
"examples/simple_chords.rb",
|
105
|
+
"examples/simple_markov.rb",
|
106
|
+
"examples/simple_notes.rb",
|
107
|
+
"examples/simple_notes_length.rb",
|
108
|
+
"examples/simple_notes_velocity.rb"
|
109
|
+
]
|
110
|
+
|
111
|
+
if s.respond_to? :specification_version then
|
112
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
113
|
+
s.specification_version = 3
|
114
|
+
|
115
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
116
|
+
s.add_runtime_dependency(%q<midiator>, [">= 0.3.3"])
|
117
|
+
else
|
118
|
+
s.add_dependency(%q<midiator>, [">= 0.3.3"])
|
119
|
+
end
|
120
|
+
else
|
121
|
+
s.add_dependency(%q<midiator>, [">= 0.3.3"])
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zgomot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Troy Stribling
|
@@ -15,29 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-12-01 00:00:00 -05:00
|
19
19
|
default_executable: zgomot
|
20
20
|
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
name: rake
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 57
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 8
|
33
|
-
- 3
|
34
|
-
version: 0.8.3
|
35
|
-
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
21
|
- !ruby/object:Gem::Dependency
|
38
22
|
name: midiator
|
39
23
|
prerelease: false
|
40
|
-
requirement: &
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
41
25
|
none: false
|
42
26
|
requirements:
|
43
27
|
- - ">="
|
@@ -49,7 +33,7 @@ dependencies:
|
|
49
33
|
- 3
|
50
34
|
version: 0.3.3
|
51
35
|
type: :runtime
|
52
|
-
version_requirements: *
|
36
|
+
version_requirements: *id001
|
53
37
|
description:
|
54
38
|
email: troy.stribling@gmail.com
|
55
39
|
executables:
|
@@ -117,6 +101,7 @@ files:
|
|
117
101
|
- lib/zgomot/patches/object.rb
|
118
102
|
- lib/zgomot/patches/time.rb
|
119
103
|
- lib/zlive.rb
|
104
|
+
- zgomot.gemspec
|
120
105
|
has_rdoc: true
|
121
106
|
homepage: http://github.com/troystribling/zgomot
|
122
107
|
licenses: []
|