Class: Webmidi::Transport::Virtual
- Inherits:
-
Base
- Object
- Base
- Webmidi::Transport::Virtual
show all
- Defined in:
- lib/webmidi/transport/virtual.rb
Defined Under Namespace
Classes: VirtualInputHandle, VirtualOutputHandle
Class Method Summary
collapse
Class Method Details
.available? ⇒ Boolean
11
12
13
|
# File 'lib/webmidi/transport/virtual.rb', line 11
def self.available?
true
end
|
.create_loopback(name) ⇒ Object
51
52
53
54
55
56
|
# File 'lib/webmidi/transport/virtual.rb', line 51
def self.create_loopback(name)
input = create_virtual_input(name)
output = create_virtual_output(name)
output.connect(input)
[input, output]
end
|
23
24
25
26
27
28
|
# File 'lib/webmidi/transport/virtual.rb', line 23
def self.create_virtual_input(name)
info = DeviceInfo.new(id: generate_id, name: name, manufacturer: "Webmidi Virtual", version: "1.0")
handle = VirtualInputHandle.new(info, on_close: -> { unregister(info.id) })
@mutex.synchronize { @ports[info.id] = handle }
handle
end
|
.create_virtual_output(name) ⇒ Object
30
31
32
33
34
35
|
# File 'lib/webmidi/transport/virtual.rb', line 30
def self.create_virtual_output(name)
info = DeviceInfo.new(id: generate_id, name: name, manufacturer: "Webmidi Virtual", version: "1.0")
handle = VirtualOutputHandle.new(info, on_close: -> { unregister(info.id) })
@mutex.synchronize { @ports[info.id] = handle }
handle
end
|
15
16
17
|
# File 'lib/webmidi/transport/virtual.rb', line 15
def self.list_inputs
@mutex.synchronize { @ports.values.select { |p| p.is_a?(VirtualInputHandle) && !p.closed? }.map(&:device_info) }
end
|
.list_outputs ⇒ Object
19
20
21
|
# File 'lib/webmidi/transport/virtual.rb', line 19
def self.list_outputs
@mutex.synchronize { @ports.values.select { |p| p.is_a?(VirtualOutputHandle) && !p.closed? }.map(&:device_info) }
end
|
37
38
39
40
41
42
|
# File 'lib/webmidi/transport/virtual.rb', line 37
def self.open_input(device_info)
handle = find_handle(device_info.id, VirtualInputHandle)
return handle if handle
raise PortNotFoundError, "Virtual input not found: #{device_info.id}"
end
|
.open_output(device_info) ⇒ Object
44
45
46
47
48
49
|
# File 'lib/webmidi/transport/virtual.rb', line 44
def self.open_output(device_info)
handle = find_handle(device_info.id, VirtualOutputHandle)
return handle if handle
raise PortNotFoundError, "Virtual output not found: #{device_info.id}"
end
|
.reset! ⇒ Object
58
59
60
61
62
|
# File 'lib/webmidi/transport/virtual.rb', line 58
def self.reset!
handles = @mutex.synchronize { @ports.values.dup }
handles.each(&:close)
@mutex.synchronize { @ports.clear }
end
|
.unregister(id) ⇒ Object
68
69
70
|
# File 'lib/webmidi/transport/virtual.rb', line 68
def self.unregister(id)
@mutex.synchronize { @ports.delete(id) }
end
|