module MIDIJRuby::API
Access to javax.sound.midi
Public Instance Methods
Close the given input device @param [Java::ComSunMediaSound::MidiInDevice] device @return [Boolean]
# File lib/midi-jruby/api.rb, line 81 def close_input(device) # http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4914667 # @transmitter[device].close # device.close @transmitter.delete(device) true end
Close the given output device @param [Java::ComSunMediaSound::MidiOutDevice] device @return [Boolean]
# File lib/midi-jruby/api.rb, line 69 def close_output(device) unless @receiver[device].nil? @receiver[device].close @receiver.delete(device) end device.close true end
Enable the given input device to receive MIDI messages @param [Java::ComSunMediaSound::MidiInDevice] device @return [Boolean]
# File lib/midi-jruby/api.rb, line 48 def enable_input(device) device.open @transmitter ||= {} @transmitter[device] = device.get_transmitter @transmitter[device].set_receiver(InputReceiver.new) true end
Enable the given output to emit MIDI messages @param [Java::ComSunMediaSound::MidiOutDevice] device @return [Boolean]
# File lib/midi-jruby/api.rb, line 59 def enable_output(device) @receiver ||= {} @receiver[device] = device.get_receiver device.open true end
Get all MIDI devices that are available via javax.sound.midi @return [Array<Hash>] A set of hashes for each available device
# File lib/midi-jruby/api.rb, line 18 def get_devices MidiSystem.get_midi_device_info.map do |info| jdevice = MidiSystem.get_midi_device(info) { :device => jdevice, :id => get_uuid, :name => info.get_name, :description => info.get_description, :vendor => info.get_vendor } end end
Get all MIDI inputs that are available via javax.sound.midi @return [Array<Input>]
# File lib/midi-jruby/api.rb, line 33 def get_inputs jinputs = get_devices.select { |device| !device[:device].get_max_transmitters.zero? } jinputs.map { |jinput| Input.new(jinput[:id], jinput[:device], jinput) } end
Get all MIDI outputs that are available via javax.sound.midi @return [Array<Output>]
# File lib/midi-jruby/api.rb, line 40 def get_outputs joutputs = get_devices.select { |device| !device[:device].get_max_receivers.zero? } joutputs.map { |joutput| Output.new(joutput[:id], joutput[:device], joutput) } end
Read any new MIDI messages from the given input device @param [Java::ComSunMediaSound::MidiInDevice] device @return [Array<Array<Fixnum>>]
# File lib/midi-jruby/api.rb, line 92 def read_input(device) @transmitter[device].get_receiver.read end
Write the given MIDI message to the given output device @param [Java::ComSunMediaSound::MidiOutDevice] device @param [Array<Fixnum>] data @return [Boolean]
# File lib/midi-jruby/api.rb, line 100 def write_output(device, data) bytes = Java::byte[data.size].new data.each_with_index { |byte, i| bytes.ubyte_set(i, byte) } message = data.first.eql?(0xF0) ? SysexMessage.new : ShortMessage.new message.set_message(bytes, data.length.to_java(:int)) @receiver[device].send(message, 0) true end
Private Instance Methods
Generate a uuid for a MIDI device @return [Fixnum]
# File lib/midi-jruby/api.rb, line 113 def get_uuid @id ||= -1 @id += 1 end