class AudioStream::AudioInputDevice

Attributes

dev[R]

Public Class Methods

default_device(soundinfo:) click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 49
def self.default_device(soundinfo:)
  dev = CoreAudio.default_input_device
  new(dev, soundinfo: soundinfo)
end
devices(soundinfo:) click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 54
def self.devices(soundinfo:)
  CoreAudio.devices
    .select{|dev|
      0<dev.input_stream.channels
    }
    .map {|dev|
      new(dev, soundinfo: soundinfo)
    }
end
new(dev, soundinfo:) click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 7
def initialize(dev, soundinfo:)
  @dev = dev
  @soundinfo = soundinfo
end

Public Instance Methods

connect() click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 16
def connect
  if !connected?
    @inbuf = @dev.input_buffer(@soundinfo.window_size)
    @inbuf.start
  end
  self
end
connected?() click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 32
def connected?
  !!@inbuf
end
disconnect() click to toggle source
Calls superclass method AudioStream::AudioInput#disconnect
# File lib/audio_stream/audio_input_device.rb, line 24
def disconnect
  if connected?
    @inbuf.stop
    @inbuf = nil
  end
  super
end
each(&block) click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 36
def each(&block)
  Enumerator.new do |y|
    if !connected?
      raise Error, "Device is not connected. You need to exec #{self.class.name}.connect: #{name}"
    end

    loop {
      na = @inbuf.read(@soundinfo.window_size)
      y << Buffer.from_na(na)
    }
  end.each(&block)
end
name() click to toggle source
# File lib/audio_stream/audio_input_device.rb, line 12
def name
  @dev.name
end