class AudioStream::Conductor
Public Class Methods
new(input:, output:)
click to toggle source
# File lib/audio_stream/conductor.rb, line 3 def initialize(input:, output:) @inputs = Set[*[input].flatten.compact] @outputs = Set[*[output].flatten.compact] end
Public Instance Methods
connect()
click to toggle source
# File lib/audio_stream/conductor.rb, line 8 def connect @outputs.map(&:connect) @inputs.map(&:connect) @inputs.map(&:publish) @sync_thread = Thread.start { catch :break do loop { @inputs.each {|input| input.sync.resume } @inputs.each {|input| stat = input.sync.yield_wait if stat==Sync::COMPLETED @inputs.delete(input) #throw :break end } if @inputs.length==0 throw :break end } end } end
join()
click to toggle source
# File lib/audio_stream/conductor.rb, line 36 def join @sync_thread.join @inputs.map(&:disconnect) @outputs.map(&:disconnect) end