Sha256: e7dcbb50c9df8f90eb3e2799e009360662ff1ebb092b10c2ca0d25a2c4946d77

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

module RawMIDI
  module Device
    attr_reader :id, :card, :name

    def initialize(card_or_id, id, **info)
      @card = card_or_id.is_a?(Card) ? card_or_id : Card.new(card_or_id)
      @id = id

      info = get_subdevice_info if info.empty?
      @name = info[:name]
      @input = info[:input]
      @output = info[:output]
    end

    def handle_name
      "#{@card.handle_name},#{@id},0"
    end

    def inspect
      "#<#{self.class.name}:#{"0x%014x" % object_id} #{handle_name} #{@name.inspect} #{open? ? 'open' : 'closed'}>"
    end

    def open
      fail 'already open' if @midi_p
      @midi_p = API::Device.open(handle_name, direction, :sync)
      true
    end

    def close
      return if closed?
      API::Device.close(@midi_p)
      @midi_p = nil
      true
    end

    def open?
      !!@midi_p
    end

    def closed?
      !open?
    end

    private

    def get_subdevice_info
      API::Card.with_control(@card.id) do |ctl_p|
        API::Device.subdevice_info(ctl_p, @id)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rawmidi-0.1.0 lib/rawmidi/device.rb