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