module RawMIDI::API::Device
Public Class Methods
close(midi_p)
click to toggle source
# File lib/rawmidi/api.rb, line 213 def self.close(midi_p) status = API.snd_rawmidi_close(midi_p) if status < 0 fail Error, "cannot close device: #{API.snd_strerror(status)}" end true end
each(card) { |device, info| ... }
click to toggle source
# File lib/rawmidi/api.rb, line 145 def self.each(card) return enum_for(__method__, card) unless block_given? Card.with_control(card) do |ctl_p| device_p = FFI::MemoryPointer.new(:int).write_int(-1) loop do status = API.snd_ctl_rawmidi_next_device(ctl_p, device_p) if status < 0 API.snd_ctl_close(ctl_p) fail Error, "cannot determine device number: #{API.snd_strerror(status)}" end device = device_p.read_int break if device < 0 info = subdevice_info(ctl_p, device) yield device, info end end end
open(handle_name, direction, mode)
click to toggle source
# File lib/rawmidi/api.rb, line 187 def self.open(handle_name, direction, mode) midi_pp = FFI::MemoryPointer.new(:pointer) mode_n = API::MODE_FLAGS[mode] status = case direction when :output API.snd_rawmidi_open(nil, midi_pp, handle_name, mode_n) when :input API.snd_rawmidi_open(midi_pp, nil, handle_name, mode_n) else fail Error, 'invalid direction' end if status < 0 fail Error, "cannot open device: #{API.snd_strerror(status)}" end midi_pp.read_pointer end
subdevice_info(ctl_p, device, subdevice=0)
click to toggle source
# File lib/rawmidi/api.rb, line 168 def self.subdevice_info(ctl_p, device, subdevice=0) info_p = FFI::MemoryPointer.new(:char, SndRawMIDIInfo.size, true) API.snd_rawmidi_info_set_device(info_p, device) API.snd_rawmidi_info_set_subdevice(info_p, subdevice) API.snd_rawmidi_info_set_stream(info_p, :input) status = API.snd_ctl_rawmidi_info(ctl_p, info_p) is_input = status >= 0 API.snd_rawmidi_info_set_stream(info_p, :output) status = API.snd_ctl_rawmidi_info(ctl_p, info_p) is_output = status >= 0 name = API.snd_rawmidi_info_get_name(info_p) {name: name, input: is_input, output: is_output} end
write(midi_p, buffer)
click to toggle source
# File lib/rawmidi/api.rb, line 207 def self.write(midi_p, buffer) buf_p = FFI::MemoryPointer.new(:char, buffer.size) buf_p.write_array_of_char(buffer) API.snd_rawmidi_write(midi_p, buf_p, buffer.size) end