KuroMusic is midi controll library written by ruby.
0.1.0
Add this line to your application's Gemfile:
gem 'kuromusic'
And then execute:
$ bundle
Or install it yourself as:
$ gem install kuromusic
you should require KuroMusic in your source code to use those method.
require "KuroMusic"
you should define delta time. delta time is imaginary time as quarter note used in MIDI.
DELTA_TIME = 480
midi = Midi.new(DELTA_TIME, 1)
chords1 = [
Chord.new([Note.new(-3, 4, 100, 480),Note.new(0, 4, 100, 480),Note.new(4, 4, 100, 480)]),
Chord.new([Note.new(-1, 4, 100, 480),Note.new(2, 4, 100, 480),Note.new(5, 4, 100, 480)]),
Chord.new([Note.new(0, 4, 100, 480),Note.new(4, 4, 100, 480),Note.new(7, 4, 100, 480)]),
Chord.new([Note.new(2, 4, 100, 480),Note.new(5, 4, 100, 480),Note.new(9, 4, 100, 480)]),
]
chords2 = [
Chord.new([Note.new(4, 4, 100, 480),Note.new(7, 4, 100, 480),Note.new(11, 4, 100, 480)]),
Chord.new([Note.new(5, 4, 100, 480),Note.new(9, 4, 100, 480),Note.new(0, 5, 100, 480)]),
Chord.new([Note.new(7, 4, 100, 480),Note.new(11, 4, 100, 480),Note.new(2, 5, 100, 480)]),
]
midi.tracks[0] = Track.new(
Key::C::NATURAL,
[
Measure.new(chords1),
Measure.new(chords2)
]
)
DELTA_TIME = 480
midi = Midi.new(DELTA_TIME, 2)
melo = MelodyGenerater.new(DELTA_TIME, Key::E::NATURAL, Scale::MAJOR).extend(MelodyGenerater::Schenker)
midi.tracks[0] = melo.generate(10, 4)
midi.tracks[1] = melo.generate(10, 2)
can_track = melo.generate(10, 4)
can_track[0].set_meta(Event::Meta::set_tempo(171))
a_can_track = melo.generate(10, 4)
b_can_track = melo.generate(10, 4)
midi.tracks[0] = a_can_track + b_can_track
Midi::IO.write("hoge.mid", midi)
Note.new(degree, octave, velocity, duration)
duration is based on delta time.
Chord.new([Notes])
Measure.new([Chords])
Track.new(key, [Measures])
- Key::C::NATURAL
- Key::B::SHARP
- Key::C::SHARP
- Key::D::FLAT
- Key::D::NATURAL
- Key::D::SHARP
- Key::E::FLAT
- Key::E::NATURAL
- Key::F::FLAT
- Key::E::SHARP
- Key::F::NATURAL
- Key::C::FLAT
- Key::B::NATURAL
- Key::A::SHARP
- Key::B::FLAT
- Key::A::NATURAL
- Key::A::FLAT
- Key::G::SHARP
- Key::G::NATURAL
- Key::G::FLAT
- Key::F::SHARP
- Scale::MAJOR
- Scale::MINOR
- Scale::PENTATONIC
- Scale::WHOLE_TONE
- Scale::OKINAWA
- Scale::INDIAN
- Scale::GYPSY
- Scale::KUMOI
- Fork it ( https://github.com/[my-github-username]/kuromusic/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request