-
Notifications
You must be signed in to change notification settings - Fork 8
/
super_midi_analizer.rb
35 lines (31 loc) · 895 Bytes
/
super_midi_analizer.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Get all measures, so events can be mapped to measures:
require 'rubygems'
require 'midilib'
require 'midilib/sequence'
require 'rubymusicengine'
require 'scales'
=begin
This application generates a simple random midi file and then outputs the notes generated and
at what time it did each note
=end
def song_creator_and_display
seq = MIDI::Sequence.new()
s=[ ]
100.times {|n| s << lydian_min[rand(lydian_min.size)] }
s.to_midi("new_song.mid")
# Then takes the new generated midi file and maps out the notes and time
File.open("new_song.mid", 'rb') { | file | seq.read(file) }
measures = seq.get_measures
count=0
seq.each { | track |
track.each { | e |
if e.note_on? then
count = count + 1
e.print_note_names = true
# puts "the note #{count} was #{e.note_to_s}"
puts measures.to_mbt(e)+ " " + "#{e.note_to_s}"
end
}
}
end
song_creator_and_display