Class: Bio::Sequence::NA
Overview
– TODO
- add "Ohno" style
- add a accessor to drum pattern
- add a new feature to select music style (pop, trans, ryukyu, ...)
- what is the base?
++
Defined Under Namespace
Classes: MidiTrack
Instance Method Summary collapse
-
#to_midi(style = {}, drum = true) ⇒ Object
style: Hash of :tempo, :scale, :tones scale: C C# D D# E F F# G G# A A# B 0 1 2 3 4 5 6 7 8 9 10 11 tones: Hash of :prog, :base, :range – tone, vol? or len?, octaves drum: true (with rhythm part), false (without rhythm part).
Instance Method Details
#to_midi(style = {}, drum = true) ⇒ Object
style:
Hash of :tempo, :scale, :tones
scale:
C C# D D# E F F# G G# A A# B
0 1 2 3 4 5 6 7 8 9 10 11
tones:
Hash of :prog, :base, :range -- tone, vol? or len?, octaves
drum:
true (with rhythm part), false (without rhythm part)
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 |
# File 'lib/bio/shell/plugin/midi.rb', line 351 def to_midi(style = {}, drum = true) default = MidiTrack::Styles["Ichinose"] if style.is_a?(String) style = MidiTrack::Styles[style] || default end tempo = style[:tempo] || default[:tempo] scale = style[:scale] || default[:scale] tones = style[:tones] || default[:tones] track = [] tones.each_with_index do |tone, i| ch = i ch += 1 if i >= 9 # skip rythm track track.push MidiTrack.new(ch, tone[:prog], tone[:base], tone[:range], scale) end if drum rhythm = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] track.push(MidiTrack.new(9, 0, 35, 2, rhythm)) end cur = 0 window_search(4) do |s| track[cur % track.length].push(s) cur += 1 end track.each do |t| t.push_silent(12) end ans = track[0].header(track.length, tempo) track.each do |t| ans += t.encode end return ans end |