class SMF::Sequence::RSText
Public Class Methods
new(s, cb)
click to toggle source
# File lib/smf/toy/text.rb, line 23 def initialize(s, cb) @s, @cb = s, cb end
Public Instance Methods
read()
click to toggle source
# File lib/smf/toy/text.rb, line 174 def read rs = RSText::PO.new(@s) read_header(rs) until rs.eof? read_track(rs) end @cb.result end
Private Instance Methods
get_name(s)
click to toggle source
# File lib/smf/toy/text.rb, line 30 def get_name(s) s.sub!(/\A\s*(\S+)/, '') return $1 end
get_offset(s)
click to toggle source
# File lib/smf/toy/text.rb, line 25 def get_offset(s) s.sub!(/\A\s*(\d+)/, '') return $1.to_i end
get_params(s)
click to toggle source
# File lib/smf/toy/text.rb, line 35 def get_params(s) s.scan(/\d+/).collect{|x| x.to_i} end
get_text(s)
click to toggle source
# File lib/smf/toy/text.rb, line 39 def get_text(s) eval(s) end
read_header(rs)
click to toggle source
# File lib/smf/toy/text.rb, line 45 def read_header(rs) ln = rs.gets name = get_name(ln) case name when /\AMThd/i f, n, d, s = get_params(ln) @cb.header(f, n, d, s) else @cb.error('not a text') end end
read_track(rs)
click to toggle source
# File lib/smf/toy/text.rb, line 57 def read_track(rs) ln = rs.gets case ln when /\AMTrk\z/i @cb.track_start else @cb.error('track not found') end loffset = 0 until rs.eof? ln = rs.gets case ln when /\AMTrkEnd\z/i @cb.track_end return end offset = get_offset(ln) @cb.delta(offset - loffset) loffset = offset name = get_name(ln) case name when /\ANoteOff\z/i @cb.noteoff(*get_params(ln)[0,3]) when /\ANoteOn\z/i @cb.noteon(*get_params(ln)[0,3]) when /\APolyphonicKeyPressure\z/i @cb.polyphonickeypressure(*get_params(ln)[0,3]) when /\AControlChange\z/i @cb.controlchange(*get_params(ln)[0,3]) when /\AProgramChange\z/i @cb.programchange(*get_params(ln)[0,2]) when /\AChannelPressure\z/i @cb.channelpressure(*get_params(ln)[0,2]) when /\APitchBendChange\z/i @cb.pitchbendchange(*get_params(ln)[0,2]) when /\AAllSoundOff\z/i ch, = get_params(ln) @cb.allsoundoff(ch) when /\AResetAllControllers\z/i ch, = get_params(ln) @cb.resetallcontrollers(ch) when /\ALocalControl\z/i ch, val, = get_params(ln) @cb.localcontrol(ch, val) when /\AAllNotesOff\z/i ch, = get_params(ln) @cb.allnotesoff(ch) when /\AOmniOff\z/i ch, = get_params(ln) @cb.omnioff(ch) when /\AOmniOn\z/i ch, = get_params(ln) @cb.omnion(ch) when /\AMonoMode\z/i ch, val, = get_params(ln) @cb.monomode(ch, val) when /\APolyMode\z/i ch, = get_params(ln) @cb.polymode(ch) when /\AExclusiveF0\z/i @cb.exclusivef0(get_text(ln)) when /\AExclusiveF7\z/i @cb.exclusivef7(get_text(ln)) when /\ASequenceNumber\z/i @cb.sequencenumber(*get_params(ln)[0,1]) when /\A(GeneralPurposeText|Text01)\z/i @cb.generalpurposetext(get_text(ln)) when /\A(CopyrightNotice|Text02)\z/i @cb.copyrightnotice(get_text(ln)) when /\A(TrackName|SequenceName|Text03)\z/i @cb.trackname(get_text(ln)) when /\A(InstrumentName|Text04)\z/i @cb.instrumentname(get_text(ln)) when /\A(Lyric|Text05)\z/i @cb.lyric(get_text(ln)) when /\A(Marker|Text06)\z/i @cb.marker(get_text(ln)) when /\A(CuePoint|Text07)\z/i @cb.cuepoint(get_text(ln)) when /\A(ProgramName|Text08)\z/i @cb.programname(get_text(ln)) when /\A(DeviceName|Text09)\z/i @cb.devicename(get_text(ln)) when /\AText0([A-F])\z/i case $1 when 'A'; @cb.text0a(get_text(ln)) when 'B'; @cb.text0b(get_text(ln)) when 'C'; @cb.text0c(get_text(ln)) when 'D'; @cb.text0d(get_text(ln)) when 'E'; @cb.text0e(get_text(ln)) when 'F'; @cb.text0f(get_text(ln)) end when /\AChannelPrefix\z/i @cb.channelprefix(*get_params(ln)[0,1]) when /\AMIDIPort\z/i @cb.midiport(*get_params(ln)[0,1]) when /\AEndOfTrack\z/i @cb.endoftrack() when /\ASetTempo\z/i @cb.settempo(*get_params(ln)[0,1]) when /\ASMPTEOffset\z/i @cb.smpteoffset(*get_params(ln)[0,6]) when /\ATimeSignature\z/i @cb.timesignature(*get_params(ln)[0,4]) when /\AKeySignature\z/i @cb.keysignature(*get_params(ln)[0,2]) when /\ASequencerSpecific\z/i @cb.sequencerspecific(get_text(ln)) else @cb.error('unknown event: ' + name) end end @cb.track_end end