65
68
#Load settings - set to True to make sure data isn't saved to file until everything is loaded
66
69
self.loadingSettings = True
71
## Load recording sound system
72
audioSrcSetting = Globals.settings.recording["audiosrc"]
73
self.recordingCustomPipeline.set_text(audioSrcSetting)
75
self.recordingSoundSystem.append_text(_("Custom"))
76
self.recordingSoundSystem.set_active(0)
78
for name, element in Globals.CAPTURE_BACKENDS:
79
self.recordingSoundSystem.append_text(name)
80
if audioSrcSetting == element:
81
index = len(self.recordingSoundSystem.get_model()) - 1
82
self.recordingSoundSystem.set_active(index)
84
if self.recordingSoundSystem.get_active() == 0:
85
self.recordingCustomPipeline.set_sensitive(True)
87
self.recordingCustomPipeline.set_sensitive(False)
89
## Load playback sound system
68
90
audioSinkSetting = Globals.settings.playback["audiosink"]
69
if audioSinkSetting == "autoaudiosink":
70
self.playbackSink.set_active(0)
71
self.customSink.set_sensitive(False)
72
self.playbackDevice.set_sensitive(False)
73
elif audioSinkSetting == "alsasink":
74
self.playbackSink.set_active(1)
75
self.customSink.set_sensitive(False)
76
self.playbackDevice.set_sensitive(True)
91
self.customSink.set_text(audioSinkSetting)
93
self.playbackSink.append_text(_("Custom"))
94
self.playbackSink.set_active(0)
96
for name, element in Globals.PLAYBACK_BACKENDS:
97
self.playbackSink.append_text(name)
98
if audioSinkSetting == element:
99
index = len(self.playbackSink.get_model()) - 1
100
self.playbackSink.set_active(index)
102
if self.playbackSink.get_active() == 0:
103
self.customSink.set_sensitive(True)
78
self.playbackSink.set_active(2)
79
self.customSink.set_sensitive(True)
80
self.customSink.set_text(audioSinkSetting)
81
self.playbackDevice.set_sensitive(False)
105
self.customSink.set_sensitive(False)
83
#Find all ALSA devices
84
self.playbacks = [] #Map combobox entries to ALSA devices
85
for device, playback in AlsaDevices.GetAlsaList("playback").items():
86
self.playbacks.append(device)
87
self.playbackDevice.append_text(playback)
88
self.LoadSetting(self.playbackDevice, Globals.settings.playback, "device")
107
self.ProbeBackendDevices()
90
109
#Get available sample rates from ALSA
91
sample_values = AlsaDevices.GetRecordingSampleRate()
92
sampleRateSetting = Globals.settings.recording["samplerate"]
93
sampleRateSettingIndex = 0
110
sample_values = AudioBackend.GetRecordingSampleRate()
111
i18nText = "%(sample rate)d Hz"
112
#add tuple of (display string, rate value)
113
self.sampleRateList = [( _("Autodetect"), 0)]
94
114
if type(sample_values) == int:
95
self.samplingRate.append_text("%d %s" % (sample_values, _("Hz")))
115
text = i18nText % {"sample rate" : sample_values}
116
self.sampleRateList.append( (text, sample_values) )
96
117
elif type(sample_values) == list:
97
118
for i, rate in enumerate (sample_values):
98
self.samplingRate.append_text("%d %s" % (rate, _("Hz")))
99
if str(rate) == sampleRateSetting:
100
sampleRateSettingIndex = i
119
text = i18nText % {"sample rate" : rate}
120
self.sampleRateList.append( (text, rate) )
121
#check if it is an IntRange
102
122
elif hasattr(sample_values, "low") and hasattr(sample_values, "high"):
104
#try to convert the setting string to an int
105
rate = int(sampleRateSetting)
109
#since the card supports a range of samples rates, the saved preference
110
#might not be in Globals.SAMPLE_RATES
111
if rate not in Globals.SAMPLE_RATES:
112
if sample_values.low <= rate <= sample_values.high:
113
self.samplingRate.append_text("%d %s" % (rate, _("Hz")))
115
#add the rest of the default sample rates if they are within the supported range
123
#add the default sample rates if they are within the supported range
117
124
for rate in Globals.SAMPLE_RATES:
118
125
if sample_values.low <= rate <= sample_values.high:
119
self.samplingRate.append_text("%d %s" % (rate, _("Hz")))
120
if str(rate) == sampleRateSetting:
121
sampleRateSettingIndex = index
126
text = i18nText % {"sample rate" : rate}
127
self.sampleRateList.append( (text, rate) )
129
sampleRateSetting = 0
130
sampleRateSettingIndex = 0
132
#try to convert the setting string to an int
133
sampleRateSetting = int( Globals.settings.recording["samplerate"] )
137
#if they have put in a custom preference which is not ordinarily detected, add it to the list
138
if sampleRateSetting not in [y for x,y in self.sampleRateList]:
139
text = i18nText % {"sample rate" : sampleRateSetting}
140
self.sampleRateList.append( (text, sampleRateSetting) )
142
for text, value in self.sampleRateList:
143
self.samplingRate.append_text(text)
144
if value == sampleRateSetting:
145
sampleRateSettingIndex = self.sampleRateList.index( (text, value) )
124
146
self.samplingRate.set_active(sampleRateSettingIndex)
126
149
fileFormatSetting = Globals.settings.recording["fileformat"]
127
150
fileFormatSettingIndex = 0
128
151
#get all the encoders from Globals
227
256
if self.loadingSettings:
230
# First in the list is Autodetect
231
259
if self.playbackSink.get_active() == 0:
232
self.customSink.set_sensitive(False)
233
self.playbackDevice.set_sensitive(False)
234
Globals.settings.playback["audiosink"] = "autoaudiosink"
236
elif self.playbackSink.get_active() == 1:
237
self.customSink.set_sensitive(False)
238
self.playbackDevice.set_sensitive(True)
239
Globals.settings.playback["audiosink"] = "alsasink"
241
elif self.playbackSink.get_active() == 2:
242
260
self.customSink.set_sensitive(True)
243
self.playbackDevice.set_sensitive(False)
244
261
Globals.settings.playback["audiosink"] = self.customSink.get_text()
246
Globals.settings.write()
247
self.project.SetProjectSink()
263
self.customSink.set_sensitive(False)
264
index = self.playbackSink.get_active() - 1
265
name, element = Globals.PLAYBACK_BACKENDS[index]
266
Globals.settings.playback["audiosink"] = element
267
self.customSink.set_text(element)
269
self.ProbeBackendDevices()
271
Globals.settings.write()
273
self.project.SetProjectSink()
275
#_____________________________________________________________________
277
def OnRecordingSystemChanged(self, widget=None, event=None):
279
Updates the selected playback audio device from the comboBox selection.
280
It then writes an updated settings file.
283
comboBox -- reserved for GTK callbacks, don't use it explicitly.
285
if self.loadingSettings:
288
if self.recordingSoundSystem.get_active() == 0:
289
self.recordingCustomPipeline.set_sensitive(True)
290
Globals.settings.recording["audiosrc"] = self.recordingCustomPipeline.get_text()
292
self.recordingCustomPipeline.set_sensitive(False)
293
index = self.recordingSoundSystem.get_active() - 1
294
name, element = Globals.CAPTURE_BACKENDS[index]
295
Globals.settings.recording["audiosrc"] = element
296
self.recordingCustomPipeline.set_text(element)
298
Globals.settings.write()
300
self.project.OnCaptureBackendChange()
249
302
#_____________________________________________________________________
270
323
self.mixdownFormat.append_text(enc.get_longname())
272
325
#_____________________________________________________________________
327
def ProbeBackendDevices(self):
328
#Find all playback devices
329
self.playbacks = [] # Map combobox entries to property names instead of human readable names).
330
self.playbackDevice.get_model().clear() # clear combo box
331
for index, (device, deviceName) in enumerate(AudioBackend.ListPlaybackDevices()):
332
if len(self.playbacks) == 0 and not deviceName:
333
deviceName = _("Default")
334
self.playbacks.append(device)
336
self.playbackDevice.append_text(deviceName)
338
self.playbackDevice.append_text(device)
340
self.playbackDevice.append_text(_("Device %d") % index)
342
if not self.playbacks:
343
self.playbackDevice.set_sensitive(False)
345
self.playbackDevice.set_sensitive(True)
346
self.LoadSetting(self.playbackDevice, Globals.settings.playback, "devicename")
348
#_____________________________________________________________________