kuromusic 0.0.2 → 0.0.3

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: 88c575d4c2225a5beb8d75be9e12d85a8fb0d319
4
- data.tar.gz: 73347be8d64387812c8f06b4371e76c81154d5e8
3
+ metadata.gz: 8db1094e3fb4f19902a4bb5c15aba0c6639eecc7
4
+ data.tar.gz: cbc36b3a67c2665aaf004567df380be12632dff5
5
5
  SHA512:
6
- metadata.gz: 663b0c54a70421da648756bd07eb421db0bdf1cca094e61e4e08b9b07b57c0ba65cf22fd63e81764160b16aa5c22ecbe1b5768983ed19802e7ba8ec68496943e
7
- data.tar.gz: aec00d04e584d9d925b405cdf470587a3df815cc6de092458177ec7de80995c55a620f7f883275eb83cd723f83907d8e48b711e802151c215d4e0cabf96fd4e4
6
+ metadata.gz: 8454abcb46e6d7900b839e9754efaec96d567b9d4a2b6625f8ffc2a14d5388c97a9761ff5771eab52674fc44c32652ae2718c0fb9e0a2b0a30d90ca6bd60ef84
7
+ data.tar.gz: ad702556dd8746de404afece9e66d87f33395e0d6dbda8964fd8d1533bd104ced6a75a65000a5a70152b76376b4a83107eb6d99026c6447034fec2cd469a34d6
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  *.a
14
14
  mkmf.log
15
15
  *.mid
16
+ /archives/
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # KuroMusic
2
2
 
3
- KuroMusic is midi controll library writed by ruby.
3
+ KuroMusic is midi controll library written by ruby.
4
4
 
5
5
  ##version
6
- 0.0.2
6
+ 0.0.3
7
7
 
8
8
  ## Installation
9
9
 
@@ -28,22 +28,30 @@ you should require KuroMusic in your source code to use those method.
28
28
  require "KuroMusic"
29
29
  ```
30
30
 
31
- ###generating melody on yourself
31
+ ###define DELTA TIME
32
+
33
+ you should define delta time.
34
+ delta time is imaginary time as quarter note used in MIDI.
32
35
  ```ruby:
33
36
  DELTA_TIME = 480
37
+ ```
38
+
39
+ ###generating melody on yourself
40
+ ```ruby:
34
41
  midi = Midi.new(DELTA_TIME, 1)
35
42
  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)]),
43
+ Chord.new([Note.new(-3, 4, 100, 480),Note.new(0, 4, 100, 480),Note.new(4, 4, 100, 480)]),
44
+ Chord.new([Note.new(-1, 4, 100, 480),Note.new(2, 4, 100, 480),Note.new(5, 4, 100, 480)]),
45
+ Chord.new([Note.new(0, 4, 100, 480),Note.new(4, 4, 100, 480),Note.new(7, 4, 100, 480)]),
46
+ Chord.new([Note.new(2, 4, 100, 480),Note.new(5, 4, 100, 480),Note.new(9, 4, 100, 480)]),
40
47
  ]
41
48
  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)]),
49
+ Chord.new([Note.new(4, 4, 100, 480),Note.new(7, 4, 100, 480),Note.new(11, 4, 100, 480)]),
50
+ Chord.new([Note.new(5, 4, 100, 480),Note.new(9, 4, 100, 480),Note.new(0, 5, 100, 480)]),
51
+ Chord.new([Note.new(7, 4, 100, 480),Note.new(11, 4, 100, 480),Note.new(2, 5, 100, 480)]),
45
52
  ]
