class SMF::Morse
Constants
- CODE
- PLAIN
Public Class Methods
new(sq, te=120)
click to toggle source
# File lib/smf/toy/morse.rb, line 74 def initialize(sq, te=120) @sq = sq << Track.new @te = te @mesg = [] end
Public Instance Methods
<<(s)
click to toggle source
# File lib/smf/toy/morse.rb, line 80 def << (s) @mesg << s end
generate()
click to toggle source
# File lib/smf/toy/morse.rb, line 98 def generate of = 0 @sq[0] << SetTempo.new(of, 60000000 / 240) @sq[0] << GMSystemOn.new(of) of += @sq.division / 2 @sq[0] << ProgramChange.new(of, 0, 81) of += @sq.division / 2 @sq[0] << SetTempo.new(of, 60000000 / @te) @mesg.each do |s| @sq[0] << Marker.new(of, s) encode(plain(s)).each_byte do |c| case c when ?.; le = (@sq.division / 8) * 1 when ?-; le = (@sq.division / 8) * 3 else; le = (@sq.division / 8) * 1 end if c == ?. || c == ?- @sq[0] << NoteOn .new(of, 0, 69, 96) @sq[0] << NoteOff.new(of + le, 0, 69, 64) end of += le end end @sq[0] << EndOfTrack.new(of) end
Private Instance Methods
encode(s)
click to toggle source
# File lib/smf/toy/morse.rb, line 88 def encode(s) s.downcase.scan(/\S+/).collect {|w| w.scan(/./).collect{|c| (CODE[c[0]] || '').scan(/./).join("\s") }.join("\s"*3) }.join("\s"*7) + "\s"*15 end
plain(s)
click to toggle source
# File lib/smf/toy/morse.rb, line 82 def plain(s) s = s.dup PLAIN.each_pair{|k, v| s.gsub!(k, ' %s ' % v)} s end