pulseaudio 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/gui/choose_active_sink_gtk3/choose_active_sink.glade +113 -0
- data/gui/choose_active_sink_gtk3/choose_active_sink_gtk3.rb +71 -12
- data/include/pulseaudio_sink_input.rb +100 -7
- data/pulseaudio.gemspec +9 -8
- data/spec/pulseaudio_spec.rb +9 -0
- metadata +83 -86
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
@@ -1,6 +1,11 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<interface>
|
3
3
|
<!-- interface-requires gtk+ 3.0 -->
|
4
|
+
<object class="GtkAdjustment" id="adjustmentApplicationVolume">
|
5
|
+
<property name="upper">100</property>
|
6
|
+
<property name="step_increment">1</property>
|
7
|
+
<property name="page_increment">10</property>
|
8
|
+
</object>
|
4
9
|
<object class="GtkAdjustment" id="adjustmentSinkVolume">
|
5
10
|
<property name="upper">100</property>
|
6
11
|
<property name="step_increment">1</property>
|
@@ -301,6 +306,114 @@
|
|
301
306
|
<property name="tab_fill">False</property>
|
302
307
|
</packing>
|
303
308
|
</child>
|
309
|
+
<child>
|
310
|
+
<object class="GtkBox" id="box1">
|
311
|
+
<property name="visible">True</property>
|
312
|
+
<property name="can_focus">False</property>
|
313
|
+
<property name="orientation">vertical</property>
|
314
|
+
<child>
|
315
|
+
<object class="GtkFrame" id="frameApplicationSettings">
|
316
|
+
<property name="visible">True</property>
|
317
|
+
<property name="can_focus">False</property>
|
318
|
+
<property name="label_xalign">0</property>
|
319
|
+
<property name="shadow_type">none</property>
|
320
|
+
<child>
|
321
|
+
<object class="GtkAlignment" id="alignment3">
|
322
|
+
<property name="visible">True</property>
|
323
|
+
<property name="can_focus">False</property>
|
324
|
+
<property name="left_padding">12</property>
|
325
|
+
<child>
|
326
|
+
<object class="GtkHScale" id="hscaleApplicationVolume">
|
327
|
+
<property name="visible">True</property>
|
328
|
+
<property name="can_focus">True</property>
|
329
|
+
<property name="adjustment">adjustmentApplicationVolume</property>
|
330
|
+
<property name="draw_value">False</property>
|
331
|
+
<signal name="change-value" handler="on_hscaleApplicationVolume_change_value" swapped="no"/>
|
332
|
+
</object>
|
333
|
+
</child>
|
334
|
+
</object>
|
335
|
+
</child>
|
336
|
+
<child type="label">
|
337
|
+
<object class="GtkLabel" id="label6">
|
338
|
+
<property name="visible">True</property>
|
339
|
+
<property name="can_focus">False</property>
|
340
|
+
<property name="label" translatable="yes"><b>Application settings</b></property>
|
341
|
+
<property name="use_markup">True</property>
|
342
|
+
</object>
|
343
|
+
</child>
|
344
|
+
</object>
|
345
|
+
<packing>
|
346
|
+
<property name="expand">False</property>
|
347
|
+
<property name="fill">True</property>
|
348
|
+
<property name="position">0</property>
|
349
|
+
</packing>
|
350
|
+
</child>
|
351
|
+
<child>
|
352
|
+
<object class="GtkFrame" id="frame4">
|
353
|
+
<property name="visible">True</property>
|
354
|
+
<property name="can_focus">False</property>
|
355
|
+
<property name="label_xalign">0</property>
|
356
|
+
<property name="shadow_type">none</property>
|
357
|
+
<child>
|
358
|
+
<object class="GtkAlignment" id="alignment4">
|
359
|
+
<property name="visible">True</property>
|
360
|
+
<property name="can_focus">False</property>
|
361
|
+
<property name="left_padding">12</property>
|
362
|
+
<child>
|
363
|
+
<object class="GtkViewport" id="viewport3">
|
364
|
+
<property name="visible">True</property>
|
365
|
+
<property name="can_focus">False</property>
|
366
|
+
<child>
|
367
|
+
<object class="GtkScrolledWindow" id="scrolledwindow3">
|
368
|
+
<property name="visible">True</property>
|
369
|
+
<property name="can_focus">True</property>
|
370
|
+
<property name="shadow_type">in</property>
|
371
|
+
<child>
|
372
|
+
<object class="GtkTreeView" id="tvApplications">
|
373
|
+
<property name="visible">True</property>
|
374
|
+
<property name="can_focus">True</property>
|
375
|
+
<child internal-child="selection">
|
376
|
+
<object class="GtkTreeSelection" id="treeview-selection3"/>
|
377
|
+
</child>
|
378
|
+
</object>
|
379
|
+
</child>
|
380
|
+
</object>
|
381
|
+
</child>
|
382
|
+
</object>
|
383
|
+
</child>
|
384
|
+
</object>
|
385
|
+
</child>
|
386
|
+
<child type="label">
|
387
|
+
<object class="GtkLabel" id="label7">
|
388
|
+
<property name="visible">True</property>
|
389
|
+
<property name="can_focus">False</property>
|
390
|
+
<property name="label" translatable="yes"><b>Choose application</b></property>
|
391
|
+
<property name="use_markup">True</property>
|
392
|
+
</object>
|
393
|
+
</child>
|
394
|
+
</object>
|
395
|
+
<packing>
|
396
|
+
<property name="expand">True</property>
|
397
|
+
<property name="fill">True</property>
|
398
|
+
<property name="position">1</property>
|
399
|
+
</packing>
|
400
|
+
</child>
|
401
|
+
</object>
|
402
|
+
<packing>
|
403
|
+
<property name="position">2</property>
|
404
|
+
</packing>
|
405
|
+
</child>
|
406
|
+
<child type="tab">
|
407
|
+
<object class="GtkLabel" id="label2">
|
408
|
+
<property name="visible">True</property>
|
409
|
+
<property name="can_focus">False</property>
|
410
|
+
<property name="label" translatable="yes">Applications</property>
|
411
|
+
</object>
|
412
|
+
<packing>
|
413
|
+
<property name="position">2</property>
|
414
|
+
<property name="tab_fill">False</property>
|
415
|
+
</packing>
|
416
|
+
</child>
|
304
417
|
</object>
|
305
418
|
</child>
|
306
419
|
</object>
|
@@ -30,6 +30,22 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
30
30
|
@ui["tvSources"].get_column(0).visible = false
|
31
31
|
self.reload_sources
|
32
32
|
|
33
|
+
@tv_applications = Gtk3assist::Treeview.new(
|
34
|
+
:tv => @ui["tvApplications"],
|
35
|
+
:model => :liststore,
|
36
|
+
:sort_col => :name,
|
37
|
+
:cols => [
|
38
|
+
{:id => :id, :title => _("ID")},
|
39
|
+
{:id => :name, :title => _("Name")}
|
40
|
+
]
|
41
|
+
)
|
42
|
+
@ui["tvApplications"].get_column(0).visible = false
|
43
|
+
@ui["tvApplications"].selection.signal_connect("changed", &self.method(:on_tvApplications_selection_changed))
|
44
|
+
|
45
|
+
self.reload_applications
|
46
|
+
self.update_application_info
|
47
|
+
@ui["frameApplicationSettings"].hide
|
48
|
+
|
33
49
|
PulseAudio::Sink::Input.auto_redirect_new_inputs_to_default_sink
|
34
50
|
PulseAudio::Source::Output.auto_redirect_new_outputs_to_default_source
|
35
51
|
|
@@ -150,6 +166,11 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
150
166
|
@ui["adjustmentSourceVolume"].value = @source.vol_perc.to_f
|
151
167
|
end
|
152
168
|
|
169
|
+
def update_application_info
|
170
|
+
return nil if !@input
|
171
|
+
@ui["adjustmentApplicationVolume"].value = @input.vol_perc.to_f
|
172
|
+
end
|
173
|
+
|
153
174
|
def on_hscaleSinkVolume_change_value
|
154
175
|
GLib.source_remove(@timeout_sink_volume_change) if @timeout_sink_volume_change
|
155
176
|
|
@@ -178,7 +199,7 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
178
199
|
|
179
200
|
def on_sicon_activate(*args)
|
180
201
|
if !@ui["window"].get_visible
|
181
|
-
@ui["window"].
|
202
|
+
@ui["window"].show
|
182
203
|
else
|
183
204
|
@ui["window"].hide
|
184
205
|
end
|
@@ -272,17 +293,8 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
272
293
|
sel = @tv_sources.sel
|
273
294
|
return nil if !sel
|
274
295
|
|
275
|
-
source =
|
276
|
-
|
277
|
-
if source_i.source_id.to_i == sel[:data][:id].to_i
|
278
|
-
source = source_i
|
279
|
-
break
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
raise "Could not find source." if !source
|
284
|
-
@source = source
|
285
|
-
source.default!
|
296
|
+
@source = PulseAudio::Source.by_id(sel[:data][:id].to_i)
|
297
|
+
@source.default!
|
286
298
|
self.update_icon
|
287
299
|
self.update_source_info
|
288
300
|
rescue => e
|
@@ -290,6 +302,53 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
290
302
|
end
|
291
303
|
end
|
292
304
|
|
305
|
+
def add_input(input)
|
306
|
+
append_data = @tv_applications.add_row(:data => {:id => input.input_id, :name => input.name})
|
307
|
+
return append_data
|
308
|
+
end
|
309
|
+
|
310
|
+
def reload_applications
|
311
|
+
begin
|
312
|
+
@reloading = true
|
313
|
+
|
314
|
+
@tv_applications.model.clear
|
315
|
+
PulseAudio::Sink::Input.list do |input|
|
316
|
+
append_data = self.add_input(input)
|
317
|
+
end
|
318
|
+
ensure
|
319
|
+
@reloading = false
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
def on_tvApplications_selection_changed(*args)
|
324
|
+
begin
|
325
|
+
return nil if @reloading or !@tv_applications
|
326
|
+
sel = @tv_applications.sel
|
327
|
+
|
328
|
+
if !sel
|
329
|
+
@ui["frameApplicationSettings"].hide
|
330
|
+
@input = nil
|
331
|
+
else
|
332
|
+
@ui["frameApplicationSettings"].show
|
333
|
+
@input = PulseAudio::Sink::Input.by_id(sel[:data][:id].to_i)
|
334
|
+
self.update_application_info
|
335
|
+
end
|
336
|
+
rescue => e
|
337
|
+
raise e
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def on_hscaleApplicationVolume_change_value
|
342
|
+
return nil if !@input
|
343
|
+
GLib.source_remove(@timeout_input_volume_change) if @timeout_input_volume_change
|
344
|
+
|
345
|
+
@timeout_input_volume_change = GLib.timeout_add(GLib::PRIORITY_DEFAULT_IDLE, 50, proc{
|
346
|
+
@timeout_input_volume_change = nil
|
347
|
+
@input.vol_perc = @ui["adjustmentApplicationVolume"].value
|
348
|
+
false
|
349
|
+
}, nil, nil)
|
350
|
+
end
|
351
|
+
|
293
352
|
def on_window_delete_event(*args)
|
294
353
|
@ui["window"].hide
|
295
354
|
return true
|
@@ -1,5 +1,8 @@
|
|
1
1
|
#Class for controlling inputs.
|
2
2
|
class PulseAudio::Sink::Input
|
3
|
+
#The arguments-hash. Contains various data for the input.
|
4
|
+
attr_reader :args
|
5
|
+
|
3
6
|
@@inputs = Wref_map.new
|
4
7
|
|
5
8
|
#Starts automatically redirect new opened inputs to the default sink.
|
@@ -29,21 +32,30 @@ class PulseAudio::Sink::Input
|
|
29
32
|
|
30
33
|
#Returns a list of sink-inputs.
|
31
34
|
def self.list
|
32
|
-
list = %x[
|
35
|
+
list = %x[pactl list sink-inputs]
|
33
36
|
inputs = [] unless block_given?
|
34
37
|
|
35
|
-
list.scan(/
|
36
|
-
|
37
|
-
|
38
|
-
|
38
|
+
list.scan(/(\n|^)Sink Input #(\d+)\s+([\s\S]+?)(\n\n|\Z)/) do |match|
|
39
|
+
props = {}
|
40
|
+
match[2].scan(/(\s+|^)([A-z]+?): (.+?)\n/) do |match_prop|
|
41
|
+
props[match_prop[1].downcase] = match_prop[2]
|
42
|
+
end
|
43
|
+
|
44
|
+
match[2].scan(/(\t\t|^)([A-z\.]+?) = (.+?)\n/) do |match_prop|
|
45
|
+
props[match_prop[1].downcase.gsub(/\./, "_")] = match_prop[2].gsub(/\"/, "")
|
46
|
+
end
|
47
|
+
|
48
|
+
input_id = match[1].to_i
|
49
|
+
args = {:input_id => input_id, :props => props}
|
50
|
+
|
39
51
|
input = @@inputs.get!(input_id)
|
40
52
|
if !input
|
41
53
|
input = PulseAudio::Sink::Input.new
|
42
54
|
@@inputs[input_id] = input
|
43
55
|
end
|
44
|
-
|
56
|
+
|
45
57
|
input.update(args)
|
46
|
-
|
58
|
+
|
47
59
|
if block_given?
|
48
60
|
yield(input)
|
49
61
|
else
|
@@ -81,6 +93,15 @@ class PulseAudio::Sink::Input
|
|
81
93
|
@args = args
|
82
94
|
end
|
83
95
|
|
96
|
+
#Returns the name of the input as a string.
|
97
|
+
def name
|
98
|
+
if app_name = @args[:props]["application_name"].to_s.strip and !app_name.empty?
|
99
|
+
return app_name
|
100
|
+
else
|
101
|
+
raise "Could not figure out the input-name."
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
84
105
|
#Returns the input-ID.
|
85
106
|
def input_id
|
86
107
|
return @args[:input_id]
|
@@ -91,4 +112,76 @@ class PulseAudio::Sink::Input
|
|
91
112
|
%x[pacmd move-sink-input #{self.input_id} #{newsink.sink_id}]
|
92
113
|
return nil
|
93
114
|
end
|
115
|
+
|
116
|
+
#Returns true if the sink is muted. Otherwise false.
|
117
|
+
#===Examples
|
118
|
+
# sink.muted? #=> false
|
119
|
+
def muted?
|
120
|
+
@args[:props]["mute"] == "yes"
|
121
|
+
end
|
122
|
+
|
123
|
+
#Toggles the mute-functionality of the sink. If it is muted: unmutes. If it isnt muted: mutes.
|
124
|
+
#===Examples
|
125
|
+
# sink.mute_toggle #=> nil
|
126
|
+
def mute_toggle
|
127
|
+
self.mute = !self.muted?
|
128
|
+
return nil
|
129
|
+
end
|
130
|
+
|
131
|
+
#Sets the mute to something specific.
|
132
|
+
#===Examples
|
133
|
+
# sink.mute = true #=> nil
|
134
|
+
def mute=(val)
|
135
|
+
if val
|
136
|
+
%x[pactl set-sink-input-mute #{self.input_id} 1]
|
137
|
+
@args[:props]["mute"] = "yes"
|
138
|
+
else
|
139
|
+
%x[pactl set-sink-input-mute #{self.input_id} 0]
|
140
|
+
@args[:props]["mute"] = "no"
|
141
|
+
end
|
142
|
+
|
143
|
+
return nil
|
144
|
+
end
|
145
|
+
|
146
|
+
#Increases the volume of the sink by 5%.
|
147
|
+
#===Examples
|
148
|
+
# sink.vol_incr if sink.active? #=> nil
|
149
|
+
def vol_incr
|
150
|
+
%x[pactl set-sink-input-volume #{self.input_id} -- +5%]
|
151
|
+
new_vol = vol_perc + 5
|
152
|
+
new_vol = 100 if new_vol > 100
|
153
|
+
@args[:props]["volume"] = "0: #{new_vol}% 1: #{new_vol}%"
|
154
|
+
return nil
|
155
|
+
end
|
156
|
+
|
157
|
+
#Decreases the volume of the sink by 5%.
|
158
|
+
#===Examples
|
159
|
+
# sink.vol_decr if sink.active? #=> nil
|
160
|
+
def vol_decr
|
161
|
+
%x[pactl set-sink-input-volume #{self.input_id} -- -5%]
|
162
|
+
new_vol = vol_perc - 5
|
163
|
+
new_vol = 0 if new_vol < 0
|
164
|
+
@args[:props]["volume"] = "0: #{new_vol}% 1: #{new_vol}%"
|
165
|
+
return nil
|
166
|
+
end
|
167
|
+
|
168
|
+
def vol_perc=(newval)
|
169
|
+
newval = newval.to_i
|
170
|
+
%x[pactl set-sink-input-volume #{self.input_id} #{newval}%]
|
171
|
+
@args[:props]["volume"] = "0: #{newval}% 1: #{newval}%"
|
172
|
+
return nil
|
173
|
+
end
|
174
|
+
|
175
|
+
#Returns the current percent of the volume.
|
176
|
+
def vol_perc
|
177
|
+
if match = @args[:props]["volume"].to_s.match(/(\d+):\s*([\d\.]+)%/)
|
178
|
+
return match[2].to_i
|
179
|
+
end
|
180
|
+
|
181
|
+
raise "Could not figure out the volume from properties: '#{@args[:props]}'."
|
182
|
+
end
|
183
|
+
|
184
|
+
def method_missing(meth, *args, &block)
|
185
|
+
@args[:props][meth.to_s]
|
186
|
+
end
|
94
187
|
end
|
data/pulseaudio.gemspec
CHANGED
@@ -4,14 +4,15 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = %q{pulseaudio}
|
8
|
+
s.version = "0.0.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date =
|
13
|
-
s.
|
14
|
-
s.
|
12
|
+
s.date = %q{2012-10-19}
|
13
|
+
s.default_executable = %q{pulseaudio_volume.rb}
|
14
|
+
s.description = %q{Ruby-library for controlling PulseAudio via 'pactl'.}
|
15
|
+
s.email = %q{k@spernj.org}
|
15
16
|
s.executables = ["pulseaudio_volume.rb"]
|
16
17
|
s.extra_rdoc_files = [
|
17
18
|
"LICENSE.txt",
|
@@ -49,11 +50,11 @@ Gem::Specification.new do |s|
|
|
49
50
|
"test_scripts/choose_active_sink_gtk3.rb",
|
50
51
|
"test_scripts/set_active.rb"
|
51
52
|
]
|
52
|
-
s.homepage =
|
53
|
+
s.homepage = %q{http://github.com/kaspernj/pulseaudio}
|
53
54
|
s.licenses = ["MIT"]
|
54
55
|
s.require_paths = ["lib"]
|
55
|
-
s.rubygems_version =
|
56
|
-
s.summary =
|
56
|
+
s.rubygems_version = %q{1.6.2}
|
57
|
+
s.summary = %q{Ruby-library for controlling PulseAudio.}
|
57
58
|
|
58
59
|
if s.respond_to? :specification_version then
|
59
60
|
s.specification_version = 3
|
data/spec/pulseaudio_spec.rb
CHANGED
@@ -9,6 +9,15 @@ describe "Pulseaudio" do
|
|
9
9
|
sink.mute_toggle
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
it "should spawn sink inputs and manipulate them" do
|
14
|
+
PulseAudio::Sink::Input.list do |input|
|
15
|
+
input.vol_decr
|
16
|
+
input.vol_incr
|
17
|
+
input.mute_toggle
|
18
|
+
input.mute_toggle
|
19
|
+
end
|
20
|
+
end
|
12
21
|
|
13
22
|
it "should be able to listen for events and redirect all new inputs to the default sink" do
|
14
23
|
def_sink = nil
|
metadata
CHANGED
@@ -1,126 +1,125 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pulseaudio
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
4
5
|
prerelease:
|
5
|
-
version: 0.0.7
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Kasper Johansen
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-10-19 00:00:00.000000000 +02:00
|
13
|
+
default_executable: pulseaudio_volume.rb
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
16
|
name: wref
|
17
|
-
requirement: &
|
17
|
+
requirement: &22848460 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
|
-
requirements:
|
20
|
-
- -
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *22848460
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
27
|
name: gir_ffi
|
28
|
-
requirement: &
|
28
|
+
requirement: &22847680 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
37
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *22847680
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
38
|
name: gtk3assist
|
39
|
-
requirement: &
|
39
|
+
requirement: &22845380 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version:
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
48
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *22845380
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
49
|
name: gettext
|
50
|
-
requirement: &
|
50
|
+
requirement: &22844520 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version:
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
59
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *22844520
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
60
|
name: knjrbfw
|
61
|
-
requirement: &
|
61
|
+
requirement: &22843640 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version:
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
70
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *22843640
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
|
-
requirement: &
|
72
|
+
requirement: &22842620 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
|
-
requirements:
|
74
|
+
requirements:
|
75
75
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
76
|
+
- !ruby/object:Gem::Version
|
77
77
|
version: 2.8.0
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
81
|
-
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: *22842620
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
82
|
name: rdoc
|
83
|
-
requirement: &
|
83
|
+
requirement: &22841480 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
|
-
requirements:
|
85
|
+
requirements:
|
86
86
|
- - ~>
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version:
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.12'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
92
|
-
- !ruby/object:Gem::Dependency
|
91
|
+
version_requirements: *22841480
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
93
|
name: bundler
|
94
|
-
requirement: &
|
94
|
+
requirement: &22840600 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
99
|
version: 1.0.0
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
103
|
-
- !ruby/object:Gem::Dependency
|
102
|
+
version_requirements: *22840600
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
104
|
name: jeweler
|
105
|
-
requirement: &
|
105
|
+
requirement: &22839720 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
|
-
requirements:
|
107
|
+
requirements:
|
108
108
|
- - ~>
|
109
|
-
- !ruby/object:Gem::Version
|
109
|
+
- !ruby/object:Gem::Version
|
110
110
|
version: 1.8.3
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *22839720
|
114
114
|
description: Ruby-library for controlling PulseAudio via 'pactl'.
|
115
115
|
email: k@spernj.org
|
116
|
-
executables:
|
116
|
+
executables:
|
117
117
|
- pulseaudio_volume.rb
|
118
118
|
extensions: []
|
119
|
-
|
120
|
-
extra_rdoc_files:
|
119
|
+
extra_rdoc_files:
|
121
120
|
- LICENSE.txt
|
122
121
|
- README.rdoc
|
123
|
-
files:
|
122
|
+
files:
|
124
123
|
- .document
|
125
124
|
- .rspec
|
126
125
|
- Gemfile
|
@@ -151,35 +150,33 @@ files:
|
|
151
150
|
- test_scripts/choose_active_sink.rb
|
152
151
|
- test_scripts/choose_active_sink_gtk3.rb
|
153
152
|
- test_scripts/set_active.rb
|
153
|
+
has_rdoc: true
|
154
154
|
homepage: http://github.com/kaspernj/pulseaudio
|
155
|
-
licenses:
|
155
|
+
licenses:
|
156
156
|
- MIT
|
157
157
|
post_install_message:
|
158
158
|
rdoc_options: []
|
159
|
-
|
160
|
-
require_paths:
|
159
|
+
require_paths:
|
161
160
|
- lib
|
162
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
162
|
none: false
|
164
|
-
requirements:
|
165
|
-
- -
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
|
168
|
-
segments:
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
segments:
|
169
168
|
- 0
|
170
|
-
|
171
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
|
+
hash: 4386632661636528784
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
171
|
none: false
|
173
|
-
requirements:
|
174
|
-
- -
|
175
|
-
- !ruby/object:Gem::Version
|
176
|
-
version:
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
177
176
|
requirements: []
|
178
|
-
|
179
177
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.
|
178
|
+
rubygems_version: 1.6.2
|
181
179
|
signing_key:
|
182
180
|
specification_version: 3
|
183
181
|
summary: Ruby-library for controlling PulseAudio.
|
184
182
|
test_files: []
|
185
|
-
|