46
53
  midi.tracks[0] = Track.new(
54
+ Key::C::NATURAL,
47
55
  [
48
56
  Measure.new(chords1),
49
57
  Measure.new(chords2)
@@ -55,36 +63,77 @@ midi.tracks[0] = Track.new(
55
63
  ```ruby:
56
64
  DELTA_TIME = 480
57
65
  midi = Midi.new(DELTA_TIME, 2)
58
- melo = MelodyGenerater.new(DELTA_TIME, Scale::MAJOR).extend(MelodyGenerater::Schenker)
59
- midi.tracks[0] = melo.cantus(10)
60
- midi.tracks[1] = melo.base(10)
66
+ melo = MelodyGenerater.new(DELTA_TIME, Key::E::NATURAL, Scale::MAJOR).extend(MelodyGenerater::Schenker)
67
+ midi.tracks[0] = melo.generate(10, 4)
68
+ midi.tracks[1] = melo.generate(10, 2)
61
69
  ```
62
70
 
63
71
  ###changing tempo
64
72
  ```ruby:
65
- can = melo.cantus(10)
66
- can[0].set_meta(Event::Meta::set_tempo(171))
73
+ can_track = melo.generate(10, 4)
74
+ can_track[0].set_meta(Event::Meta::set_tempo(171))
67
75
  ```
68
76
 
69
77
  ###connecting tracks
70
78
  ```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
79
+ a_can_track = melo.generate(10, 4)
80
+ b_can_track = melo.generate(10, 4)
81
+ midi.tracks[0] = a_can_track + b_can_track
81
82
  ```
82
83
 
83
84
  ###write midi file
84
85
  ```ruby:
85
- Midi::IO.write("hoge3.mid", midi)
86
+ Midi::IO.write("hoge.mid", midi)
86
87
  ```
87
88
 
89
+ ##reference
90
+ ###Note
91
+ Note.new(degree, octave, velocity, duration)
92
+
93
+ duration is based on delta time.
94
+
95
+ ###Chord
96
+ Chord.new([Notes])
97
+
98
+ ###Measure
99
+ Measure.new([Chords])
100
+
101
+ ###Track
102
+ Track.new(key, [Measures])
103
+
104
+ ###Key
105
+ - Key::C::NATURAL
106
+ - Key::B::SHARP
107
+ - Key::C::SHARP
108
+ - Key::D::FLAT
109
+ - Key::D::NATURAL
110
+ - Key::D::SHARP
111
+ - Key::E::FLAT
112
+ - Key::E::NATURAL
113
+ - Key::F::FLAT
114
+ - Key::E::SHARP
115
+ - Key::F::NATURAL
116
+ - Key::C::FLAT
117
+ - Key::B::NATURAL
118
+ - Key::A::SHARP
119
+ - Key::B::FLAT
120
+ - Key::A::NATURAL
121
+ - Key::A::FLAT
122
+ - Key::G::SHARP
123
+ - Key::G::NATURAL
124
+ - Key::G::FLAT
125
+ - Key::F::SHARP
126
+
127
+ ###Scale
128
+ - Scale::MAJOR
129
+ - Scale::MINOR
130
+ - Scale::PENTATONIC
131
+ - Scale::WHOLE_TONE
132
+ - Scale::OKINAWA
133
+ - Scale::INDIAN
134
+ - Scale::GYPSY
135
+ - Scale::KUMOI
136
+
88
137
  ## Contributing
89
138
 
90
139
  1. Fork it ( https://github.com/[my-github-username]/kuromusic/fork )
@@ -33,13 +33,8 @@ class MelodyGenerater
33
33
  end
34
34
 
35
35
  public
36
- def base(length)
37
- octave = 2
38
- Track.new(common(length, octave, @note_times[4..5], @scale))
39
- end
40
- def cantus(length)
41
- octave = 4
42
- Track.new(common(length, octave, @note_times[1..3], @scale))
36
+ def generate(length, octave)
37
+ Track.new(@key, common(length, octave, @note_times[2..3], @scale))
43
38
  end
44
39
  end
45
40
  end
@@ -11,9 +11,8 @@ class MelodyGenerater
11
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
- number = _n % 12
15
- note = Scale::number_to_code(number)
16
- Note.new(note, octave, velocity, dur)
14
+ degree = _n % 12
15
+ Note.new(degree, octave, velocity, dur)
17
16
  }
18
17
  }
19
18
  end
@@ -42,14 +41,8 @@ class MelodyGenerater
42
41
  end
43
42
 
44
43
  public
45
- def base(length)
46
- octave = 2
47
- Track.new(common(length, octave, @note_times[4..5], BACK))
48
- end
49
-
50
- def cantus(length)
51
- octave = 4
52
- Track.new(common(length, octave, @note_times[2..3], MIDDLE))
44
+ def generate(length, octave)
45
+ Track.new(@key, common(length, octave, @note_times[2..3], @scale))
53
46
  end
54
47
  end
55
48
  end
@@ -4,7 +4,7 @@ class Midi
4
4
  private
5
5
  module Chord
6
6
  public
7
- def to_bin()
7
+ def to_bin(key)
8
8
  predur = 0
9
9
  ons = []
10
10
  offs = []
@@ -12,11 +12,11 @@ class Midi
12
12
  @notes.sort {|a, b|
13
13
  a.dur <=> b.dur
14
14
  }.each {|n|
15
- ons += [::Event::Note::rest(0), n.get_on_event]
15
+ ons += [::Event::Note::rest(0), n.get_on_event(key)]
16
16
  maxdur = n.dur if maxdur < n.dur
17
17
  }.each {|n|
18
18
  currentdur = n.dur - predur
19
- offs += [::Event::Note::rest(currentdur), n.get_off_event]
19
+ offs += [::Event::Note::rest(currentdur), n.get_off_event(key)]
20
20
  predur = n.dur
21
21
  }
22
22
  (ons + offs).map {|e|
@@ -4,13 +4,13 @@ require_relative "Event"
4
4
  class Midi
5
5
  private
6
6
  module Measure
7
- def to_bin()
7
+ def to_bin(key)
8
8
  @metas.map {|m|
9
9
  m.extend(Midi::Event)
10
10
  m.to_bin
11
11
  }.flatten.concat @chords.map {|c|
12
12
  c.extend(Midi::Chord)
13
- c.to_bin
13
+ c.to_bin(key)
14
14
  }.flatten!
15
15
  end
16
16
  end
@@ -7,7 +7,7 @@ class Midi
7
7
  track = []
8
8
  @measures.each {|m|
9
9
  m.extend(Midi::Measure)
10
- track.concat m.to_bin
10
+ track.concat m.to_bin(@key)
11
11
  }
12
12
  tl = track.concat([0, 0xff, 0x02, 0]).size
13
13
  result = [0x4d, 0x54, 0x72, 0x6b, tl >> 24, tl >> 16, tl >> 8, tl % 256].concat track
data/lib/kuromusic/Key.rb CHANGED
@@ -1,3 +1,63 @@
1
- class Key
2
-
1
+ module Key extend self
2
+ module C extend self
3
+ NATURAL = "C"
4
+ SHARP = "C#"
5
+ FLAT = "Cb"
6
+ end
7
+ module D extend self
8
+ NATURAL = "D"
9
+ SHARP = "D#"
10
+ FLAT = "Db"
11
+ end
12
+ module E extend self
13
+ NATURAL = "E"
14
+ SHARP = "E#"
15
+ FLAT = "Eb"
16
+ end
17
+ module F extend self
18
+ NATURAL = "F"
19
+ SHARP = "F#"
20
+ FLAT = "Fb"
21
+ end
22
+ module G extend self
23
+ NATURAL = "G"
24
+ SHARP = "G#"
25
+ FLAT = "Gb"
26
+ end
27
+ module A extend self
28
+ NATURAL = "A"
29
+ SHARP = "A#"
30
+ FLAT = "Ab"
31
+ end
32
+ module B extend self
33
+ NATURAL = "B"
34
+ SHARP = "B#"
35
+ FLAT = "Bb"
36
+ end
37
+
38
+ def key_to_degree(key)
39
+ {
40
+ #positive
41
+ Key::C::NATURAL => 0, Key::B::SHARP => 0,
42
+ Key::C::SHARP => 1, Key::D::FLAT => 1,
43
+ Key::D::NATURAL => 2,
44
+ Key::D::SHARP => 3, Key::E::FLAT => 3,
45
+ Key::E::NATURAL => 4, Key::F::FLAT => 4,
46
+ Key::E::SHARP => 5, Key::F::NATURAL => 5,
47
+
48
+ #negative
49
+ Key::C::FLAT => -1, Key::B::NATURAL => -1,
50
+ Key::A::SHARP => -2, Key::B::FLAT => -2,
51
+ Key::A::NATURAL => -3,
52
+ Key::A::FLAT => -4, Key::G::SHARP => -4,
53
+ Key::G::NATURAL => -5,
54
+ Key::G::FLAT => -6, Key::F::SHARP => -6
55
+ }[key]
56
+ end
57
+
58
+ def degree_to_key(number)
59
+ {
60
+ 0=>"C", 1=>"C#", 2=>"D", 3=>"D#", 4=>"E", 5=>"F", 6=>"F#", 7=>"G", 8=>"G#", 9=>"A", 10=>"A#", 11=>"B"
61
+ }[number % 12]
62
+ end
3
63
  end
@@ -4,12 +4,11 @@ require_relative "Generator/Random"
4
4
  require_relative "Generator/Schenker"
5
5
 
6
6
  class MelodyGenerater
7
- def initialize(dtime, scale, chord, key = nil)
8
- @chord = chord
7
+ def initialize(dtime, key, scale)
9
8
  @dtime = dtime
10
9
  @note_times = [dtime/8, dtime/4, dtime/2, dtime, dtime*2, dtime*4]
11
- @scale = scale
12
10
  @key = key
11
+ @scale = scale
13
12
  @measure = dtime * 4
14
13
  end
15
14
  end
@@ -1,20 +1,10 @@
1
1
  module Scale extend self
2
- MAJOR = ["C", "D", "E", "F", "G", "A", "B"]
3
- MINOR = ["C", "D", "D#", "F", "G", "G#", "B"]
4
- PENTATONIC = ["C", "D", "E", "G", "A"]
5
- WHOLE_TONE = ["C", "D", "E", "F#", "G#", "A#"]
6
- OKINAWA = ["C", "E", "F", "G", "B"]
7
- INDIAN = ["C", "C#", "E", "F#", "G", "A", "B"]
8
- GYPSY = ["C", "C#", "E", "F", "G", "G#", "B"]
9
- KUMOI = ["C", "D", "D#", "G", "A"]
10
-
11
- def note_to_n(note)
12
- map = {"C"=>0, "C#"=>1, "D"=>2, "D#"=>3, "E"=>4, "F"=>5, "F#"=>6, "G"=>7, "G#"=>8, "A"=>9, "A#"=>10, "B"=>11}
13
- map[note]
14
- end
15
-
16
- def number_to_code(number)
17
- map = {0=>"C", 1=>"C#", 2=>"D", 3=>"D#", 4=>"E", 5=>"F", 6=>"F#", 7=>"G", 8=>"G#", 9=>"A", 10=>"A#", 11=>"B"}
18
- map[number]
19
- end
2
+ MAJOR = [0, 2, 4, 5, 7, 9, 11]
3
+ MINOR = [0, 2, 3, 5, 7, 8, 11]
4
+ PENTATONIC = [0, 2, 4, 7, 9]
5
+ WHOLE_TONE = [0, 2, 4, 6, 8, 10]
6
+ OKINAWA = [0, 4, 5, 7, 11]
7
+ INDIAN = [0, 1, 4, 6, 7, 9, 11]
8
+ GYPSY = [0, 1, 4, 5, 7, 8, 11]
9
+ KUMOI = [0, 2, 3, 7, 9]
20
10
  end
@@ -1,8 +1,10 @@
1
1
  require_relative "Object"
2
+ require_relative "Key"
2
3
  require_relative "Track/Measure"
3
4
 
4
5
  class Track < Object
5
- def initialize(measures = [])
6
+ def initialize(key, measures = [])
7
+ @key = key
6
8
  @measures = measures
7
9
  end
8
10
 
@@ -70,6 +72,10 @@ class Track < Object
70
72
  }
71
73
  end
72
74
 
75
+ def length()
76
+ @measure.length
77
+ end
78
+
73
79
  def +(other)
74
80
  tmp = []
75
81
  if other.class.to_s == "Track"
@@ -81,12 +87,16 @@ class Track < Object
81
87
  else
82
88
  self.error_puts("ArgumentTypeError", "undefined method `+'")
83
89
  end
84
- Track.new(tmp)
90
+ Track.new(@key, tmp)
85
91
  end
86
92
 
87
93
  def inspect()
88
94
  "[
89
- " + @measures.map{|m| m.inspect}.join("\n ----------------------------------------------------------\n ") + "
95
+ Track Meta: < key = #{@key} >
96
+ ----------------------------------------------------------
97
+ " + @measures.each_with_index.map{|m, i|
98
+ "Measure #{i+1}:\n" + m.inspect(@key)
99
+ }.join("\n ----------------------------------------------------------\n ") + "
90
100
  ]"
