Module: Rtmidi

Defined in:
lib/rtmidi/api.rb,
lib/rtmidi/error.rb,
lib/rtmidi/native.rb,
lib/rtmidi/message.rb,
lib/rtmidi/midi_in.rb,
lib/rtmidi/version.rb,
lib/rtmidi/midi_out.rb

Defined Under Namespace

Modules: Api, Message, Native Classes: DriverError, Error, InvalidPortError, InvalidUseError, MemoryError, MidiIn, MidiOut, NoDevicesError

Constant Summary collapse

ERROR_MAP =
{
  no_devices_found: NoDevicesError,
  invalid_device: InvalidPortError,
  memory_error: MemoryError,
  invalid_parameter: ArgumentError,
  invalid_use: InvalidUseError,
  driver_error: DriverError,
  system_error: Error,
  thread_error: Error,
  warning: nil,
  debug_warning: nil,
  unspecified: Error
}.freeze
WARNING_TYPES =
%i[warning debug_warning].freeze
VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.api_by_name(name) ⇒ Object



68
69
70
71
# File 'lib/rtmidi/api.rb', line 68

def api_by_name(name)
  value = Native.rtmidi_compiled_api_by_name(name.to_s)
  Api.symbol_for(value) || :unspecified
end

.api_display_name(api) ⇒ Object



64
65
66
# File 'lib/rtmidi/api.rb', line 64

def api_display_name(api)
  Native.rtmidi_api_display_name(Api.normalize(api))
end

.api_name(api) ⇒ Object



60
61
62
# File 'lib/rtmidi/api.rb', line 60

def api_name(api)
  Native.rtmidi_api_name(Api.normalize(api))
end

.compiled_apisObject



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rtmidi/api.rb', line 46

def compiled_apis
  Native.ensure_loaded!

  count = Native.rtmidi_get_compiled_api(nil, 0).to_i
  return [] if count <= 0

  buffer = FFI::MemoryPointer.new(:int, count)
  written = Native.rtmidi_get_compiled_api(buffer, count).to_i
  length = [written, count].min
  return [] if length <= 0

  buffer.read_array_of_int(length).filter_map { |value| Api.symbol_for(value) }
end

.error_class_for(type) ⇒ Object



40
41
42
# File 'lib/rtmidi/error.rb', line 40

def error_class_for(type)
  ERROR_MAP.fetch(type.to_sym, Error)
end

.error_for(type, message) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/rtmidi/error.rb', line 44

def error_for(type, message)
  klass = error_class_for(type)
  return Error.new(message, type: type) if klass.nil?
  return klass.new(message) unless klass <= Error

  klass.new(message, type: type)
end

.versionObject



42
43
44
# File 'lib/rtmidi/api.rb', line 42

def version
  Native.rtmidi_get_version
end

.warning_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/rtmidi/error.rb', line 36

def warning_type?(type)
  WARNING_TYPES.include?(type.to_sym)
end