kuromusic 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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