mtk 0.0.3.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +15 -0
  2. data/INTRO.md +63 -31
  3. data/Rakefile +3 -1
  4. data/bin/mtk +75 -32
  5. data/examples/drum_pattern.rb +2 -2
  6. data/examples/dynamic_pattern.rb +1 -1
  7. data/examples/helpers/output_selector.rb +71 -0
  8. data/examples/notation.rb +5 -1
  9. data/examples/tone_row_melody.rb +1 -1
  10. data/lib/mtk.rb +1 -0
  11. data/lib/mtk/core/duration.rb +18 -3
  12. data/lib/mtk/core/intensity.rb +5 -3
  13. data/lib/mtk/core/interval.rb +21 -14
  14. data/lib/mtk/core/pitch.rb +2 -0
  15. data/lib/mtk/core/pitch_class.rb +6 -3
  16. data/lib/mtk/events/event.rb +2 -1
  17. data/lib/mtk/events/note.rb +1 -1
  18. data/lib/mtk/events/parameter.rb +1 -0
  19. data/lib/mtk/events/rest.rb +85 -0
  20. data/lib/mtk/events/timeline.rb +6 -2
  21. data/lib/mtk/io/jsound_input.rb +9 -3
  22. data/lib/mtk/io/midi_file.rb +38 -2
  23. data/lib/mtk/io/midi_input.rb +1 -1
  24. data/lib/mtk/io/midi_output.rb +95 -4
  25. data/lib/mtk/io/unimidi_input.rb +7 -3
  26. data/lib/mtk/lang/durations.rb +31 -26
  27. data/lib/mtk/lang/intensities.rb +29 -30
  28. data/lib/mtk/lang/intervals.rb +108 -41
  29. data/lib/mtk/lang/mtk_grammar.citrus +14 -4
  30. data/lib/mtk/lang/parser.rb +10 -5
  31. data/lib/mtk/lang/pitch_classes.rb +45 -17
  32. data/lib/mtk/lang/pitches.rb +169 -32
  33. data/lib/mtk/lang/tutorial.rb +279 -0
  34. data/lib/mtk/lang/tutorial_lesson.rb +87 -0
  35. data/lib/mtk/sequencers/event_builder.rb +29 -8
  36. data/spec/mtk/core/duration_spec.rb +14 -1
  37. data/spec/mtk/core/intensity_spec.rb +1 -1
  38. data/spec/mtk/events/event_spec.rb +10 -16
  39. data/spec/mtk/events/note_spec.rb +3 -3
  40. data/spec/mtk/events/rest_spec.rb +184 -0
  41. data/spec/mtk/events/timeline_spec.rb +5 -1
  42. data/spec/mtk/io/midi_file_spec.rb +13 -2
  43. data/spec/mtk/io/midi_output_spec.rb +42 -9
  44. data/spec/mtk/lang/durations_spec.rb +5 -5
  45. data/spec/mtk/lang/intensities_spec.rb +5 -5
  46. data/spec/mtk/lang/intervals_spec.rb +139 -13
  47. data/spec/mtk/lang/parser_spec.rb +65 -25
  48. data/spec/mtk/lang/pitch_classes_spec.rb +0 -11
  49. data/spec/mtk/lang/pitches_spec.rb +0 -15
  50. data/spec/mtk/patterns/chain_spec.rb +7 -7
  51. data/spec/mtk/patterns/for_each_spec.rb +2 -2
  52. data/spec/mtk/sequencers/event_builder_spec.rb +49 -17
  53. metadata +12 -22
@@ -80,7 +80,7 @@ module MTK
80
80
  end
81
81
 
82
82
  def to_timeline
83
- Timeline.new
83
+ MTK::Events::Timeline.new
84
84
  end
85
85
 
86
86
  end
@@ -105,8 +105,12 @@ module MTK
105
105
  pitch = event.midi_pitch
106
106
  velocity = event.velocity
107
107
  duration = event.duration.to_f
108
- @scheduler.at(time) { note_on(pitch,velocity,channel) }
109
- @scheduler.at(time + duration) { note_off(pitch,velocity,channel) }
108
+ # Set a lower priority (via level:1) for note-ons, so legato notes at the same pitch don't
109
+ # prematurely chop off the next note, by ensuring all note-offs at the same timepoint occur first.
110
+ @scheduler.at(time, level: 1) { note_on(pitch,velocity,channel) }
111
+ @scheduler.at(time + duration) { note_on(pitch,0,channel) }
112
+ # TODO: use a proper note off message whenever we support off velocities
113
+ #@scheduler.at(time + duration) { note_off(pitch,velocity,channel) }
110
114
 