91
101
  end
92
102
  end
@@ -16,11 +16,11 @@ class Measure < Object
16
16
  self
17
17
  end
18
18
 
19
- def inspect()
20
- "
21
- " + @metas.map{|m| m.inspect}.join("\n ),\n (\n ") + "
19
+ def inspect(key = nil)
20
+ " Measure Meta:
21
+ " + @metas.map{|m| " " + m.inspect + "\n"}.join() + "
22
22
  (
23
- " + @chords.map{|m| m.inspect}.join("\n ),\n (\n ") + "
23
+ " + @chords.map{|m| m.inspect(key)}.join("\n ),\n (\n ") + "
24
24
  )"
25
25
  end
26
26
  end
@@ -5,7 +5,7 @@ class Chord < Object
5
5
  @notes = notes
6
6
  end
7
7
 
8
- def inspect()
9
- @notes.map{|n| n.inspect}.join(",\n ")
8
+ def inspect(key = nil)
9
+ @notes.map{|n| n.inspect(key)}.join(",\n ")
10
10
  end
11
11
  end
@@ -2,23 +2,42 @@ require_relative "Note/Event"
2
2
 
3
3
  class Note < Object
4
4
  attr_reader :note, :octave, :velocity, :dur
5
+ private
6
+ def get_gdeg_and_goct(key)
7
+ key_n = Key::key_to_degree(key)
8
+ gdeg = (key_n + @degree) % 12
9
+ if gdeg < 0
10
+ goct = @octave - 1
11
+ else
12
+ goct = @octave + (key_n + @degree) / 12
13
+ end
14
+ return gdeg, goct
15
+ end
16
+
5
17
  public
6
- def initialize(note, octave, velocity, dur)
7
- @note = note
18
+ def initialize(degree, octave, velocity, dur)
19
+ @degree = degree
8
20
  @octave = octave
9
21
  @dur = dur
10
22
  @velocity = velocity
11
23
  end
12
24
 
13
- def get_on_event()
14
- Event::Note::on(@note, @octave, @velocity)
25
+ def get_on_event(key)
26
+ gdeg, goct = get_gdeg_and_goct(key)
27
+ Event::Note::on(Key::degree_to_key(gdeg), goct, @velocity)
15
28
  end
16
29
 
17
- def get_off_event()
18
- Event::Note::off(@note, @octave)
30
+ def get_off_event(key)
31
+ gdeg, goct = get_gdeg_and_goct(key)
32
+ Event::Note::off(Key::degree_to_key(gdeg), goct)
19
33
  end
20
34
 
21
- def inspect()
22
- "<:note=>" + @note + ", :octave=>" + @octave.to_s + ", :velocity:=>" + @velocity.to_s + ", :duration=>" + @dur.to_s + ">"
35
+ def inspect(key = nil)
36
+ if key.nil?
37
+ "<:degree=>" + @degree.to_s + ", :octave=>" + @octave.to_s + ", :velocity:=>" + @velocity.to_s + ", :duration=>" + @dur.to_s + ">"
38
+ else
39
+ gdeg, goct = get_gdeg_and_goct(key)
40
+ "<:note=>" + Key::degree_to_key(gdeg) + ", :octave=>" + goct.to_s + ", :velocity:=>" + @velocity.to_s + ", :duration=>" + @dur.to_s + ">"
41
+ end
23
42
  end
24
43
  end
@@ -1,3 +1,3 @@
1
1
  module Kuromusic
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/sample/main.rb CHANGED
@@ -2,18 +2,21 @@ 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, Key::E::NATURAL, Scale::MAJOR).extend(MelodyGenerater::Rand)
6
6
 
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)
7
+ a_can_track = melo.generate(5, 4)
8
+ a_can_track[0].set_meta(Event::Meta::set_tempo(171))
9
+ b_can_track = melo.generate(5, 4)
10
+ s_can_track = melo.generate(10, 4)
11
11
 
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)
12
+ a_bas_track = melo.generate(5, 2)
13
+ a_bas_track[0].set_meta(Event::Meta::set_tempo(171))
14
+ b_bas_track = melo.generate(5, 2)
15
+ s_bas_track = melo.generate(10, 2)
16
16
 
