class SMF::Sequence::RSXML
Public Class Methods
new(s, cb)
click to toggle source
# File lib/smf/toy/xml.rb, line 15 def initialize(s, cb) @s, @cb = s, cb end
Public Instance Methods
get_params(attrs, keys)
click to toggle source
# File lib/smf/toy/xml.rb, line 19 def get_params(attrs, keys) attrs.values_at(*keys).collect{|x| x.to_i} end
get_text(attrs, key)
click to toggle source
# File lib/smf/toy/xml.rb, line 23 def get_text(attrs, key) s = attrs[key] eval('"%s"' % s) end
read()
click to toggle source
# File lib/smf/toy/xml.rb, line 134 def read REXML::Document.parse_stream(@s, self) @cb.result end
tag_start(name, attrs)
click to toggle source
# File lib/smf/toy/xml.rb, line 28 def tag_start(name, attrs) if attrs['offset'] offset = attrs['offset'].to_i @cb.delta(offset - @loffset) @loffset = offset end case name when /\AMThd\z/i f, n, d, s = get_params(attrs, %w(format ntrks division tc)) s = nil if attrs['tc'] @cb.header(f, n, d, s) when /\AMTrk\z/i @loffset = 0 @cb.track_start when /\ANoteOff\z/i @cb.noteoff(*get_params(attrs, %w(ch note vel))) when /\ANoteOn\z/i @cb.noteon(*get_params(attrs, %w(ch note vel))) when /\APolyphonicKeyPressure\z/i @cb.polyphonickeypressure(*get_params(attrs, %w(ch note val))) when /\AControlChange\z/i @cb.controlchange(*get_params(attrs, %w(ch num val))) when /\AProgramChange\z/i @cb.programchange(*get_params(attrs, %w(ch num))) when /\AChannelPressure\z/i @cb.channelpressure(*get_params(attrs, %w(ch val))) when /\APitchBendChange\z/i @cb.pitchbendchange(*get_params(attrs, %w(ch val))) when /\AAllSoundOff\z/i ch, = get_params(attrs, %w(ch)) @cb.allsoundoff(ch) when /\AResetAllControllers\z/i ch, = get_params(attrs, %w(ch)) @cb.resetallcontrollers(ch) when /\ALocalControl\z/i ch, val, = get_params(attrs, %w(ch, val)) @cb.localcontrol(ch, val) when /\AAllNotesOff\z/i ch, = get_params(attrs, %w(ch)) @cb.allnotesoff(ch) when /\AOmniOff\z/i ch, = get_params(attrs, %w(ch)) @cb.omnioff(ch) when /\AOmniOn\z/i ch, = get_params(attrs, %w(ch)) @cb.omnion(ch) when /\AMonoMode\z/i ch, val, = get_params(attrs, %w(ch val)) @cb.monomode(ch, val) when /\APolyMode\z/i ch, = get_params(attrs, %w(ch)) @cb.polymode(ch) when /\AExclusiveF0\z/i @cb.exclusivef0(get_text(attrs, 'data')) when /\AExclusiveF7\z/i @cb.exclusivef7(get_text(attrs, 'data')) when /\ASequenceNumber\z/i @cb.sequencenumber(*get_params(attrs, %w(num))) when /\A(GeneralPurposeText|Text01)\z/i @cb.generalpurposetext(get_text(attrs, 'text')) when /\A(CopyrightNotice|Text02)\z/i @cb.copyrightnotice(get_text(attrs, 'text')) when /\A(TrackName|SequenceName|Text03)\z/i @cb.trackname(get_text(attrs, 'text')) when /\A(InstrumentName|Text04)\z/i @cb.instrumentname(get_text(attrs, 'text')) when /\A(Lyric|Text05)\z/i @cb.lyric(get_text(attrs, 'text')) when /\A(Marker|Text06)\z/i @cb.marker(get_text(attrs, 'text')) when /\A(CuePoint|Text07)\z/i @cb.cuepoint(get_text(attrs, 'text')) when /\A(ProgramName|Text08)\z/i @cb.programname(get_text(attrs, 'text')) when /\A(DeviceName|Text09)\z/i @cb.devicename(get_text(attrs, 'text')) when /\AText0([A-F])\z/i case $1 when 'A'; @cb.text0a(get_text(attrs, 'text')) when 'B'; @cb.text0b(get_text(attrs, 'text')) when 'C'; @cb.text0c(get_text(attrs, 'text')) when 'D'; @cb.text0d(get_text(attrs, 'text')) when 'E'; @cb.text0e(get_text(attrs, 'text')) when 'F'; @cb.text0f(get_text(attrs, 'text')) end when /\AChannelPrefix\z/i @cb.channelprefix(*get_params(attrs, %w(ch))) when /\AMIDIPort\z/i @cb.midiport(*get_params(attrs, %w(num))) when /\AEndOfTrack\z/i @cb.endoftrack() when /\ASetTempo\z/i @cb.settempo(*get_params(attrs, %w(tempo))) when /\ASMPTEOffset\z/i @cb.smpteoffset(*get_params(attrs, %w(hr mn se fr ff tc))) when /\ATimeSignature\z/i @cb.timesignature(*get_params(attrs, %w(nn dd cc bb))) when /\AKeySignature\z/i @cb.keysignature(*get_params(attrs, %w(sf mi))) when /\ASequencerSpecific\z/i @cb.sequencerspecific(get_text(attrs, 'data')) else @cb.error('unknown event: ' + name) end end