pulseaudio 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
|