class MIDIInstrument::Output

Send MIDI messages

Attributes

channel[R]
devices[R]
mute[W]

Public Class Methods

new() click to toggle source
# File lib/midi-instrument/output.rb, line 9
def initialize
  @channel = nil
  @channel_filter = nil
  @mute = false
  @devices = []
end

Public Instance Methods

<<(*args)
Alias for: puts
channel=(channel) click to toggle source

Set the output to convert all emitted notes to a specific channel @param [Fixnum, nil] channel @return [Boolean]

# File lib/midi-instrument/output.rb, line 19
def channel=(channel)
  @channel_filter = if channel.nil?
    nil
  else
    MIDIFX::Limit.new(:channel, channel, :name => :output_channel)
  end
  @channel = channel
  true
end
devices=(devices) click to toggle source

Replace the devices with the given devices @param [Array<UniMIDI::Outputs>] devices @return [OutputContainer]

# File lib/midi-instrument/output.rb, line 70
def devices=(devices)
  @devices.clear
  @devices += devices
  @devices
end
mute() click to toggle source

Mute the output @return [TrueClass]

# File lib/midi-instrument/output.rb, line 51
def mute
  @mute = true
end
mute?() click to toggle source

Is the output muted? @return [Boolean]

# File lib/midi-instrument/output.rb, line 63
def mute?
  @mute
end
puts(*args) click to toggle source

Emit messages @param [*Fixnum, *MIDIMessage::NoteOn, *MIDIMessage::NoteOff, *String] args @return [Array<Fixnum>]

# File lib/midi-instrument/output.rb, line 32
def puts(*args)
  messages = Message.to_messages(*args)
  messages = filter_output(messages)
  bytes = messages.map(&:to_bytes).flatten
  if !@mute
    @devices.each { |output| output.puts(*bytes) }
  end
  bytes
end
Also aliased as: <<
toggle_mute() click to toggle source

Toggle muted output @return [Boolean]

# File lib/midi-instrument/output.rb, line 45
def toggle_mute
  @mute = !@mute
end
unmute() click to toggle source

Un-mute the output @return [FalseClass]

# File lib/midi-instrument/output.rb, line 57
def unmute
  @mute = false
end

Private Instance Methods

filter_output(messages) click to toggle source

Filter messages for output @param [Array<MIDIMessage::ChannelMessage>] messages @return [Array<MIDIMessage::ChannelMessage>]

# File lib/midi-instrument/output.rb, line 81
def filter_output(messages)
  if @channel_filter.nil?
    messages
  else
    messages.map { |message| @channel_filter.process(message) }
  end
end