111
115
  when :control
112
116
  @scheduler.at(time) { control(event.number, event.midi_value, channel) }
@@ -127,7 +131,10 @@ module MTK
127
131
  end
128
132
  end
129
133
 
130
- end_time = timeline.times.last + trailing_buffer
134
+ end_time = timeline.times.last
135
+ final_events = timeline[end_time]
136
+ max_length = final_events.inject(0) {|max,event| len = event.length; max > len ? max : len } || 0
137
+ end_time += max_length + trailing_buffer
131
138
  @scheduler.at(end_time) { @scheduler.stop }
132
139
 
133
140
  thread = @scheduler.run
@@ -192,4 +199,88 @@ unless $__RUNNING_RSPEC_TESTS__ # I can't get this working on Travis-CI, problem
192
199
  else
193
200
  require 'mtk/io/unimidi_output'
194
201
  end
195
- end
202
+ end
203
+
204
+
205
+
206
+ ####################################################################################
207
+ # MONKEY PATCHING gamelan to ensure note-offs come before note-ons
208
+ # when they occur at the same scheduler time.
209
+ # This patch applies https://github.com/jvoorhis/gamelan/commit/20d93f4e5d86517bd5c6f9212a0dcdbf371d1ea1
210
+ # to provide the priority/level feature for the scheduler (see @scheduler.at() calls for notes above).
211
+ # This patch should not be necessary when gamelan gem > 0.3 is released
212
+
213
+ # @private
214
+ module Gamelan
215
+
216
+ DEFAULT_PRIORITY = 0
217
+ NOTEON_PRIORITY = 0
218
+ CC_PRIORITY = -1
219
+ PC_PRIORITY = -2
220
+ NOTEOFF_PRIORITY = -3
221
+
222
+ class Priority < Struct.new(:time, :level)
223
+ include Comparable
224
+ def <=>(prio)
225
+ self.to_a <=> prio.to_a
226
+ end
227
+ end
228
+
229
+ if defined?(JRUBY_VERSION)
230
+
231
+ class Queue
232
+ def initialize(scheduler)
233
+ @scheduler = scheduler
234
+ @queue = PriorityQueue.new(10000) { |a,b|
235
+ a.priority <=> b.priority
236
+ }
237
+ end
238
+
239
+ def ready?
240
+ if top = @queue.peek
241
+ top.delay < @scheduler.phase
242
+ else
243
+ false
244
+ end
245
+ end
246
+ end
247
+
248
+ else
249
+
250
+ class Queue
251
+ def push(task)
252
+ @queue.push(task, task.priority)
253
+ end
254
+ alias << push
255
+
256
+ def ready?
257
+ if top = @queue.min
258
+ top[1].time < @scheduler.phase
259
+ else
260
+ false
261
+ end
262
+ end
263
+ end
264
+
265
+ end
266
+
267
+ class Scheduler < Timer
268
+ def at(delay, options = {}, &task)
269
+ options = { :delay => delay, :scheduler => self }.merge(options)
270
+ @queue << Task.new(options, &task)
271
+ end
272
+ end
273
+
274
+ class Task
275
+ attr_reader :level, :priority
276
+
277
+ def initialize(options, &block)
278
+ @scheduler = options[:scheduler]
279
+ @delay = options[:delay].to_f
280
+ @level = options[:level] || DEFAULT_PRIORITY
281
+ @priority = Priority.new(@delay, @level)
282
+ @proc = block
283
+ @args = options[:args] || []
284
+ end
285
+ end
286
+ end
@@ -59,7 +59,7 @@ module MTK
59
59
 
60
60
  bpm = options.fetch :bmp, 120
61
61
  beats_per_second = bpm.to_f/60
62
- timeline = Timeline.new
62
+ timeline = MTK::Events::Timeline.new
63
63
  note_ons = {}
64
64
  start = nil
65
65
 
@@ -69,9 +69,13 @@ module MTK
69
69
  time /= beats_per_second
70
70
 
71
71
  if message.is_a? MTK::Events::Event
72
- timeline.add time,message
72
+ timeline.add time,message unless message.type == :unknown
73
73
  else
