kuromusic 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6bfa0bd38071a7eff140febd8dd6ecd0b306d36
4
- data.tar.gz: a56453eb5f4890ded06656a5951d0efc8f053ce4
3
+ metadata.gz: 88c575d4c2225a5beb8d75be9e12d85a8fb0d319
4
+ data.tar.gz: 73347be8d64387812c8f06b4371e76c81154d5e8
5
5
  SHA512:
6
- metadata.gz: 66ba15156b082ecf6a7e34e06d7086764d61efe202eea111a6e0b7781790cbbeec82aba8678db014268933da90acc40508af64579bab8899cb55e6c686903b71
7
- data.tar.gz: 99f38c4b27bfd4054f2ea1ced1feb5b4ec7f2c9fb3c5d393f786bda7bd6a3f9e008b775ad45e1e43d32a7f3994d618b88578c85274a5a73643130cf95c98c100
6
+ metadata.gz: 663b0c54a70421da648756bd07eb421db0bdf1cca094e61e4e08b9b07b57c0ba65cf22fd63e81764160b16aa5c22ecbe1b5768983ed19802e7ba8ec68496943e
7
+ data.tar.gz: aec00d04e584d9d925b405cdf470587a3df815cc6de092458177ec7de80995c55a620f7f883275eb83cd723f83907d8e48b711e802151c215d4e0cabf96fd4e4
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
+ *.mid
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  KuroMusic is midi controll library writed by ruby.
4
4
 
5
5
  ##version
6
- 0.0.1
6
+ 0.0.2
7
7
 
8
8
  ## Installation
9
9
 
@@ -28,15 +28,58 @@ you should require KuroMusic in your source code to use those method.
28
28
  require "KuroMusic"
29
29
  ```
30
30
 
31
- ###generate melody automaticaly
31
+ ###generating melody on yourself
32
+ ```ruby:
33
+ DELTA_TIME = 480
34
+ midi = Midi.new(DELTA_TIME, 1)
35
+ chords1 = [
36
+ Chord.new([Note.new("A", 4, 100, 480),Note.new("C", 4, 100, 480),Note.new("E", 4, 100, 480)]),
37
+ Chord.new([Note.new("B", 4, 100, 480),Note.new("D", 4, 100, 480),Note.new("F", 4, 100, 480)]),
38
+ Chord.new([Note.new("C", 4, 100, 480),Note.new("E", 4, 100, 480),Note.new("G", 4, 100, 480)]),
39
+ Chord.new([Note.new("D", 4, 100, 480),Note.new("F", 4, 100, 480),Note.new("A", 4, 100, 480)]),
40
+ ]
41
+ chords2 = [
42
+ Chord.new([Note.new("E", 4, 100, 480),Note.new("G", 4, 100, 480),Note.new("B", 4, 100, 480)]),
43
+ Chord.new([Note.new("F", 4, 100, 480),Note.new("A", 4, 100, 480),Note.new("C", 4, 100, 480)]),
44
+ Chord.new([Note.new("G", 4, 100, 480),Note.new("B", 4, 100, 480),Note.new("D", 4, 100, 480)]),
45
+ ]
46
+ midi.tracks[0] = Track.new(
47
+ [
48
+ Measure.new(chords1),
49
+ Measure.new(chords2)
50
+ ]
51
+ )
52
+ ```
53
+
54
+ ###generating melody automaticaly
32
55
  ```ruby:
33
56
  DELTA_TIME = 480
34
57
  midi = Midi.new(DELTA_TIME, 2)
35
- melo = MelodyGenerater.new(DELTA_TIME, Scale::MAJOR).extend(MelodyGenerater::Rand)
58
+ melo = MelodyGenerater.new(DELTA_TIME, Scale::MAJOR).extend(MelodyGenerater::Schenker)
36
59
  midi.tracks[0] = melo.cantus(10)
37
60
  midi.tracks[1] = melo.base(10)
38
61
  ```
39
62
 
63
+ ###changing tempo
64
+ ```ruby:
65
+ can = melo.cantus(10)
66
+ can[0].set_meta(Event::Meta::set_tempo(171))
67
+ ```
68
+
69
+ ###connecting tracks
70
+ ```ruby:
71
+ a_can = melo.cantus(10)
72
+ b_can = melo.cantus(10)
73
+ midi.tracks[0] = a_can + b_can
74
+ ```
75
+
76
+ ###connecting tracks
77
+ ```ruby:
78
+ a_can = melo.cantus(10)
79
+ b_can = melo.cantus(10)
80
+ midi.tracks[0] = a_can + b_can
81
+ ```
82
+
40
83
  ###write midi file
41
84
  ```ruby:
42
85
  Midi::IO.write("hoge3.mid", midi)
@@ -4,40 +4,32 @@ class MelodyGenerater
4
4
  def fiber(octave, notes, num)
5
5
  Fiber.new do |dur, velocity|
6
6
  while true do
7
- ons = (0..(num-1)).to_a.map{|item|
7
+ dur, velocity = Fiber.yield (0..(num-1)).to_a.map{|item|
8
8
  note = notes.sample
9
- [Event::Note::rest(0), Event::Note::on(note, octave, velocity)]
9
+ Note.new(note, octave, velocity, dur)
10
10
  }
11
- offs = ons.each_with_index.map{|item, i|
12
- if i == 0
13
- [Event::Note::rest(dur), Event::Note::off(item[1].args[:note], octave)]
14
- else
15
- [Event::Note::rest(0), Event::Note::off(item[1].args[:note], octave)]
16
- end
17
- }
18
- dur, velocity = Fiber.yield [ons, offs].flatten
19
11
  end
20
12
  end
21
13
  end
22
14
 
23
15
  def common(length, octave, _note_times, notes)
24
- events = []
25
16
  f = fiber(octave, notes, 2)
26
- length.times {|i|
17
+ (1..length).map {|i|
18
+ chords = []
27
19
  note_times = _note_times[0..(_note_times.length - 1)]
28
20
  dur = note_times.sample
29
- events.concat f.resume(dur, 100)
21
+ chords.push Chord.new(f.resume(dur, 100))
30
22
  _sub = @measure - dur
31
23
  note_times.reverse.each_with_index {|t, i|
32
24
  times = note_times[0..(note_times.length - 1 - i)]
33
25
  while _sub >= t do
34
26
  dur = times.sample
35
- events.concat f.resume(dur, 100)
27
+ chords.push Chord.new(f.resume(dur, 100))
36
28
  _sub = _sub - dur
37
29
  end
38
30
  }
31
+ Measure.new(chords)
39
32
  }
40
- events
41
33
  end
42
34
 
43
35
  public
@@ -8,45 +8,37 @@ class MelodyGenerater
8
8
  Fiber.new do |dur, velocity|
9
9
  while true do
10
10
  notes.each{|n|
11
- ons = (0..(num-1)).to_a.map{|item|
11
+ dur, velocity = Fiber.yield (0..(num-1)).to_a.map{|item|
12
12
  _n = n + (2 * item)
13
13
  octave = octave + _n / 12
14
14
  number = _n % 12
15
15
  note = Scale::number_to_code(number)
16
- [Event::Note::rest(0), Event::Note::on(note, octave, velocity)]
16
+ Note.new(note, octave, velocity, dur)
17
17
  }
18
- offs = ons.each_with_index.map{|item, i|
19
- if i == 0
20
- [Event::Note::rest(dur), Event::Note::off(item[1].args[:note], octave)]
21
- else
22
- [Event::Note::rest(0), Event::Note::off(item[1].args[:note], octave)]
23
- end
24
- }
25
- dur, velocity = Fiber.yield [ons, offs].flatten
26
18
  }
27
19
  end
28
20
  end
29
21
  end
30
22
 
31
23
  def common(length, octave, _note_times, notes)
32
- events = []
33
24
  f = fiber(octave, notes, 2)
34
- length.times {|i|
25
+ (1..length).map {|i|
26
+ chords = []
35
27
  note_times = _note_times[0..(_note_times.length - 1)]
36
28
  dur = note_times.sample
37
- events.concat f.resume(dur, 100)
29
+ chords.push Chord.new(f.resume(dur, 100))
38
30
  _sub = @measure - dur
39
31
  note_times.reverse.each_with_index {|t, i|
40
32
  times = note_times[0..(note_times.length - 1 - i)]
41
33
  while _sub >= t do
42
34
  note = @scale.sample
43
35
  dur = times.sample
44
- events.concat [Event::Note::rest(0), Event::Note::on(note, octave, 100), Event::Note::rest(dur), Event::Note::off(note, octave)]
36
+ chords.push Chord.new([Note.new(note, octave, 100, dur)])
45
37
  _sub = _sub - dur
46
38
  end
47
39
  }
40
+ Measure.new(chords)
48
41
  }
49
- events
50
42
  end
51
43
 
52
44
  public
@@ -0,0 +1,28 @@
1
+ require_relative "Event"
2
+
3
+ class Midi
4
+ private
5
+ module Chord
6
+ public
7
+ def to_bin()
8
+ predur = 0
9
+ ons = []
10
+ offs = []
11
+ maxdur = 0
12
+ @notes.sort {|a, b|
13
+ a.dur <=> b.dur
14
+ }.each {|n|
15
+ ons += [::Event::Note::rest(0), n.get_on_event]
16
+ maxdur = n.dur if maxdur < n.dur
17
+ }.each {|n|
18
+ currentdur = n.dur - predur
19
+ offs += [::Event::Note::rest(currentdur), n.get_off_event]
20
+ predur = n.dur
21
+ }
22
+ (ons + offs).map {|e|
23
+ e.extend(Midi::Event)
24
+ e.to_bin
25
+ }.flatten!
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,6 @@
1
1
  class Midi
2
2
  private
3
- module MidiEvent
3
+ module Event
4
4
  private
5
5
  def var_len n
6
6
  n < 0x80 ? [n] : [(n>>7|0x80), n % 0x80]
@@ -8,13 +8,13 @@ class Midi
8
8
 
9
9
  def note_to_bin()
10
10
  case @args[:method]
11
- when Event::EventType::Note::REST
11
+ when ::Event::EventType::Note::REST
12
12
  dur = var_len(@args[:dur])
13
13
  return dur
14
- when Event::EventType::Note::OFF
14
+ when ::Event::EventType::Note::OFF
15
15
  note_num = NOTE[@args[:note]] + @args[:octave] * OCTAVE_UNIT
16
16
  return [0x80, note_num, 0]
17
- when Event::EventType::Note::ON
17
+ when ::Event::EventType::Note::ON
18
18
  note_num = NOTE[@args[:note]] + @args[:octave] * OCTAVE_UNIT
19
19
  return [0x90, note_num, @args[:velocity]]
20
20
  end
@@ -22,7 +22,7 @@ class Midi
22
22
 
23
23
  def meta_to_bin()
24
24
  case @args[:method]
25
- when Event::EventType::Meta::SET_TEMPO
25
+ when ::Event::EventType::Meta::SET_TEMPO
26
26
  tempo = 60000000 / @args[:tempo]
27
27
  return [0, 0xff, 0x51, 0x03, tempo >> 16, tempo >> 8, tempo % 256]
28
28
  end
@@ -33,9 +33,10 @@ class Midi
33
33
  OCTAVE_UNIT = 12
34
34
 
35
35
  def to_bin()
36
- if @args[:type] == Event::EventType::NOTE
36
+ #p self.args
37
+ if @args[:type] == ::Event::EventType::NOTE
37
38
  return note_to_bin
38
- elsif @args[:type] == Event::EventType::META
39
+ elsif @args[:type] == ::Event::EventType::META
39
40
  return meta_to_bin
40
41
  end
41
42
  end
@@ -0,0 +1,17 @@
1
+ require_relative "Chord"
2
+ require_relative "Event"
3
+
4
+ class Midi
5
+ private
6
+ module Measure
7
+ def to_bin()
8
+ @metas.map {|m|
9
+ m.extend(Midi::Event)
10
+ m.to_bin
11
+ }.flatten.concat @chords.map {|c|
12
+ c.extend(Midi::Chord)
13
+ c.to_bin
14
+ }.flatten!
15
+ end
16
+ end
17
+ end
@@ -1,11 +1,13 @@
1
+ require_relative "Measure"
2
+
1
3
  class Midi
2
4
  private
3
- module MidiTrack
5
+ module Track
4
6
  def to_bin()
5
7
  track = []
6
- @events.each {|e|
7
- e.extend(MidiEvent)
8
- track.concat e.to_bin
8
+ @measures.each {|m|
9
+ m.extend(Midi::Measure)
10
+ track.concat m.to_bin
9
11
  }
10
12
  tl = track.concat([0, 0xff, 0x02, 0]).size
11
13
  result = [0x4d, 0x54, 0x72, 0x6b, tl >> 24, tl >> 16, tl >> 8, tl % 256].concat track
@@ -1,5 +1,4 @@
1
- require_relative "MIDI/MidiEvent"
2
- require_relative "MIDI/MidiTrack"
1
+ require_relative "MIDI/Track"
3
2
 
4
3
  class Midi
5
4
  module IO
@@ -14,11 +13,11 @@ class Midi
14
13
  dtime = midi.dtime
15
14
  file.write [0x4d, 0x54, 0x68, 0x64, 0, 0, 0, 6, 0, 1, track_num >> 8, track_num % 256, dtime >> 8, dtime % 256].pack('C*')
16
15
  midi.tracks.each {|track|
17
- track.extend(MidiTrack)
16
+ track.extend(Midi::Track)
18
17
  m = track.to_bin
19
18
  track.each {|e|
20
19
  #[e.args[:type], e.args[:method], e.args[:note], e.args[:octave], e.args[:dur], e.args[:velocity]]
21
- p e.args
20
+ #p e.args
22
21
  }
23
22
  #p m
24
23
  file.write m.pack('C*')
@@ -10,7 +10,7 @@ class Midi
10
10
  end
11
11
 
12
12
  def initialize(dtime, track_num)
13
- @tracks = Array.new(track_num, Track.new([]))
13
+ @tracks = Array.new(track_num, ::Track.new([]))
14
14
  @dtime = dtime
15
15
  end
16
16
  end
@@ -1,4 +1,3 @@
1
- require_relative "Event"
2
1
  require_relative "Track"
3
2
 
4
3
  require_relative "Generator/Random"
@@ -8,4 +8,9 @@ class Event
8
8
  def initialize(args)
9
9
  @args = args
10
10
  end
11
+
12
+ public
13
+ def inspect()
14
+ "< " + @args.to_s + " >"
15
+ end
11
16
  end
@@ -0,0 +1,24 @@
1
+ require_relative "Note/Event"
2
+
3
+ class Note < Object
4
+ attr_reader :note, :octave, :velocity, :dur
5
+ public
6
+ def initialize(note, octave, velocity, dur)
7
+ @note = note
8
+ @octave = octave
9
+ @dur = dur
10
+ @velocity = velocity
11
+ end
12
+
13
+ def get_on_event()
14
+ Event::Note::on(@note, @octave, @velocity)
15
+ end
16
+
17
+ def get_off_event()
18
+ Event::Note::off(@note, @octave)
19
+ end
20
+
21
+ def inspect()
22
+ "<:note=>" + @note + ", :octave=>" + @octave.to_s + ", :velocity:=>" + @velocity.to_s + ", :duration=>" + @dur.to_s + ">"
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "Chord/Note"
2
+
3
+ class Chord < Object
4
+ def initialize(notes = [])
5
+ @notes = notes
6
+ end
7
+
8
+ def inspect()
9
+ @notes.map{|n| n.inspect}.join(",\n ")
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ require_relative "Measure/Chord"
2
+
3
+ class Measure < Object
4
+ def initialize(chords = [], metas = [])
5
+ @chords = chords
6
+ @metas = metas
7
+ end
8
+
9
+ def set_meta(meta_event)
10
+ if meta_event.class.to_s != "Event"
11
+ self.error_puts("ArgumentTypeError", "undefined method `+'")
12
+ elsif meta_event.args[:type] != Event::EventType::META
13
+ self.error_puts("EventTypeError", "undefined method `+'")
14
+ end
15
+ @metas.push(meta_event)
16
+ self
17
+ end
18
+
19
+ def inspect()
20
+ "
21
+ " + @metas.map{|m| m.inspect}.join("\n ),\n (\n ") + "
22
+ (
23
+ " + @chords.map{|m| m.inspect}.join("\n ),\n (\n ") + "
24
+ )"
25
+ end
26
+ end
@@ -1,17 +1,18 @@
1
1
  require_relative "Object"
2
+ require_relative "Track/Measure"
2
3
 
3
4
  class Track < Object
4
- def initialize(events = [])
5
- @events = events
5
+ def initialize(measures = [])
6
+ @measures = measures
6
7
  end
7
8
 
8
9
  def [](index)
9
- @events[index]
10
+ @measures[index]
10
11
  end
11
12
 
12
13
  def []=(index, obj)
13
- if obj.class.to_s == "Event"
14
- @events[index] = obj
14
+ if obj.class.to_s == "Measure"
15
+ @measures[index] = obj
15
16
  else
16
17
  self.error_puts("ArgumentTypeError", "undefined method `+'")
17
18
  end
@@ -19,16 +20,16 @@ class Track < Object
19
20
 
20
21
  def insert(index, *objs)
21
22
  objs.each {|e|
22
- if e.class.to_s != "Event"
23
+ if e.class.to_s != "Measure"
23
24
  self.error_puts("ArgumentTypeError", "undefined method `+'")
24
25
  end
25
26
  }
26
- @events.insert(index, *objs)
27
+ @measures.insert(index, *objs)
27
28
  end
28
29
 
29
30
  def push(obj)
30
- if obj.class.to_s == "Event"
31
- @events.push(obj)
31
+ if obj.class.to_s == "Measure"
32
+ @measures.push(obj)
32
33
  else
33
34
  self.error_puts("ArgumentTypeError", "undefined method `+'")
34
35
  end
@@ -36,8 +37,8 @@ class Track < Object
36
37
  end
37
38
 
38
39
  def unshift(obj)
39
- if obj.class.to_s == "Event"
40
- @events.unshift(obj)
40
+ if obj.class.to_s == "Measure"
41
+ @measures.unshift(obj)
41
42
  else
42
43
  self.error_puts("ArgumentTypeError", "undefined method `+'")
43
44
  end
@@ -45,26 +46,26 @@ class Track < Object
45
46
  end
46
47
 
47
48
  def each()
48
- @events.each {|e|
49
+ @measures.each {|e|
49
50
  yield(e)
50
51
  }
51
52
  end
52
53
 
53
54
  def each_with_index()
54
- @events.each {|e|
55
+ @measures.each {|e|
55
56
  yield(e)
56
57
  }
57
58
  end
58
59
 
59
60
  def map()
60
- result = @events.map {|e|
61
+ result = @measures.map {|e|
61
62
  yield(e)
62
63
  }
63
64
  Track.new(result)
64
65
  end
65
66
 
66
67
  def map!()
67
- @events.map! {|e|
68
+ @measures.map! {|e|
68
69
  yield(e)
69
70
  }
70
71
  end
@@ -72,7 +73,7 @@ class Track < Object
72
73
  def +(other)
73
74
  tmp = []
74
75
  if other.class.to_s == "Track"
75
- tmp.push(@events)
76
+ tmp.push(@measures)
76
77
  other.each{|e|
77
78
  tmp.push(e)
78
79
  }
@@ -82,4 +83,10 @@ class Track < Object
82
83
  end
83
84
  Track.new(tmp)
84
85
  end
86
+
87
+ def inspect()
88
+ "[
89
+ " + @measures.map{|m| m.inspect}.join("\n ----------------------------------------------------------\n ") + "
90
+ ]"
91
+ end
85
92
  end
@@ -1,3 +1,3 @@
1
1
  module Kuromusic
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/kuromusic.rb CHANGED
@@ -1,4 +1,5 @@
1
- require "kuromusic/version"
1
+ require_relative "kuromusic/version"
2
2
  require_relative "kuromusic/MIDI"
3
3
  require_relative "kuromusic/Scale"
4
+ require_relative "kuromusic/Track"
4
5
  require_relative "kuromusic/MelodyGenerater"
data/lib/sample/main.rb CHANGED
@@ -2,15 +2,17 @@ require_relative "../KuroMusic"
2
2
 
3
3
  DELTA_TIME = 480
4
4
  midi = Midi.new(DELTA_TIME, 2)
5
- melo = MelodyGenerater.new(DELTA_TIME, Scale::MAJOR, []).extend(MelodyGenerater::Schenker)
5
+ melo = MelodyGenerater.new(DELTA_TIME, Scale::MAJOR).extend(MelodyGenerater::Schenker)
6
6
 
7
- a_can = melo.cantus(5).unshift(Event::Meta::set_tempo(171))
8
- b_can = melo.cantus(5)#.unshift(Event::Meta::set_tempo(140))
9
- s_can = melo.cantus(10)#.unshift(Event::Meta::set_tempo(190))
7
+ a_can = melo.cantus(5)
8
+ a_can[0].set_meta(Event::Meta::set_tempo(171))
9
+ b_can = melo.cantus(5)
10
+ s_can = melo.cantus(10)
10
11
 
11
- a_bas = melo.base(5).unshift(Event::Meta::set_tempo(171))
12
- b_bas = melo.base(5)#.unshift(Event::Meta::set_tempo(140))
13
- s_bas = melo.base(10)#.unshift(Event::Meta::set_tempo(190))
12
+ a_bas = melo.base(5)
13
+ a_bas[0].set_meta(Event::Meta::set_tempo(171))
14
+ b_bas = melo.base(5)
15
+ s_bas = melo.base(10)
14
16
 
15
17
  midi.tracks[0] = a_can + b_can + s_can + a_can + b_can + s_can + a_can
16
18
  midi.tracks[1] = a_bas + b_bas + s_bas + a_bas + b_bas + s_bas + a_bas
@@ -0,0 +1,25 @@
1
+ require_relative "../KuroMusic"
2
+
3
+ DELTA_TIME = 480
4
+ midi = Midi.new(DELTA_TIME, 1)
5
+ chords1 = [
6
+ Chord.new([Note.new("A", 4, 100, 480),Note.new("C", 4, 100, 480),Note.new("E", 4, 100, 480)]),
7
+ Chord.new([Note.new("B", 4, 100, 480),Note.new("D", 4, 100, 480),Note.new("F", 4, 100, 480)]),
8
+ Chord.new([Note.new("C", 4, 100, 480),Note.new("E", 4, 100, 480),Note.new("G", 4, 100, 480)]),
9
+ Chord.new([Note.new("D", 4, 100, 480),Note.new("F", 4, 100, 480),Note.new("A", 4, 100, 480)]),
10
+ ]
11
+ chords2 = [
12
+ Chord.new([Note.new("E", 4, 100, 480),Note.new("G", 4, 100, 480),Note.new("B", 4, 100, 480)]),
13
+ Chord.new([Note.new("F", 4, 100, 480),Note.new("A", 4, 100, 480),Note.new("C", 4, 100, 480)]),
14
+ Chord.new([Note.new("G", 4, 100, 480),Note.new("B", 4, 100, 480),Note.new("D", 4, 100, 480)]),
15
+ ]
16
+ midi.tracks[0] = Track.new(
17
+ [
18
+ Measure.new(chords1),
19
+ Measure.new(chords2)
20
+ ]
21
+ )
22
+
23
+ p midi.tracks[0]
24
+
25
+ Midi::IO.write("../../hoge3.mid", midi)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuromusic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - "黒澤 預生"
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-23 00:00:00.000000000 Z
11
+ date: 2016-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,23 +53,29 @@ files:
53
53
  - kuromusic.gemspec
54
54
  - lib/kuromusic.rb
55
55
  - lib/kuromusic/ChordProgressionGenerator.rb
56
- - lib/kuromusic/Event.rb
57
- - lib/kuromusic/Event/EventType.rb
58
- - lib/kuromusic/Event/MetaEvent.rb
59
- - lib/kuromusic/Event/NoteEvent.rb
60
56
  - lib/kuromusic/Generator/Random.rb
61
57
  - lib/kuromusic/Generator/Schenker.rb
62
58
  - lib/kuromusic/IO/MIDI.rb
63
- - lib/kuromusic/IO/MIDI/MidiEvent.rb
64
- - lib/kuromusic/IO/MIDI/MidiTrack.rb
59
+ - lib/kuromusic/IO/MIDI/Chord.rb
60
+ - lib/kuromusic/IO/MIDI/Event.rb
61
+ - lib/kuromusic/IO/MIDI/Measure.rb
62
+ - lib/kuromusic/IO/MIDI/Track.rb
65
63
  - lib/kuromusic/Key.rb
66
64
  - lib/kuromusic/MIDI.rb
67
65
  - lib/kuromusic/MelodyGenerater.rb
68
66
  - lib/kuromusic/Object.rb
69
67
  - lib/kuromusic/Scale.rb
70
68
  - lib/kuromusic/Track.rb
69
+ - lib/kuromusic/Track/Measure.rb
70
+ - lib/kuromusic/Track/Measure/Chord.rb
71
+ - lib/kuromusic/Track/Measure/Chord/Note.rb
72
+ - lib/kuromusic/Track/Measure/Chord/Note/Event.rb
73
+ - lib/kuromusic/Track/Measure/Chord/Note/Event/EventType.rb
74
+ - lib/kuromusic/Track/Measure/Chord/Note/Event/MetaEvent.rb
75
+ - lib/kuromusic/Track/Measure/Chord/Note/Event/NoteEvent.rb
71
76
  - lib/kuromusic/version.rb
72
77
  - lib/sample/main.rb
78
+ - lib/sample/main2.rb
73
79
  homepage: ''
74
80
  licenses:
75
81
  - MIT