Merge lp:~michael-sheldon/jokosher/recording-preferences-bitrates into lp:jokosher

Proposed by Michael Sheldon
Status: Merged
Merged at revision: 1120
Proposed branch: lp:~michael-sheldon/jokosher/recording-preferences-bitrates
Merge into: lp:jokosher
Diff against target: 616 lines (+204/-80)
4 files modified
Jokosher/Globals.py (+2/-2)
Jokosher/PreferencesDialog.py (+46/-4)
Jokosher/Project.py (+9/-3)
gtk-builder-ui/PreferencesDialog.ui (+147/-71)
To merge this branch: bzr merge lp:~michael-sheldon/jokosher/recording-preferences-bitrates
Reviewer Review Type Date Requested Status
Michael Sheldon (community) Approve
Review via email: mp+76877@code.launchpad.net

Description of the change

This branch allows for bit rates to be set for project wide recording when using a lossy recording method.

Without the changes included in this branch lossy formats are currently broken in trunk due ConfigParser attempting to interpret encoding strings containing "%(bitrate)d" parameters itself and failing. This branch switches to RawConfigParser (doesn't interpolate parameters like that) and provides relevant bitrate values when needed within Jokosher itself (along with making it possible for the user to set their preferred bitrate in the recording preferences).

To post a comment you must log in.
Revision history for this message
Michael Sheldon (michael-sheldon) wrote :

Merged.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Jokosher/Globals.py'
2--- Jokosher/Globals.py 2011-03-14 22:26:44 +0000
3+++ Jokosher/Globals.py 2011-09-25 02:05:26 +0000
4@@ -91,8 +91,8 @@
5
6 def __init__(self):
7 self.filename = os.path.join(JOKOSHER_CONFIG_HOME, "config")
8-
9- self.config = ConfigParser.ConfigParser()
10+ # Use RawConfigParser so that parameters in pipelines don't get processed
11+ self.config = ConfigParser.RawConfigParser()
12 self.read()
13
14 #_____________________________________________________________________
15
16=== modified file 'Jokosher/PreferencesDialog.py'
17--- Jokosher/PreferencesDialog.py 2011-01-07 11:50:40 +0000
18+++ Jokosher/PreferencesDialog.py 2011-09-25 02:05:26 +0000
19@@ -58,6 +58,8 @@
20 self.recordingCustomPipeline = self.gtk_builder.get_object("recordingCustomPipeline")
21 self.recordingSoundSystem = self.gtk_builder.get_object("recordingSoundSystem")
22 self.samplingRate = self.gtk_builder.get_object("samplingRate")
23+ self.bitRateCombo = self.gtk_builder.get_object("bitRate")
24+ self.bitRateLabel = self.gtk_builder.get_object("bitRateLabel")
25 self.playbackDevice = self.gtk_builder.get_object("playbackDevice")
26 self.playbackSink = self.gtk_builder.get_object("playbackSink")
27 self.customSink = self.gtk_builder.get_object("customSink")
28@@ -145,14 +147,31 @@
29 sampleRateSettingIndex = self.sampleRateList.index( (text, value) )
30 self.samplingRate.set_active(sampleRateSettingIndex)
31
32+ #Bit rate settings for lossy file formats
33+ try:
34+ bitRateSetting = int(Globals.settings.recording["bitrate"])
35+ if Globals.settings.recording["file_extension"] == "ogg":
36+ # vorbisenc uses bps instead of kbps
37+ bitRateSetting /= 1024
38+ except KeyError:
39+ bitRateSetting = int(Globals.DEFAULT_BIT_RATE)
40+ if bitRateSetting == 0:
41+ bitRateSetting = int(Globals.DEFAULT_BIT_RATE)
42+
43+ for index, bitrate in enumerate(Globals.BIT_RATES):
44+ self.bitRateCombo.append_text("%d kbps" % bitrate)
45+ if bitrate == bitRateSetting:
46+ self.bitRateCombo.set_active(index)
47
48 fileFormatSetting = Globals.settings.recording["fileformat"]
49 fileFormatSettingIndex = 0
50+ setBitRate = False
51 #get all the encoders from Globals
52- for format in Globals.EXPORT_FORMATS:
53- self.recordingFileFormat.append_text("%s (.%s)" % (format["description"], format["extension"]))
54- if fileFormatSetting == format["pipeline"]:
55- fileFormatSettingIndex = Globals.EXPORT_FORMATS.index(format)
56+ for exportFormat in Globals.EXPORT_FORMATS:
57+ self.recordingFileFormat.append_text("%s (.%s)" % (exportFormat["description"], exportFormat["extension"]))
58+ if fileFormatSetting == exportFormat["pipeline"]:
59+ fileFormatSettingIndex = Globals.EXPORT_FORMATS.index(exportFormat)
60+ setBitRate = exportFormat["setBitRate"]
61
62 self.recordingFileFormat.set_active(fileFormatSettingIndex)
63
64@@ -168,6 +187,7 @@
65 self.loadingSettings = False
66
67 self.dlg.show_all()
68+ self.ShowBitRate(setBitRate)
69
70 #_____________________________________________________________________
71
72@@ -222,6 +242,16 @@
73 return
74
75 exportDict = Globals.EXPORT_FORMATS[self.recordingFileFormat.get_active()]
76+ self.ShowBitRate(exportDict["setBitRate"])
77+ if exportDict["setBitRate"]:
78+ bitrate = Globals.BIT_RATES[self.bitRateCombo.get_active()]
79+ if exportDict["extension"] == "ogg":
80+ # vorbisenc takes bit rate in bps instead of kbps
81+ bitrate *= 1024
82+ else:
83+ # Indicates that this encoder doesn't take a bitrate parameter
84+ bitrate = 0
85+ Globals.settings.recording["bitrate"] = bitrate
86 Globals.settings.recording["fileformat"] = exportDict["pipeline"]
87 Globals.settings.recording["file_extension"] = exportDict["extension"]
88 #only get the number from "44100 Hz", not the whole string
89@@ -352,3 +382,15 @@
90 self.LoadSetting(self.playbackDevice, Globals.settings.playback, "devicename")
91
92 #_____________________________________________________________________
93+
94+ def ShowBitRate(self, show):
95+ """
96+ Shows or hides the bit rate combo box.
97+
98+ Parameters:
99+ show -- Boolean indicating whether to show the bit rate combo box or not.
100+ """
101+ self.bitRateCombo.set_visible(show)
102+ self.bitRateLabel.set_visible(show)
103+
104+ #_____________________________________________________________________
105
106=== modified file 'Jokosher/Project.py'
107--- Jokosher/Project.py 2011-03-14 22:26:44 +0000
108+++ Jokosher/Project.py 2011-09-25 02:05:26 +0000
109@@ -383,16 +383,20 @@
110 else:
111 instr = recInstruments[0]
112 event = instr.GetRecordingEvent()
113-
114+
115 encodeString = Globals.settings.recording["fileformat"]
116 recordString = Globals.settings.recording["audiosrc"]
117+
118+ # 0 means this encoder doesn't take a bitrate
119+ if Globals.settings.recording["bitrate"] > 0:
120+ encodeString %= {'bitrate' : int(Globals.settings.recording["bitrate"])}
121
122 sampleRate = 0
123 try:
124 sampleRate = int( Globals.settings.recording["samplerate"] )
125 except ValueError:
126 pass
127- # 0 means for "autodetect", or more technically "don't use any caps".
128+ # 0 means "autodetect", or more technically "don't use any caps".
129 if sampleRate > 0:
130 capsString = "audio/x-raw-int,rate=%s ! audioconvert" % sampleRate
131 else:
132@@ -626,8 +630,10 @@
133 if instr.inTrack == index:
134 event = instr.GetRecordingEvent()
135
136- # TODO: get rid of string concatentation
137 encodeString = Globals.settings.recording["fileformat"]
138+ # 0 means this encoder doesn't take a bitrate
139+ if Globals.settings.recording["bitrate"] > 0:
140+ encodeString %= {'bitrate' : int(Globals.settings.recording["bitrate"])}
141 pipe = "queue ! audioconvert ! level name=recordlevel ! audioconvert ! %s ! filesink name=sink"
142 pipe %= encodeString
143
144
145=== modified file 'gtk-builder-ui/PreferencesDialog.ui'
146--- gtk-builder-ui/PreferencesDialog.ui 2011-01-07 11:24:43 +0000
147+++ gtk-builder-ui/PreferencesDialog.ui 2011-09-25 02:05:26 +0000
148@@ -1,38 +1,8 @@
149 <?xml version="1.0" encoding="UTF-8"?>
150 <interface>
151 <requires lib="gtk+" version="2.16"/>
152- <!-- interface-naming-policy project-wide -->
153- <object class="GtkListStore" id="preferences_playback_device_liststore">
154- <columns>
155- <!-- column-name item -->
156- <column type="gchararray"/>
157- </columns>
158- </object>
159- <object class="GtkListStore" id="preferences_playback_sink_liststore">
160- <columns>
161- <!-- column-name item -->
162- <column type="gchararray"/>
163- </columns>
164- </object>
165- <object class="GtkListStore" id="preferences_recording_system_liststore">
166- <columns>
167- <!-- column-name item -->
168- <column type="gchararray"/>
169- </columns>
170- </object>
171- <object class="GtkListStore" id="preferences_sample_rate_liststore">
172- <columns>
173- <!-- column-name item -->
174- <column type="gchararray"/>
175- </columns>
176- </object>
177- <object class="GtkListStore" id="preferences_recording_format_liststore">
178- <columns>
179- <!-- column-name item -->
180- <column type="gchararray"/>
181- </columns>
182- </object>
183 <object class="GtkWindow" id="PreferencesDialog">
184+ <property name="can_focus">False</property>
185 <property name="border_width">6</property>
186 <property name="title">Preferences</property>
187 <property name="modal">True</property>
188@@ -42,27 +12,32 @@
189 <child>
190 <object class="GtkVBox" id="vbox3">
191 <property name="visible">True</property>
192+ <property name="can_focus">False</property>
193 <child>
194 <object class="GtkFrame" id="frame5">
195 <property name="visible">True</property>
196+ <property name="can_focus">False</property>
197 <property name="label_xalign">0</property>
198 <property name="shadow_type">none</property>
199 <child>
200 <object class="GtkAlignment" id="alignment8">
201 <property name="visible">True</property>
202+ <property name="can_focus">False</property>
203 <property name="left_padding">12</property>
204 <child>
205 <object class="GtkVBox" id="vbox12">
206 <property name="visible">True</property>
207+ <property name="can_focus">False</property>
208 <child>
209 <object class="GtkRadioButton" id="startupNewProject">
210 <property name="label" translatable="yes">Open a _new project</property>
211 <property name="visible">True</property>
212 <property name="can_focus">True</property>
213 <property name="receives_default">False</property>
214+ <property name="use_action_appearance">False</property>
215 <property name="use_underline">True</property>
216 <property name="draw_indicator">True</property>
217- <signal name="clicked" handler="on_Setting_changed"/>
218+ <signal name="clicked" handler="on_Setting_changed" swapped="no"/>
219 </object>
220 <packing>
221 <property name="expand">False</property>
222@@ -76,10 +51,11 @@
223 <property name="visible">True</property>
224 <property name="can_focus">True</property>
225 <property name="receives_default">False</property>
226+ <property name="use_action_appearance">False</property>
227 <property name="use_underline">True</property>
228 <property name="draw_indicator">True</property>
229 <property name="group">startupNewProject</property>
230- <signal name="clicked" handler="on_Setting_changed"/>
231+ <signal name="clicked" handler="on_Setting_changed" swapped="no"/>
232 </object>
233 <packing>
234 <property name="expand">False</property>
235@@ -93,10 +69,11 @@
236 <property name="visible">True</property>
237 <property name="can_focus">True</property>
238 <property name="receives_default">False</property>
239+ <property name="use_action_appearance">False</property>
240 <property name="use_underline">True</property>
241 <property name="draw_indicator">True</property>
242 <property name="group">startupNewProject</property>
243- <signal name="clicked" handler="on_Setting_changed"/>
244+ <signal name="clicked" handler="on_Setting_changed" swapped="no"/>
245 </object>
246 <packing>
247 <property name="expand">False</property>
248@@ -111,6 +88,7 @@
249 <child type="label">
250 <object class="GtkLabel" id="label28">
251 <property name="visible">True</property>
252+ <property name="can_focus">False</property>
253 <property name="xpad">5</property>
254 <property name="ypad">5</property>
255 <property name="label" translatable="yes">&lt;b&gt;Application Start-up&lt;/b&gt;</property>
256@@ -125,25 +103,61 @@
257 </packing>
258 </child>
259 <child>
260+ <object class="GtkHButtonBox" id="hbuttonbox2">
261+ <property name="visible">True</property>
262+ <property name="can_focus">False</property>
263+ <property name="border_width">6</property>
264+ <property name="layout_style">end</property>
265+ <child>
266+ <object class="GtkButton" id="closeButton">
267+ <property name="label">gtk-close</property>
268+ <property name="visible">True</property>
269+ <property name="can_focus">True</property>
270+ <property name="can_default">True</property>
271+ <property name="receives_default">False</property>
272+ <property name="tooltip_text" translatable="yes">Save preferences and close</property>
273+ <property name="use_action_appearance">False</property>
274+ <property name="use_stock">True</property>
275+ <signal name="clicked" handler="on_Close_clicked" swapped="no"/>
276+ </object>
277+ <packing>
278+ <property name="expand">False</property>
279+ <property name="fill">False</property>
280+ <property name="position">0</property>
281+ </packing>
282+ </child>
283+ </object>
284+ <packing>
285+ <property name="expand">False</property>
286+ <property name="fill">True</property>
287+ <property name="pack_type">end</property>
288+ <property name="position">1</property>
289+ </packing>
290+ </child>
291+ <child>
292 <object class="GtkFrame" id="frame16">
293 <property name="visible">True</property>
294+ <property name="can_focus">False</property>
295 <property name="label_xalign">0</property>
296 <property name="shadow_type">none</property>
297 <child>
298 <object class="GtkAlignment" id="alignment30">
299 <property name="visible">True</property>
300+ <property name="can_focus">False</property>
301 <property name="left_padding">12</property>
302 <child>
303 <object class="GtkTable" id="table16">
304 <property name="visible">True</property>
305+ <property name="can_focus">False</property>
306 <property name="border_width">5</property>
307- <property name="n_rows">2</property>
308+ <property name="n_rows">3</property>
309 <property name="n_columns">2</property>
310 <property name="column_spacing">5</property>
311 <property name="row_spacing">5</property>
312 <child>
313 <object class="GtkLabel" id="label128">
314 <property name="visible">True</property>
315+ <property name="can_focus">False</property>
316 <property name="xalign">0</property>
317 <property name="label" translatable="yes">_Encoding:</property>
318 <property name="use_underline">True</property>
319@@ -157,6 +171,7 @@
320 <child>
321 <object class="GtkLabel" id="label129">
322 <property name="visible">True</property>
323+ <property name="can_focus">False</property>
324 <property name="xalign">0</property>
325 <property name="label" translatable="yes">S_ample Rate:</property>
326 <property name="use_underline">True</property>
327@@ -172,8 +187,9 @@
328 <child>
329 <object class="GtkComboBox" id="recordingFileFormat">
330 <property name="visible">True</property>
331+ <property name="can_focus">False</property>
332 <property name="model">preferences_recording_format_liststore</property>
333- <signal name="changed" handler="on_Setting_changed"/>
334+ <signal name="changed" handler="on_Setting_changed" swapped="no"/>
335 <child>
336 <object class="GtkCellRendererText" id="cellrenderertext5"/>
337 <attributes>
338@@ -190,8 +206,9 @@
339 <child>
340 <object class="GtkComboBox" id="samplingRate">
341 <property name="visible">True</property>
342+ <property name="can_focus">False</property>
343 <property name="model">preferences_sample_rate_liststore</property>
344- <signal name="changed" handler="on_Setting_changed"/>
345+ <signal name="changed" handler="on_Setting_changed" swapped="no"/>
346 <child>
347 <object class="GtkCellRendererText" id="cellrenderertext4"/>
348 <attributes>
349@@ -207,6 +224,41 @@
350 <property name="y_options">GTK_FILL</property>
351 </packing>
352 </child>
353+ <child>
354+ <object class="GtkLabel" id="bitRateLabel">
355+ <property name="can_focus">False</property>
356+ <property name="xalign">0</property>
357+ <property name="label" translatable="yes">_Bit Rate:</property>
358+ <property name="use_underline">True</property>
359+ <property name="mnemonic_widget">samplingRate</property>
360+ </object>
361+ <packing>
362+ <property name="top_attach">2</property>
363+ <property name="bottom_attach">3</property>
364+ <property name="x_options">GTK_FILL</property>
365+ <property name="y_options"></property>
366+ </packing>
367+ </child>
368+ <child>
369+ <object class="GtkComboBox" id="bitRate">
370+ <property name="can_focus">False</property>
371+ <property name="model">preferences_bit_rate_liststore</property>
372+ <signal name="changed" handler="on_Setting_changed" swapped="no"/>
373+ <child>
374+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
375+ <attributes>
376+ <attribute name="text">0</attribute>
377+ </attributes>
378+ </child>
379+ </object>
380+ <packing>
381+ <property name="left_attach">1</property>
382+ <property name="right_attach">2</property>
383+ <property name="top_attach">2</property>
384+ <property name="bottom_attach">3</property>
385+ <property name="y_options">GTK_FILL</property>
386+ </packing>
387+ </child>
388 </object>
389 </child>
390 </object>
391@@ -214,6 +266,7 @@
392 <child type="label">
393 <object class="GtkLabel" id="label131">
394 <property name="visible">True</property>
395+ <property name="can_focus">False</property>
396 <property name="xpad">5</property>
397 <property name="ypad">5</property>
398 <property name="label" translatable="yes">&lt;b&gt;Recording Format&lt;/b&gt;</property>
399@@ -230,15 +283,18 @@
400 <child>
401 <object class="GtkFrame" id="frame15">
402 <property name="visible">True</property>
403+ <property name="can_focus">False</property>
404 <property name="label_xalign">0</property>
405 <property name="shadow_type">none</property>
406 <child>
407 <object class="GtkAlignment" id="alignment29">
408 <property name="visible">True</property>
409+ <property name="can_focus">False</property>
410 <property name="left_padding">12</property>
411 <child>
412 <object class="GtkTable" id="table15">
413 <property name="visible">True</property>
414+ <property name="can_focus">False</property>
415 <property name="border_width">5</property>
416 <property name="n_rows">2</property>
417 <property name="n_columns">2</property>
418@@ -247,6 +303,7 @@
419 <child>
420 <object class="GtkLabel" id="label124">
421 <property name="visible">True</property>
422+ <property name="can_focus">False</property>
423 <property name="xalign">0</property>
424 <property name="label" translatable="yes">S_ystem:</property>
425 <property name="use_underline">True</property>
426@@ -260,6 +317,7 @@
427 <child>
428 <object class="GtkLabel" id="label125">
429 <property name="visible">True</property>
430+ <property name="can_focus">False</property>
431 <property name="xalign">0</property>
432 <property name="label" translatable="yes">_Pipeline:</property>
433 <property name="use_underline">True</property>
434@@ -277,7 +335,7 @@
435 <property name="visible">True</property>
436 <property name="can_focus">True</property>
437 <property name="invisible_char">●</property>
438- <signal name="focus_out_event" handler="on_recordingSoundSystem_changed"/>
439+ <signal name="focus-out-event" handler="on_recordingSoundSystem_changed" swapped="no"/>
440 </object>
441 <packing>
442 <property name="left_attach">1</property>
443@@ -289,8 +347,9 @@
444 <child>
445 <object class="GtkComboBox" id="recordingSoundSystem">
446 <property name="visible">True</property>
447+ <property name="can_focus">False</property>
448 <property name="model">preferences_recording_system_liststore</property>
449- <signal name="changed" handler="on_recordingSoundSystem_changed"/>
450+ <signal name="changed" handler="on_recordingSoundSystem_changed" swapped="no"/>
451 <child>
452 <object class="GtkCellRendererText" id="cellrenderertext3"/>
453 <attributes>
454@@ -311,6 +370,7 @@
455 <child type="label">
456 <object class="GtkLabel" id="label127">
457 <property name="visible">True</property>
458+ <property name="can_focus">False</property>
459 <property name="xpad">5</property>
460 <property name="ypad">5</property>
461 <property name="label" translatable="yes">&lt;b&gt;Recording Sound System&lt;/b&gt;</property>
462@@ -327,15 +387,18 @@
463 <child>
464 <object class="GtkFrame" id="frame7">
465 <property name="visible">True</property>
466+ <property name="can_focus">False</property>
467 <property name="label_xalign">0</property>
468 <property name="shadow_type">none</property>
469 <child>
470 <object class="GtkAlignment" id="alignment15">
471 <property name="visible">True</property>
472+ <property name="can_focus">False</property>
473 <property name="left_padding">12</property>
474 <child>
475 <object class="GtkTable" id="table9">
476 <property name="visible">True</property>
477+ <property name="can_focus">False</property>
478 <property name="border_width">5</property>
479 <property name="n_rows">3</property>
480 <property name="n_columns">2</property>
481@@ -344,8 +407,9 @@
482 <child>
483 <object class="GtkComboBox" id="playbackSink">
484 <property name="visible">True</property>
485+ <property name="can_focus">False</property>
486 <property name="model">preferences_playback_sink_liststore</property>
487- <signal name="changed" handler="on_playbackSink_changed"/>
488+ <signal name="changed" handler="on_playbackSink_changed" swapped="no"/>
489 <child>
490 <object class="GtkCellRendererText" id="cellrenderertext2"/>
491 <attributes>
492@@ -361,6 +425,7 @@
493 <child>
494 <object class="GtkLabel" id="label62">
495 <property name="visible">True</property>
496+ <property name="can_focus">False</property>
497 <property name="xalign">0</property>
498 <property name="label" translatable="yes">Sys_tem:</property>
499 <property name="use_underline">True</property>
500@@ -374,6 +439,7 @@
501 <child>
502 <object class="GtkLabel" id="label63">
503 <property name="visible">True</property>
504+ <property name="can_focus">False</property>
505 <property name="xalign">0</property>
506 <property name="label" translatable="yes">P_ipeline:</property>
507 <property name="use_underline">True</property>
508@@ -389,6 +455,7 @@
509 <child>
510 <object class="GtkLabel" id="label64">
511 <property name="visible">True</property>
512+ <property name="can_focus">False</property>
513 <property name="xalign">0</property>
514 <property name="label" translatable="yes">De_vice:</property>
515 <property name="use_underline">True</property>
516@@ -404,8 +471,9 @@
517 <child>
518 <object class="GtkComboBox" id="playbackDevice">
519 <property name="visible">True</property>
520+ <property name="can_focus">False</property>
521 <property name="model">preferences_playback_device_liststore</property>
522- <signal name="changed" handler="on_Setting_changed"/>
523+ <signal name="changed" handler="on_Setting_changed" swapped="no"/>
524 <child>
525 <object class="GtkCellRendererText" id="cellrenderertext6"/>
526 <attributes>
527@@ -426,7 +494,7 @@
528 <property name="can_focus">True</property>
529 <property name="invisible_char">●</property>
530 <property name="text" translatable="yes">autoaudiosink</property>
531- <signal name="focus_out_event" handler="on_playbackSink_changed"/>
532+ <signal name="focus-out-event" handler="on_playbackSink_changed" swapped="no"/>
533 </object>
534 <packing>
535 <property name="left_attach">1</property>
536@@ -442,6 +510,7 @@
537 <child type="label">
538 <object class="GtkLabel" id="label61">
539 <property name="visible">True</property>
540+ <property name="can_focus">False</property>
541 <property name="xpad">5</property>
542 <property name="ypad">5</property>
543 <property name="label" translatable="yes">&lt;b&gt;Playback Sound System&lt;/b&gt;</property>
544@@ -455,36 +524,43 @@
545 <property name="position">4</property>
546 </packing>
547 </child>
548- <child>
549- <object class="GtkHButtonBox" id="hbuttonbox2">
550- <property name="visible">True</property>
551- <property name="border_width">6</property>
552- <property name="layout_style">end</property>
553- <child>
554- <object class="GtkButton" id="closeButton">
555- <property name="label">gtk-close</property>
556- <property name="visible">True</property>
557- <property name="can_focus">True</property>
558- <property name="can_default">True</property>
559- <property name="receives_default">False</property>
560- <property name="tooltip_text" translatable="yes">Save preferences and close</property>
561- <property name="use_stock">True</property>
562- <signal name="clicked" handler="on_Close_clicked"/>
563- </object>
564- <packing>
565- <property name="expand">False</property>
566- <property name="fill">False</property>
567- <property name="position">0</property>
568- </packing>
569- </child>
570- </object>
571- <packing>
572- <property name="expand">False</property>
573- <property name="pack_type">end</property>
574- <property name="position">1</property>
575- </packing>
576- </child>
577 </object>
578 </child>
579 </object>
580+ <object class="GtkListStore" id="preferences_bit_rate_liststore">
581+ <columns>
582+ <!-- column-name Item -->
583+ <column type="gchararray"/>
584+ </columns>
585+ </object>
586+ <object class="GtkListStore" id="preferences_playback_device_liststore">
587+ <columns>
588+ <!-- column-name item -->
589+ <column type="gchararray"/>
590+ </columns>
591+ </object>
592+ <object class="GtkListStore" id="preferences_playback_sink_liststore">
593+ <columns>
594+ <!-- column-name item -->
595+ <column type="gchararray"/>
596+ </columns>
597+ </object>
598+ <object class="GtkListStore" id="preferences_recording_format_liststore">
599+ <columns>
600+ <!-- column-name item -->
601+ <column type="gchararray"/>
602+ </columns>
603+ </object>
604+ <object class="GtkListStore" id="preferences_recording_system_liststore">
605+ <columns>
606+ <!-- column-name item -->
607+ <column type="gchararray"/>
608+ </columns>
609+ </object>
610+ <object class="GtkListStore" id="preferences_sample_rate_liststore">
611+ <columns>
612+ <!-- column-name item -->
613+ <column type="gchararray"/>
614+ </columns>
615+ </object>
616 </interface>

Subscribers

People subscribed via source and target branches