74
- case message.type
74
+ message_type = message.type
75
+ message_type = :note_off if message_type == :note_on and message.velocity == 0
76
+ # TODO: this will need to be made more robust when we support off velocities
77
+
78
+ case message_type
75
79
  when :note_on
76
80
  pitch = message.pitch
77
81
  note_ons[pitch] = [message,time]
@@ -5,51 +5,56 @@ module MTK
5
5
 
6
6
  # Defines duration constants using abbreviations for standard rhythm values ('w' for whole note, 'h' for half note, etc).
7
7
  #
8
- # In order to avoid conflict with pitch class 'e', the constant for eighth note is 'i'
8
+ # These can be thought of like constants, but in order to support the lower case names,
9
+ # it was necessary to define them as "pseudo constant" methods.
10
+ # Like constants, these methods are available either through the module (MTK::Lang::Durations::q) or
11
+ # via mixin (include MTK::Lang::Durations; q). They are listed under the "Instance Attribute Summary" of this page.
9
12
  #
10
- # These can be thought of like constants, but they
11
- # use lower-case names and therefore define them as "pseudo constant" methods.
12
- # The methods are available either through the module (MTK::Core::Durations::e) or via mixin (include MTK::Core::Durations; q)
13
- #
14
- # These values assume the quarter note is one beat (1.0), so they work best with 4/4 and other */4 time signatures.
13
+ # These values assume the quarter note is one beat, so you may find they work best with 4/4 and other */4 time signatures
14
+ # (although it's certainly possible to use them with less common time signatures like 5/8).
15
15
  #
16
16
  # @note Including this module defines a bunch of single-character variables, which may shadow existing variable names.
17
17
  # Just be mindful of what is defined in this module when including it.
18
18
  #
19
- # @see Note
19
+ # @see Core::Duration
20
+ # @see Events::Note
20
21
  module Durations
21
22
  extend MTK::Lang::PseudoConstants
22
23
 
23
- # NOTE: the yard doc macros here only fill in [$2] with the actual value when generating docs under Ruby 1.9+
24
-
24
+ # @private
25
+ # @!macro [attach] define_duration
26
+ # $3: $4 beat(s)
27
+ # @!attribute [r]
28
+ # @return [MTK::Core::Duration] duration of $4 beat(s)
29
+ def self.define_duration name, value, description, beats
30
+ define_constant name, value
31
+ end
32
+
33
+
25
34
  # whole note
26
- # @macro [attach] durations.define_constant
35
+ # @macro [attach] durations.define_duration
27
36
  # @attribute [r]
28
- # @return [$2] number of beats for $1
29
- define_constant 'w', MTK::Core::Duration[4]
37
+ # @return [$2] duration for $1
38
+ define_duration 'w', MTK::Core::Duration[4], 'whole note', 4
39
+
40
+ define_duration 'h', MTK::Core::Duration[2], 'half note', 2
30
41
 
31
- # half note
32
- define_constant 'h', MTK::Core::Duration[2]
42
+ define_duration 'q', MTK::Core::Duration[1], 'quarter note', 1
33
43
 
34
- # quarter note
35
- define_constant 'q', MTK::Core::Duration[1]
44
+ define_duration 'e', MTK::Core::Duration[Rational(1,2)], 'eighth note', '1/2'
36
45
 
37
- # eight note
38
- define_constant 'i', MTK::Core::Duration[Rational(1,2)]
46
+ define_duration 's', MTK::Core::Duration[Rational(1,4)], 'sixteenth note', '1/4'
39
47
 
40
- # sixteenth note
41
- define_constant 's', MTK::Core::Duration[Rational(1,4)]
48
+ define_duration 'r', MTK::Core::Duration[Rational(1,8)], 'thirty-second note', '1/8'
42
49
 
43
- # thirty-second note
44
- define_constant 'r', MTK::Core::Duration[Rational(1,8)]
50
+ define_duration 'x', MTK::Core::Duration[Rational(1,16)], 'sixty-fourth note', '1/16'
45
51
 
46
- # sixty-fourth note
47
- define_constant 'x', MTK::Core::Duration[Rational(1,16)]
48
52
 
49
- # The values of all "psuedo constants" defined in this module
50
- DURATIONS = [w, h, q, i, s, r, x].freeze
53
+ # All "psuedo constants" defined in this module
54
+ DURATIONS = [w, h, q, e, s, r, x].freeze
51
55
 
52
56
  # The names of all "psuedo constants" defined in this module
57
+ # @see MTK::Core::Duration::NAMES
53
58
  DURATION_NAMES = MTK::Core::Duration::NAMES
54
59
 
55
60
  end
@@ -3,57 +3,56 @@ module MTK
3
3
 
4
4
  # Defines intensity constants using standard dynamic symbols.
5
5
  #
6
- # These can be thought of like constants, but in order to distinguish 'f' (forte) from the {PitchClass} 'F'
7
- # it was necessary to use lower-case names and therefore define them as "pseudo constant" methods.
8
- # The methods are available either through the module (MTK::Intensities::f) or via mixin (include MTK::Intensities; f)
6
+ # These can be thought of like constants, but in order to support the lower case names,
7
+ # it was necessary to define them as "pseudo constant" methods.
8
+ # Like constants, these methods are available either through the module (MTK::Lang::Intensities::f) or
9
+ # via mixin (include MTK::Lang::Intensities; f). They are listed under the "Instance Attribute Summary" of this page.
9
10
  #
10
11
  # These values are intensities in the range 0.125 - 1.0 (in increments of 1/8), so they can be easily scaled (unlike MIDI velocities).
11
12
  #
12
- # It is also possible to retrieve values in increments of 1/24 by using the '+' and '-' suffix when looking
13
- # up values via the {.[]} method.
14
- #
15
13
  # @note Including this module shadows Ruby's built-in p() method.
16
- # If you include this module, you can access the built-in p() method via Kernel.p()
14
+ # If you include this module, you can access the built-in p() method via Kernel.p()
15
+ # Also be aware you might shadow existing variable names, like f.
17
16
  #
18
- # @see Note
17
+ # @see Core::Intensity
18
+ # @see Events::Note
19
19
  module Intensities
20
20
  extend MTK::Lang::PseudoConstants
21
21
 
22
- # NOTE: the yard doc macros here only fill in [$2] with the actual value when generating docs under Ruby 1.9+
22
+ # @private
23
+ # @!macro [attach] define_intensity
24
+ # $3: $4% intensity
25
+ # @!attribute [r]
26
+ # @return [MTK::Core::Interval] intensity of $4%
27
+ def self.define_intensity name, value, description, percentage_intensity
28
+ define_constant name, value
29
+ end
30
+
23
31
 
24
- # pianississimo
25
- # @macro [attach] intensities.define_constant
26
- # @attribute [r]
27
- # @return [$2] intensity value for $1
28
- define_constant 'ppp', MTK::Core::Intensity[0.125]
32
+ define_intensity 'ppp', MTK::Core::Intensity[0.125], 'pianississimo', '12.5'
29
33
 
30
- # pianissimo
31
- define_constant 'pp', MTK::Core::Intensity[0.25]
34
+ define_intensity 'pp', MTK::Core::Intensity[0.25], 'pianissimo', 25
32
35
 
33
- # piano
34
36
  # @note Including this module shadows Ruby's built-in p() method.
35
37
  # If you include this module, you can access the built-in p() method via Kernel.p()
36
- define_constant 'p', MTK::Core::Intensity[0.375]
38
+ define_intensity 'p', MTK::Core::Intensity[0.375], 'piano', '37.5'
39
+
40
+ define_intensity 'mp', MTK::Core::Intensity[0.5], 'mezzo-piano', 50
37
41
 
38
- # mezzo-piano
39
- define_constant 'mp', MTK::Core::Intensity[0.5]
42
+ define_intensity 'mf', MTK::Core::Intensity[0.625], 'mezzo-forte', '62.5'
40
43
 
41
- # mezzo-forte
42
- define_constant 'mf', MTK::Core::Intensity[0.625]
44
+ define_intensity 'f', MTK::Core::Intensity[0.75], 'forte', 75
43
45
 
44
- # forte
45
- define_constant 'o', MTK::Core::Intensity[0.75]
46
+ define_intensity 'ff', MTK::Core::Intensity[0.875], 'fortissimo', '87.5'
46
47
 
47
- # fortissimo
48
- define_constant 'ff', MTK::Core::Intensity[0.875]
48
+ define_intensity 'fff', MTK::Core::Intensity[1.0], 'fortississimo', 100
49
49
 
50
- # fortississimo
51
- define_constant 'fff', MTK::Core::Intensity[1.0]
52
50
 
