Class: AudioSwitch::Pactl

Inherits:
Object
  • Object
show all
Defined in:
lib/audio_switch/pactl.rb

Defined Under Namespace

Classes: ModuleOptions, Out

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse_default_sink(out) ⇒ Object



108
109
110
# 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) ⇒ Object



81
82
83
84
85
86
87
# 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) ⇒ Object



89
90
91
92
93
94
95
96
# 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) ⇒ Object



71
72
73
74
75
76
77
78
79
# 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) ⇒ Object



98
99
100
101
102
103
104
105
106
# 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

Instance Method Details

#default_sink=(sink_id) ⇒ Object



10
11
12
13
14
# 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

#disposeObject



67
68
69
# File 'lib/audio_switch/pactl.rb', line 67

def dispose
  @pactl_sub.close
end

#inputsObject



21
22
23
# File 'lib/audio_switch/pactl.rb', line 21

def inputs
  self.class.parse_inputs(`pactl list sink-inputs`)
end

#load_module(mod, options = {}) ⇒ Object



33
34
35
36
# 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

#modulesObject



25
26
27
# File 'lib/audio_switch/pactl.rb', line 25

def modules
  self.class.parse_modules(`pactl list modules`)
end

#move_input(input_id, sink_id) ⇒ Object



5
6
7
8
# 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) ⇒ Object



57
58
59
60
# 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

#sinksObject



16
17
18
19
# 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

#sourcesObject



29
30
31
# File 'lib/audio_switch/pactl.rb', line 29

def sources
  self.class.parse_sources(`pactl list sources`)
end

#subscribe(command = 'pactl subscribe') ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# 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) ⇒ Object



38
39
40
41
# 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) ⇒ Object



62
63
64
65
# 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