class AudioSwitch::Pactl

Public Class Methods

parse_default_sink(out) click to toggle source
# File lib/audio_switch/pactl.rb, line 108
def self.parse_default_sink(out)
  Out.new(out).parse_property('Default sink name:')
end
parse_inputs(out) click to toggle source
# File lib/audio_switch/pactl.rb, line 81
def self.parse_inputs(out)
  Out.new(out).parse_objects(
    [
      { marker: 'Sink Input #', property: :id }
    ]
  )
end
parse_modules(out) click to toggle source
# File lib/audio_switch/pactl.rb, line 89
def self.parse_modules(out)
  Out.new(out).parse_objects(
    [
      { marker: 'Module #' },
      { marker: 'Name:', property: :name }
    ]
  )
end
parse_sinks(out, default_sink_name) click to toggle source
# File lib/audio_switch/pactl.rb, line 71
def self.parse_sinks(out, default_sink_name)
  Out.new(out).parse_objects(
    [
      { marker: 'Sink #', property: :id },
      { marker: 'Name:', property: :name },
      { marker: 'Description:', property: :description }
    ]
  ).each { |sink| sink[:default] = true if sink[:name] == default_sink_name }
end
parse_sources(out) click to toggle source
# File lib/audio_switch/pactl.rb, line 98
def self.parse_sources(out)
  Out.new(out).parse_objects(
    [
      { marker: 'Source #', property: :id },
      { marker: 'Name:', property: :name },
      { marker: 'Mute:', property: :mute }
    ]
  ).each { |source| source[:mute] = source[:mute] == 'yes' }
end

Public Instance Methods

default_sink=(sink_id) click to toggle source
# File lib/audio_switch/pactl.rb, line 10
def default_sink=(sink_id)
  AudioSwitch::LOG.info "setting default sink to '#{sink_id}'"
  # pactl doesn't have this command
  `pacmd set-default-sink #{sink_id}`
end
dispose() click to toggle source
# File lib/audio_switch/pactl.rb, line 67
def dispose
  @pactl_sub.close
end
inputs() click to toggle source
# File lib/audio_switch/pactl.rb, line 21
def inputs
  self.class.parse_inputs(`pactl list sink-inputs`)
end
load_module(mod, options = {}) click to toggle source
# File lib/audio_switch/pactl.rb, line 33
def load_module(mod, options = {})
  AudioSwitch::LOG.info "loading module '#{mod}' with options '#{options}'"
  `pactl load-module #{mod} #{ModuleOptions.new(options)}`
end
modules() click to toggle source
# File lib/audio_switch/pactl.rb, line 25
def modules
  self.class.parse_modules(`pactl list modules`)
end
move_input(input_id, sink_id) click to toggle source
# File lib/audio_switch/pactl.rb, line 5
def move_input(input_id, sink_id)
  AudioSwitch::LOG.info "moving sink input '#{input_id}' to sink '#{sink_id}'"
  `pactl move-sink-input #{input_id} #{sink_id}`
end
mute_source(source_id) click to toggle source
# File lib/audio_switch/pactl.rb, line 57
def mute_source(source_id)
  AudioSwitch::LOG.info "muting source '#{source_id}'"
  `pactl set-source-mute #{source_id} true`
end
sinks() click to toggle source
# File lib/audio_switch/pactl.rb, line 16
def sinks
  default_sink_name = self.class.parse_default_sink(`pacmd stat`)
  self.class.parse_sinks(`pactl list sinks`, default_sink_name)
end
sources() click to toggle source
# File lib/audio_switch/pactl.rb, line 29
def sources
  self.class.parse_sources(`pactl list sources`)
end
subscribe(command = 'pactl subscribe') { |out.parse_event| ... } click to toggle source
# File lib/audio_switch/pactl.rb, line 43
def subscribe(command = 'pactl subscribe')
  Thread.start do
    AudioSwitch::LOG.info "starting '#{command}'"
    @pactl_sub = PTY.spawn(command)[0]
    begin
      @pactl_sub.each do |line|
        yield(Out.new(line).parse_event)
      end
    rescue Errno::EIO, IOError => e
      AudioSwitch::LOG.error("reading '#{command}' output") { e }
    end
  end
end
unload_module(mod) click to toggle source
# File lib/audio_switch/pactl.rb, line 38
def unload_module(mod)
  AudioSwitch::LOG.info "unloading module '#{mod}'"
  `pactl unload-module #{mod}`
end
unmute_source(source_id) click to toggle source
# File lib/audio_switch/pactl.rb, line 62
def unmute_source(source_id)
  AudioSwitch::LOG.info "unmuting source '#{source_id}'"
  `pactl set-source-mute #{source_id} false`
end