53
- # The values of all "psuedo constants" defined in this module
54
- INTENSITIES = [ppp, pp, p, mp, mf, o, ff, fff].freeze
51
+ # All "psuedo constants" defined in this module
52
+ INTENSITIES = [ppp, pp, p, mp, mf, f, ff, fff].freeze
55
53
 
56
54
  # The names of all "psuedo constants" defined in this module
55
+ # @see MTK::Core::Intensity::NAMES
57
56
  INTENSITY_NAMES = MTK::Core::Intensity::NAMES
58
57
 
59
58
  end
@@ -1,72 +1,139 @@
1
1
  module MTK
2
2
  module Lang
3
3
 
4
- # Defines a constant for intervals up to an octave using diatonic naming conventions (see http://en.wikipedia.org/wiki/Interval_(music)#Main_intervals)
4
+ # Defines a constant for {Core::Interval}s up to an octave using diatonic naming conventions
5
5
  #
6
6
  # Naming conventions
7
7
  # P#: perfect interval
8
8
  # M#: major interval
9
9
  # m#: minor interval
10
- # TT: tritone (AKA augmented 4th or diminished 5th)
10
+ # TT: tritone
11
+ # a#: augmented interval
12
+ # d#: diminished interval
11
13
  #
12
- # These can be thought of like constants, but in order to succinctly distinguish 'm2' (minor) from 'M2' (major),
13
- # it was necessary to use lower-case names for some of the values and therefore define them as "pseudo constant" methods.
14
- # The methods are available either through the module (MTK::Core::Intervals::m2) or via mixin (include MTK::Core::Intervals; m2)
14
+ # These can be thought of like constants, but in order to support the lower case names,
15
+ # it was necessary to define them as "pseudo constant" methods.
16
+ # Like constants, these methods are available either through the module (MTK::Lang::Intervals::m2) or
17
+ # via mixin (include MTK::Lang::Intervals; m2). They are listed under the "Instance Attribute Summary" of this page.
18
+ #
19
+ # @see Core::Interval
20
+ # @see http://en.wikipedia.org/wiki/Interval_(music)#Main_intervals
15
21
  module Intervals
16
22
  extend MTK::Lang::PseudoConstants
17
23
 
18
- # NOTE: the yard doc macros here only fill in [$2] with the actual value when generating docs under Ruby 1.9+
24
+ # @private
25
+ # @!macro [attach] define_interval
26
+ # $3: $4 semitones
27
+ # @!attribute [r]
28
+ # @return [MTK::Core::Interval] interval of $4 semitones
29
+ def self.define_interval name, value, description, semitones
30
+ define_constant name, value
31
+ end
32
+
33
+
34
+ # @see #d2
35
+ define_interval 'P1', MTK::Core::Interval[0], 'perfect unison', 0
36
+
37
+ # @see #P1
38
+ define_interval 'd2', MTK::Core::Interval[0], 'diminished second', 0
39
+
40
+
41
+ # @see #a1
42
+ define_interval 'm2', MTK::Core::Interval[1], 'minor second', 1
43
+
44
+ # @see #m2
45
+ define_interval 'a1', MTK::Core::Interval[1], 'augmented unison', 1
46
+
47
+
48
+ # @see #d3
49
+ define_interval 'M2', MTK::Core::Interval[2], 'major second', 2
50
+
51
+ # @see #M2
52
+ define_interval 'd3', MTK::Core::Interval[2], 'diminished third', 2
53
+
54
+
55
+ # @see #a2
56
+ define_interval 'm3', MTK::Core::Interval[3], 'minor third', 3
57
+
58
+ # @see #m3
59
+ define_interval 'a2', MTK::Core::Interval[3], 'augmented second', 3
60
+
61
+
62
+ # @see #d4
63
+ define_interval 'M3', MTK::Core::Interval[4], 'major third', 4
64
+
65
+ # @see #M3
66
+ define_interval 'd4', MTK::Core::Interval[4], 'diminished fourth', 4
67
+
68
+
69
+ # @see #a3
70
+ define_interval 'P4', MTK::Core::Interval[5], 'perfect fourth', 5
71
+
72
+ # @see #P4
73
+ define_interval 'a3', MTK::Core::Interval[5], 'augmented third', 5
74
+
75
+
76
+ # @see #a4
77
+ # @see #d5
78
+ define_interval 'TT', MTK::Core::Interval[6], 'tritone', 6
79
+
80
+ # @see #TT
81
+ # @see #d5
82
+ define_interval 'a4', MTK::Core::Interval[6], 'augmented fourth', 6
83
+
84
+ # @see #TT
85
+ # @see #a4
86
+ define_interval 'd5', MTK::Core::Interval[6], 'diminished fifth', 6
87
+
88
+
89
+ # @see #d6
90
+ define_interval 'P5', MTK::Core::Interval[7], 'perfect fifth', 7
91
+
92
+ # @see #P5
93
+ define_interval 'd6', MTK::Core::Interval[7], 'diminished sixth', 7
94
+
95
+
96
+ # @see #a5
97
+ define_interval 'm6', MTK::Core::Interval[8], 'minor sixth', 8
98
+
99
+ # @see #m6
100
+ define_interval 'a5', MTK::Core::Interval[8], 'augmented fifth', 8
19
101
 