17
- midi.tracks[0] = a_can + b_can + s_can + a_can + b_can + s_can + a_can
18
- midi.tracks[1] = a_bas + b_bas + s_bas + a_bas + b_bas + s_bas + a_bas
17
+ midi.tracks[0] = a_can_track + b_can_track + s_can_track + a_can_track + b_can_track + s_can_track + a_can_track
18
+ midi.tracks[1] = a_bas_track + b_bas_track + s_bas_track + a_bas_track + b_bas_track + s_bas_track + a_bas_track
19
+
20
+ p midi.tracks[0]
21
+ p midi.tracks[1]
19
22
  Midi::IO.write("../../hoge3.mid", midi)
data/lib/sample/main2.rb CHANGED
@@ -3,17 +3,18 @@ require_relative "../KuroMusic"
3
3
  DELTA_TIME = 480
4
4
  midi = Midi.new(DELTA_TIME, 1)
5
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)]),
6
+ Chord.new([Note.new(-3, 4, 100, 480),Note.new(0, 4, 100, 480),Note.new(4, 4, 100, 480)]),
7
+ Chord.new([Note.new(-1, 4, 100, 480),Note.new(2, 4, 100, 480),Note.new(5, 4, 100, 480)]),
8
+ Chord.new([Note.new(0, 4, 100, 480),Note.new(4, 4, 100, 480),Note.new(7, 4, 100, 480)]),
9
+ Chord.new([Note.new(2, 4, 100, 480),Note.new(5, 4, 100, 480),Note.new(9, 4, 100, 480)]),
10
10
  ]
11
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)]),
12
+ Chord.new([Note.new(4, 4, 100, 480),Note.new(7, 4, 100, 480),Note.new(11, 4, 100, 480)]),
13
+ Chord.new([Note.new(5, 4, 100, 480),Note.new(9, 4, 100, 480),Note.new(0, 5, 100, 480)]),
14
+ Chord.new([Note.new(7, 4, 100, 480),Note.new(11, 4, 100, 480),Note.new(2, 5, 100, 480)]),
15
15
  ]
16
16
  midi.tracks[0] = Track.new(
17
+ Key::C::NATURAL,
17
18
  [
18
19
  Measure.new(chords1),
19
20
  Measure.new(chords2)
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.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - "黒澤 預生"
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-24 00:00:00.000000000 Z
11
+ date: 2016-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler