Class: CoreMIDI::Source
- Inherits:
-
Object
- Object
- CoreMIDI::Source
- Includes:
- Endpoint
- Defined in:
- lib/coremidi/source.rb
Overview
Type of endpoint used for input
Instance Attribute Summary collapse
-
#buffer ⇒ Object
readonly
Returns the value of attribute buffer.
Attributes included from Endpoint
#enabled, #entity, #id, #resource_id, #type
Class Method Summary collapse
-
.all ⇒ Array<Source>
All input endpoints.
- .clear ⇒ Object
-
.first ⇒ Source
Shortcut to the first available input endpoint.
-
.last ⇒ Source
Shortcut to the last available input endpoint.
Instance Method Summary collapse
-
#close ⇒ Boolean
Close this input.
-
#enable(options = {}, &block) ⇒ Source
(also: #open, #start)
Enable this the input for use; can be passed a block.
-
#gets ⇒ Array<Hash>
(also: #read)
An array of MIDI event hashes as such: [ { :data => [144, 60, 100], :timestamp => 1024 }, { :data => [128, 60, 100], :timestamp => 1100 }, { :data => [144, 40, 120], :timestamp => 1200 } ].
-
#gets_s ⇒ Array<Hash>
(also: #gets_bytestr)
Same as Source#gets except that it returns message data as string of hex digits as such: [ { :data => “904060”, :timestamp => 904 }, { :data => “804060”, :timestamp => 1150 }, { :data => “90447F”, :timestamp => 1300 } ].
Methods included from Endpoint
all_by_type, destinations, get_class, #initialize, #online?, sources
Instance Attribute Details
#buffer ⇒ Object (readonly)
Returns the value of attribute buffer.
8 9 10 |
# File 'lib/coremidi/source.rb', line 8 def buffer @buffer end |
Class Method Details
.all ⇒ Array<Source>
All input endpoints
100 101 102 |
# File 'lib/coremidi/source.rb', line 100 def self.all Endpoint.all_by_type[:source] end |
.clear ⇒ Object
236 237 238 239 |
# File 'lib/coremidi/source.rb', line 236 def @buffer.clear super @pointer = 0 end |
.first ⇒ Source
Shortcut to the first available input endpoint
88 89 90 |
# File 'lib/coremidi/source.rb', line 88 def self.first Endpoint.first(:source) end |
.last ⇒ Source
Shortcut to the last available input endpoint
94 95 96 |
# File 'lib/coremidi/source.rb', line 94 def self.last Endpoint.last(:source) end |
Instance Method Details
#close ⇒ Boolean
Close this input
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/coremidi/source.rb', line 69 def close #error = API.MIDIPortDisconnectSource( @handle, @resource ) #raise "MIDIPortDisconnectSource returned error code #{error}" unless error.zero? #error = API.MIDIClientDispose(@handle) #raise "MIDIClientDispose returned error code #{error}" unless error.zero? #error = API.MIDIPortDispose(@handle) #raise "MIDIPortDispose returned error code #{error}" unless error.zero? #error = API.MIDIEndpointDispose(@resource) #raise "MIDIEndpointDispose returned error code #{error}" unless error.zero? if @enabled @enabled = false true else false end end |
#enable(options = {}, &block) ⇒ Source Also known as: open, start
Enable this the input for use; can be passed a block
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/coremidi/source.rb', line 53 def enable( = {}, &block) @enabled = true unless @enabled if block_given? begin yield(self) ensure close end end self end |
#gets ⇒ Array<Hash> Also known as: read
An array of MIDI event hashes as such:
[
{ :data => [144, 60, 100], :timestamp => 1024 },
{ :data => [128, 60, 100], :timestamp => 1100 },
{ :data => [144, 40, 120], :timestamp => 1200 }
]
The data is an array of Numeric bytes The timestamp is the number of millis since this input was enabled
22 23 24 25 26 27 28 29 30 |
# File 'lib/coremidi/source.rb', line 22 def gets until # per https://github.com/arirusso/unimidi/issues/20#issuecomment-44761318 sleep(0.0001) # patch to prevent 100% CPU issue with some midi controllers end = @pointer = @buffer.length end |
#gets_s ⇒ Array<Hash> Also known as: gets_bytestr
Same as Source#gets except that it returns message data as string of hex digits as such:
[
{ :data => "904060", :timestamp => 904 },
{ :data => "804060", :timestamp => 1150 },
{ :data => "90447F", :timestamp => 1300 }
]
42 43 44 45 46 47 48 |
# File 'lib/coremidi/source.rb', line 42 def gets_s = gets .each do || [:data] = TypeConversion.numeric_bytes_to_hex_string([:data]) end end |