module MIDIJRuby::API

Access to javax.sound.midi

Public Instance Methods

close_input(device) click to toggle source

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_output(device) click to toggle source

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_input(device) click to toggle source

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_output(device) click to toggle source

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_devices() click to toggle source

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_inputs() click to toggle source

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_outputs() click to toggle source

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_input(device) click to toggle source

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_output(device, data) click to toggle source

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

get_uuid() click to toggle source

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