zgomot 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.rdoc +326 -1
  2. data/Rakefile +0 -1
  3. data/VERSION +1 -1
  4. data/zgomot.gemspec +124 -0
  5. metadata +7 -22
data/README.rdoc CHANGED
@@ -1,6 +1,331 @@
1
1
  = zgomot
2
2
 
3
- A music composition DSL
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
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: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
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-11-23 00:00:00 -05:00
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: &id002 !ruby/object:Gem::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: *id002
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: []