Module: MTK

Defined in:
lib/mtk.rb,
lib/mtk/core/pitch.rb,
lib/mtk/events/note.rb,
lib/mtk/io/notation.rb,
lib/mtk/events/event.rb,
lib/mtk/groups/chord.rb,
lib/mtk/io/midi_file.rb,
lib/mtk/lang/pitches.rb,
lib/mtk/core/duration.rb,
lib/mtk/core/interval.rb,
lib/mtk/groups/melody.rb,
lib/mtk/io/midi_input.rb,
lib/mtk/core/intensity.rb,
lib/mtk/io/midi_output.rb,
lib/mtk/lang/durations.rb,
lib/mtk/lang/intervals.rb,
lib/mtk/patterns/chain.rb,
lib/mtk/patterns/cycle.rb,
lib/mtk/patterns/lines.rb,
lib/mtk/events/timeline.rb,
lib/mtk/io/jsound_input.rb,
lib/mtk/patterns/choice.rb,
lib/mtk/core/pitch_class.rb,
lib/mtk/events/parameter.rb,
lib/mtk/io/jsound_output.rb,
lib/mtk/io/unimidi_input.rb,
lib/mtk/lang/intensities.rb,
lib/mtk/patterns/pattern.rb,
lib/mtk/groups/collection.rb,
lib/mtk/io/unimidi_output.rb,
lib/mtk/patterns/for_each.rb,
lib/mtk/patterns/function.rb,
lib/mtk/patterns/sequence.rb,
lib/mtk/lang/pitch_classes.rb,
lib/mtk/io/dls_synth_device.rb,
lib/mtk/io/dls_synth_output.rb,
lib/mtk/patterns/palindrome.rb,
lib/mtk/sequencers/sequencer.rb,
lib/mtk/lang/pseudo_constants.rb,
lib/mtk/groups/pitch_class_set.rb,
lib/mtk/groups/pitch_collection.rb,
lib/mtk/sequencers/event_builder.rb,
lib/mtk/sequencers/step_sequencer.rb,
lib/mtk/sequencers/legato_sequencer.rb,
lib/mtk/sequencers/rhythmic_sequencer.rb,
lib/mtk/lang/parser.rb

Overview

The top level module for this library

Defined Under Namespace

Modules: Core, Events, Groups, IO, Lang, Patterns, Sequencers

Class Method Summary collapse

Class Method Details

.Chord(*anything) ⇒ Object

Construct an ordered MTK::Groups::Chord with no duplicates.



51
52
53
# File 'lib/mtk/groups/chord.rb', line 51

def Chord(*anything)
  MTK::Groups::Chord.new MTK::Groups.to_pitches(*anything)
end

.Duration(*anything) ⇒ Object

Construct a Duration from any supported type



202
203
204
205
206
207
208
209
210
# File 'lib/mtk/core/duration.rb', line 202

def Duration(*anything)
  anything = anything.first if anything.length == 1
  case anything
    when Numeric then MTK::Core::Duration[anything]
    when String, Symbol then MTK::Core::Duration.from_s(anything)
    when Duration then anything
    else raise "Duration doesn't understand #{anything.class}"
  end
end

.Intensity(*anything) ⇒ Object

Construct a Duration from any supported type



147
148
149
150
151
152
153
154
155
# File 'lib/mtk/core/intensity.rb', line 147

def Intensity(*anything)
  anything = anything.first if anything.length == 1
  case anything
    when Numeric then MTK::Core::Intensity[anything]
    when String, Symbol then MTK::Core::Intensity.from_s(anything)
    when Intensity then anything
    else raise "Intensity doesn't understand #{anything.class}"
  end
end

.Interval(*anything) ⇒ Object

Construct a Duration from any supported type



146
147
148
149
150
151
152
153
154
# File 'lib/mtk/core/interval.rb', line 146

def Interval(*anything)
  anything = anything.first if anything.length == 1
  case anything
    when Numeric then MTK::Core::Interval[anything]
    when String, Symbol then MTK::Core::Interval.from_s(anything)
    when Interval then anything
    else raise "Interval doesn't understand #{anything.class}"
  end
end

.Melody(*anything) ⇒ Object

Construct an ordered MTK::Groups::Melody that allows duplicates



91
92
93
# File 'lib/mtk/groups/melody.rb', line 91

def Melody(*anything)
  MTK::Groups::Melody.new MTK::Groups.to_pitches(*anything)
end

.MIDIFile(f) ⇒ Object

Note:

Only available if you require ‘mtk/midi/file’

Shortcut for MTK::IO::MIDIFile.new



203
204
205
# File 'lib/mtk/io/midi_file.rb', line 203

def MIDIFile(f)
  ::MTK::IO::MIDIFile.new(f)
end

.Note(*anything) ⇒ Object

Construct a MTK::Events::Note from a list of any supported type for the arguments: pitch, intensity, duration, channel



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
# File 'lib/mtk/events/note.rb', line 72

def Note(*anything)
  anything = anything.first if anything.size == 1
  case anything
    when MTK::Events::Note then anything

    when MTK::Core::Pitch then MTK::Events::Note.new(anything)

    when Array
      pitch = nil
      duration = nil
      intensity = nil
      channel = nil
      unknowns = []
      anything.each do |item|
        case item
          when MTK::Core::Pitch then pitch = item
          when MTK::Core::Duration then duration = item
          when MTK::Core::Intensity then intensity = item
          else unknowns << item
        end
      end

      pitch = MTK.Pitch(unknowns.shift) if pitch.nil? and not unknowns.empty?
      raise "MTK::Note() couldn't find a pitch in arguments: #{anything.inspect}" if pitch.nil?

      duration  = MTK.Duration(unknowns.shift)  if duration.nil?  and not unknowns.empty?
      intensity = MTK.Intensity(unknowns.shift) if intensity.nil? and not unknowns.empty?
      channel = unknowns.shift.to_i if channel.nil? and not unknowns.empty?

      duration  ||= MTK::Events::Note::DEFAULT_DURATION
      intensity ||= MTK::Events::Note::DEFAULT_INTENSITY

      MTK::Events::Note.new( pitch, duration, intensity, channel )

    else
      raise "MTK::Note() doesn't understand #{anything.class}"
  end
end

.Pitch(*anything) ⇒ Object

Construct a Pitch from any supported type



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/mtk/core/pitch.rb', line 137

def Pitch(*anything)
  anything = anything.first if anything.length == 1
  case anything
    when Numeric then MTK::Core::Pitch.from_f(anything)
    when String, Symbol then MTK::Core::Pitch.from_s(anything)
    when MTK::Core::Pitch then anything
    when Array
      if anything.length == 2
        MTK::Core::Pitch[*anything]
      else
        MTK::Core::Pitch.new(*anything)
      end
    else raise ArgumentError.new("Pitch doesn't understand #{anything.class}")
  end
end

.PitchClass(anything) ⇒ Object

Construct a PitchClass from any supported type

Parameters:



184
185
186
187
188
189
190
191
# File 'lib/mtk/core/pitch_class.rb', line 184

def PitchClass(anything)
  case anything
    when Numeric then MTK::Core::PitchClass.from_f(anything)
    when String, Symbol then MTK::Core::PitchClass.from_s(anything)
    when MTK::Core::PitchClass then anything
    else raise ArgumentError.new("PitchClass doesn't understand #{anything.class}")
  end
end

.PitchClassSet(*anything) ⇒ Object



158
159
160
# File 'lib/mtk/groups/pitch_class_set.rb', line 158

def PitchClassSet(*anything)
  MTK::Groups::PitchClassSet.new MTK::Groups.to_pitch_classes(*anything)
end