20
- # perfect unison
21
- # @macro [attach] interval.define_constant
22
- # @attribute [r]
23
- # @return [$2] number of semitones in the interval $1
24
- define_constant 'P1', MTK::Core::Interval[0]
25
102
 
26
- # minor second
27
- # @macro [attach] interval.define_constant
28
- # @attribute [r]
29
- # @return [$2] number of semitones in the interval $1
30
- define_constant 'm2', MTK::Core::Interval[1]
103
+ # @see #d7
104
+ define_interval 'M6', MTK::Core::Interval[9], 'major sixth', 9
31
105
 
32
- # major second
33
- define_constant 'M2', MTK::Core::Interval[2]
106
+ # @see #M6
107
+ define_interval 'd7', MTK::Core::Interval[9], 'diminished seventh', 9
34
108
 
35
- # minor third
36
- define_constant 'm3', MTK::Core::Interval[3]
37
109
 
38
- # major third
39
- define_constant 'M3', MTK::Core::Interval[4]
110
+ # @see #a6
111
+ define_interval 'm7', MTK::Core::Interval[10], 'minor seventh', 10
40
112
 
41
- # pefect fourth
42
- define_constant 'P4', MTK::Core::Interval[5]
113
+ # @see #m7
114
+ define_interval 'a6', MTK::Core::Interval[10], 'augmented sixth', 10
43
115
 
44
- # tritone (AKA augmented fourth or diminished fifth)
45
- define_constant 'TT', MTK::Core::Interval[6]
46
116
 
47
- # perfect fifth
48
- define_constant 'P5', MTK::Core::Interval[7]
117
+ # @see #d8
118
+ define_interval 'M7', MTK::Core::Interval[11], 'major seventh', 11
49
119
 
50
- # minor sixth
51
- define_constant 'm6', MTK::Core::Interval[8]
120
+ # @see #M7
121
+ define_interval 'd8', MTK::Core::Interval[11], 'diminished octave', 11
52
122
 
53
- # major sixth
54
- define_constant 'M6', MTK::Core::Interval[9]
55
123
 
56
- # minor seventh
57
- define_constant 'm7', MTK::Core::Interval[10]
124
+ # @see #a7
125
+ define_interval 'P8', MTK::Core::Interval[12], 'perfect octave', 12
58
126
 
59
- # major seventh
60
- define_constant 'M7', MTK::Core::Interval[11]
127
+ # @see #P8
128
+ define_interval 'a7', MTK::Core::Interval[12], 'augmented seventh', 12
61
129
 
62
- # pefect octave
63
- define_constant 'P8', MTK::Core::Interval[12]
64
130
 
65
- # The values of all "psuedo constants" defined in this module
66
- INTERVALS = [P1, m2, M2, m3, M3, P4, TT, P5, m6, M6, m7, M7, P8].freeze
131
+ # All "psuedo constants" defined in this module
132
+ INTERVALS = [P1, d2, m2, a1, M2, d3, m3, a2, M3, d4, P4, a3, TT, a4, d5, P5, d6, m6, a5, M6, d7, m7, a6, M7, d8, P8, a7].freeze
67
133
 
68
134
  # The names of all "psuedo constants" defined in this module
69
- INTERVAL_NAMES = MTK::Core::Interval::NAMES
135
+ # @see MTK::Core::Interval::NAMES_BY_VALUE
136
+ INTERVAL_NAMES = MTK::Core::Interval::ALL_NAMES
70
137
 
71
138
  end
72
139
  end