You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
(22) |
May
(36) |
Jun
(27) |
Jul
(55) |
Aug
(86) |
Sep
(8) |
Oct
(78) |
Nov
(58) |
Dec
(40) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(100) |
Feb
(29) |
Mar
(176) |
Apr
(64) |
May
(199) |
Jun
(84) |
Jul
(31) |
Aug
(57) |
Sep
(61) |
Oct
(148) |
Nov
(125) |
Dec
(106) |
2009 |
Jan
(15) |
Feb
(34) |
Mar
(42) |
Apr
(66) |
May
(101) |
Jun
(41) |
Jul
(12) |
Aug
(14) |
Sep
(41) |
Oct
(82) |
Nov
(52) |
Dec
(76) |
2010 |
Jan
(158) |
Feb
(53) |
Mar
(32) |
Apr
(43) |
May
(44) |
Jun
(40) |
Jul
(49) |
Aug
(43) |
Sep
(123) |
Oct
(78) |
Nov
(41) |
Dec
(135) |
2011 |
Jan
(67) |
Feb
(70) |
Mar
(83) |
Apr
(97) |
May
(47) |
Jun
(65) |
Jul
(48) |
Aug
(8) |
Sep
(84) |
Oct
(28) |
Nov
(8) |
Dec
(9) |
2012 |
Jan
(26) |
Feb
(19) |
Mar
(220) |
Apr
(262) |
May
(107) |
Jun
(145) |
Jul
(49) |
Aug
(38) |
Sep
(111) |
Oct
(32) |
Nov
(34) |
Dec
(45) |
2013 |
Jan
(28) |
Feb
(4) |
Mar
(6) |
Apr
(26) |
May
(38) |
Jun
(79) |
Jul
(49) |
Aug
(70) |
Sep
(76) |
Oct
(85) |
Nov
(80) |
Dec
(70) |
2014 |
Jan
(167) |
Feb
(114) |
Mar
(181) |
Apr
(95) |
May
(211) |
Jun
(41) |
Jul
(41) |
Aug
(14) |
Sep
(52) |
Oct
(60) |
Nov
(59) |
Dec
(72) |
2015 |
Jan
(88) |
Feb
(20) |
Mar
(89) |
Apr
(15) |
May
(40) |
Jun
(25) |
Jul
(50) |
Aug
(97) |
Sep
(41) |
Oct
(90) |
Nov
(88) |
Dec
(152) |
2016 |
Jan
(60) |
Feb
(52) |
Mar
(63) |
Apr
(79) |
May
(41) |
Jun
(66) |
Jul
(31) |
Aug
(28) |
Sep
(4) |
Oct
(48) |
Nov
(45) |
Dec
(3) |
2017 |
Jan
(44) |
Feb
(23) |
Mar
(42) |
Apr
(39) |
May
(24) |
Jun
(42) |
Jul
(1) |
Aug
(14) |
Sep
|
Oct
(4) |
Nov
(7) |
Dec
(14) |
2018 |
Jan
(67) |
Feb
(70) |
Mar
(19) |
Apr
(35) |
May
(25) |
Jun
(9) |
Jul
(1) |
Aug
(6) |
Sep
(13) |
Oct
(29) |
Nov
(15) |
Dec
(20) |
2019 |
Jan
(35) |
Feb
(4) |
Mar
(4) |
Apr
(1) |
May
(6) |
Jun
(2) |
Jul
(7) |
Aug
|
Sep
(6) |
Oct
(5) |
Nov
(3) |
Dec
|
2020 |
Jan
|
Feb
|
Mar
(15) |
Apr
|
May
(13) |
Jun
(2) |
Jul
(4) |
Aug
(48) |
Sep
(15) |
Oct
(2) |
Nov
(9) |
Dec
(5) |
2021 |
Jan
|
Feb
|
Mar
(2) |
Apr
(3) |
May
(34) |
Jun
(8) |
Jul
(4) |
Aug
|
Sep
(6) |
Oct
(28) |
Nov
(2) |
Dec
(4) |
2022 |
Jan
(1) |
Feb
(5) |
Mar
|
Apr
(16) |
May
|
Jun
|
Jul
(1) |
Aug
(6) |
Sep
(6) |
Oct
|
Nov
(1) |
Dec
|
2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(5) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2024 |
Jan
(2) |
Feb
(3) |
Mar
|
Apr
(45) |
May
|
Jun
(3) |
Jul
(16) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: Jonathan W. <jw...@ju...> - 2024-08-03 09:47:37
|
Hi Edmund On Thu, Jul 25, 2024 at 08:24:37AM +0930, Jonathan Woithe wrote: > On Wed, Jul 24, 2024 at 09:38:53PM +0000, Edmund Raile via FFADO-devel wrote: > > This is a patch series for the FFADO 2.4.9 mixer. > > : > > Thanks for sending these through. The diffs are fine, and splitting the > changes as you have done makes review much easier. I'll take a look through > these as soon as I can - hopefully within the next week. A quick glance > through the patches suggests that there are no major issues. I have finally found some time to take a closer look at these. I can't see any obvious problems and have therefore applied them to trunk. They wiil be in the next FFADO release, which will probably be 2.4.10. I don't have a prospective date for that at this stage, however. The only slight concern I had was the reference to the fader ranges of RME's TotalMixFX in patch 1. The matrix mixer control is used for more than just the RME devices so it can't be hard coded only to suit the RME range. However, as far as I can tell, patch 1 shouldn't adversely affect other devices in practice. If testing by others proves otherwise we can always revise as needed. Thanks again for the patches. Regards jonathan |
From: Jonathan W. <jw...@ju...> - 2024-07-24 22:54:51
|
Hi Edmund On Wed, Jul 24, 2024 at 09:38:53PM +0000, Edmund Raile via FFADO-devel wrote: > This is a patch series for the FFADO 2.4.9 mixer. > : > It improves various aspects of usability, haptics and even > fixes some minor bugs. > Even CTRL + scrollwheel now works again to adjust volume in 1dB > increments! > Please give my modifications a try! > > I hope sending this as git diffs is OK too. Thanks for sending these through. The diffs are fine, and splitting the changes as you have done makes review much easier. I'll take a look through these as soon as I can - hopefully within the next week. A quick glance through the patches suggests that there are no major issues. Regards jonathan |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:54
|
--- .../mixer-qt4/ffado/widgets/matrixmixer.py | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 45006be..3a1c45d 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -738,13 +738,15 @@ class VolumeSlider(QSlider): class VolumeSliderValueInfo(QLineEdit): + valueEdited = pyqtSignal(tuple) def __init__(self, In, Out, value, parent): QLineEdit.__init__(self, parent) self.vol_min = -60.0 self.vol_max = 6.0 - self.setReadOnly(True) + self.setReadOnly(False) + self.editingFinished.connect(self.editDone) self.setAlignment(Qt.AlignCenter) self.setAutoFillBackground(True) self.setFrame(False) @@ -753,7 +755,19 @@ class VolumeSliderValueInfo(QLineEdit): self.bgcolors = BckgrdColorForNumber() + self.In = In + self.Out = Out + + self.labelSetValue(value) + + def editDone(self): + text = str(self.text()).split(" ")[0].replace(",",".") + value = fromDBvalue(float(text)) + #log.debug("VolumeSliderValueInfo linear value: %g" % value) + self.valueEdited.emit((self.In, self.Out, value)) + self.clearFocus() self.labelSetValue(value) + self.update() def labelSetMinimalDim(self): fontmetrics = self.fontMetrics() @@ -894,6 +908,7 @@ class SliderControlView(QWidget): svl = VolumeSliderValueInfo(j, i, self.getVolumeValue(j,i), h_v_layout_wid) h_v_layout.addWidget(svl) self.out[i].svl.append(svl) + self.volumeLabelConnect(svl) # Balance fader if self.out[i].is_stereo: @@ -911,6 +926,12 @@ class SliderControlView(QWidget): def volumeDisconnect(self, volume): volume.sliderChanged.disconnect(self.valueChangedVolume) + def volumeLabelConnect(self, svl): + svl.valueEdited.connect(self.valueChangedVolume) + + def volumeLabelDisconnect(self, svl): + svl.valueEdited.disconnect(self.valueChangedVolume) + def balanceConnect(self, balance): balance.sliderChanged.connect(self.valueChangedBalance) @@ -981,6 +1002,7 @@ class SliderControlView(QWidget): if (self.out[i].is_stereo): v = self.getVolumeValue(n_0, i) self.volumeDisconnect(self.out[i].volume[n_0]) + self.volumeLabelDisconnect(self.out[i].svl[n_0]) self.balanceDisconnect(self.out[i].balance[n_0]) self.out[i].volume[n_0].sliderSetValue(v) self.out[i].svl[n_0].labelSetValue(v) @@ -988,14 +1010,17 @@ class SliderControlView(QWidget): # log.debug("update Value (%d %d %d %f)" % (n_0, i, v, b)) self.out[i].balance[n_0].sliderSetValue(b) self.volumeConnect(self.out[i].volume[n_0]) + self.volumeLabelConnect(self.out[i].svl[n_0]) self.balanceConnect(self.out[i].balance[n_0]) else: v = n_2 # log.debug("update Value (%d %d %d)" % (n_0, i, v)) self.volumeDisconnect(self.out[i].volume[n_0]) + self.volumeLabelDisconnect(self.out[i].svl[n_0]) self.out[i].volume[n_0].sliderSetValue(v) self.out[i].svl[n_0].labelSetValue(v) self.volumeConnect(self.out[i].volume[n_0]) + self.volumeLabelConnect(self.out[i].svl[n_0]) def valueChangedVolume(self, n): #log.debug("VolumeSlider.valueChanged( %s )" % str(n)) @@ -1015,6 +1040,7 @@ class SliderControlView(QWidget): n_t = (n[0], n1, v) self.valueChanged.emit(n_t) self.out[n[1]].svl[n[0]].labelSetValue(v) + self.out[n[1]].volume[n[0]].sliderSetValue(v) def valueChangedBalance(self, n): #log.debug("BalanceSlider.valueChanged( %s )" % str(n)) @@ -1093,12 +1119,14 @@ class SliderControlView(QWidget): v = self.getVolumeValue(n_in, i) if (self.out[i].is_stereo): self.volumeDisconnect(self.out[i].volume[n_in]) + self.volumeLabelDisconnect(self.out[i].svl[n_in]) self.out[i].volume[n_in].sliderSetValue(v) self.out[i].svl[n_in].labelSetValue(v) b = self.getBalanceValue(n_in, i) # log.debug("update Value (%d %d %d %f)" % (n_0, i, v, b)) self.out[i].balance[n_in].sliderSetValue(b) self.volumeConnect(self.out[i].volume[n_in]) + self.volumeLabelConnect(self.out[i].svl[n_in]) else: # log.debug("update Value (%d %d %d)" % (n_0, i, v)) self.out[i].volume[n_in].sliderSetValue(v) -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:54
|
handles -∞ (which the label itself uses) values above vol_max values below vol_min non-recognized input --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 3a1c45d..a975c0d 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -762,13 +762,25 @@ class VolumeSliderValueInfo(QLineEdit): def editDone(self): text = str(self.text()).split(" ")[0].replace(",",".") - value = fromDBvalue(float(text)) + if text == "-\u221E": + value = 0 + elif self.isFloat(text): + value = fromDBvalue(min(float(text), self.vol_max)) + else: + value = 0 #log.debug("VolumeSliderValueInfo linear value: %g" % value) self.valueEdited.emit((self.In, self.Out, value)) self.clearFocus() self.labelSetValue(value) self.update() + def isFloat(self, v): + try: + f=float(v) + except ValueError: + return False + return True + def labelSetMinimalDim(self): fontmetrics = self.fontMetrics() self.setMinimumSize(fontmetrics.boundingRect("-44.4 dB").size()*1.2) -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:41
|
--- support/mixer-qt4/ffado/widgets/matrixmixer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 49e5755..45006be 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -1253,7 +1253,7 @@ class MatrixMixer(QWidget): font_switch.setToolTip("Labels font size") font = font_switch.font() for i in range(10): - font_switch.addItem(" %d " % (font.pointSize()+4-i)) + font_switch.addItem(" %d " % (6 + i)) font_switch.setCurrentIndex(font_switch.findText(" %d " % font.pointSize())) mxv_set.addWidget(font_switch) mxv_set.addSeparator() @@ -1366,6 +1366,8 @@ class MatrixMixer(QWidget): # Font size for channel names def changeFontSize(self, size): + size = size + 6 + font = self.mxv_set.font() font.setPointSize(int(size)) self.mxv_set.setFont(font) -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:34
|
4 is the widest non-monospace character, so generate label dimensions by "-44.4 dB". unify "oversizing" of label dimensions to 1.2 (looks better) affects VolumeSlider InfoBox Mixer Node --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 388a526..49e5755 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -302,7 +302,7 @@ class MixerNode(QAbstractSlider): self.setMinimumSize(10, 10) else: fontmetrics = self.fontMetrics() - self.setMinimumSize(fontmetrics.boundingRect("-0.0 dB").size()*1.1) + self.setMinimumSize(fontmetrics.boundingRect("-44.4 dB").size()*1.2) self.update() class MixerChannel(QWidget): @@ -757,7 +757,7 @@ class VolumeSliderValueInfo(QLineEdit): def labelSetMinimalDim(self): fontmetrics = self.fontMetrics() - self.setMinimumSize(fontmetrics.boundingRect("-00.0 dB").size()*1.1) + self.setMinimumSize(fontmetrics.boundingRect("-44.4 dB").size()*1.2) def labelSetValue(self, value): color = self.bgcolors.getColor(value) -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:23
|
--- .../mixer-qt4/ffado/widgets/matrixmixer.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 53f479d..388a526 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -749,17 +749,17 @@ class VolumeSliderValueInfo(QLineEdit): self.setAutoFillBackground(True) self.setFrame(False) - self.sliderSetMinimalDim() + self.labelSetMinimalDim() self.bgcolors = BckgrdColorForNumber() - self.sliderSetValue(value) + self.labelSetValue(value) - def sliderSetMinimalDim(self): + def labelSetMinimalDim(self): fontmetrics = self.fontMetrics() self.setMinimumSize(fontmetrics.boundingRect("-00.0 dB").size()*1.1) - def sliderSetValue(self, value): + def labelSetValue(self, value): color = self.bgcolors.getColor(value) palette = self.palette() palette.setColor(QPalette.Active, QPalette.Base, color) @@ -983,7 +983,7 @@ class SliderControlView(QWidget): self.volumeDisconnect(self.out[i].volume[n_0]) self.balanceDisconnect(self.out[i].balance[n_0]) self.out[i].volume[n_0].sliderSetValue(v) - self.out[i].svl[n_0].sliderSetValue(v) + self.out[i].svl[n_0].labelSetValue(v) b = self.getBalanceValue(n_0, i) # log.debug("update Value (%d %d %d %f)" % (n_0, i, v, b)) self.out[i].balance[n_0].sliderSetValue(b) @@ -994,7 +994,7 @@ class SliderControlView(QWidget): # log.debug("update Value (%d %d %d)" % (n_0, i, v)) self.volumeDisconnect(self.out[i].volume[n_0]) self.out[i].volume[n_0].sliderSetValue(v) - self.out[i].svl[n_0].sliderSetValue(v) + self.out[i].svl[n_0].labelSetValue(v) self.volumeConnect(self.out[i].volume[n_0]) def valueChangedVolume(self, n): @@ -1014,7 +1014,7 @@ class SliderControlView(QWidget): self.setValue(n[0], n1, v) n_t = (n[0], n1, v) self.valueChanged.emit(n_t) - self.out[n[1]].svl[n[0]].sliderSetValue(v) + self.out[n[1]].svl[n[0]].labelSetValue(v) def valueChangedBalance(self, n): #log.debug("BalanceSlider.valueChanged( %s )" % str(n)) @@ -1094,7 +1094,7 @@ class SliderControlView(QWidget): if (self.out[i].is_stereo): self.volumeDisconnect(self.out[i].volume[n_in]) self.out[i].volume[n_in].sliderSetValue(v) - self.out[i].svl[n_in].sliderSetValue(v) + self.out[i].svl[n_in].labelSetValue(v) b = self.getBalanceValue(n_in, i) # log.debug("update Value (%d %d %d %f)" % (n_0, i, v, b)) self.out[i].balance[n_in].sliderSetValue(b) @@ -1102,7 +1102,7 @@ class SliderControlView(QWidget): else: # log.debug("update Value (%d %d %d)" % (n_0, i, v)) self.out[i].volume[n_in].sliderSetValue(v) - self.out[i].svl[n_in].sliderSetValue(v) + self.out[i].svl[n_in].labelSetValue(v) def saveSettings(self, indent): if ffado.config.bypassdbus: @@ -1384,7 +1384,7 @@ class MatrixMixer(QWidget): for i in range(self.perOut.nbOut): for j in range(self.perOut.nbIn): - self.perOut.out[i].svl[j].sliderSetMinimalDim() + self.perOut.out[i].svl[j].labelSetMinimalDim() # Allows long name for Mixer/Out and /In to be hidden def shortChannelNames(self): -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:17
|
mouse movement should control volume linearly in dB also rename tmpvalue to a more descriptive dBval --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index e47fd36..9d4301e 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -210,30 +210,30 @@ class MixerNode(QAbstractSlider): def mousePressEvent(self, ev): if ev.buttons() & Qt.LeftButton: self.pos = ev.posF() if ffado_pyqt_version == 4 else ev.localPos() - self.tmpvalue = self.value() + self.dBval = toDBvalue(self.value()) ev.accept() #log.debug("MixerNode.mousePressEvent() %s" % str(self.pos)) def mouseMoveEvent(self, ev): - if hasattr(self, "tmpvalue") and self.pos is not QtCore.QPointF(0, 0): + if hasattr(self, "dBval") and self.pos is not QtCore.QPointF(0, 0): newpos = ev.posF() if ffado_pyqt_version == 4 else ev.localPos() change = newpos.y() - self.pos.y() - #log.debug("MixerNode.mouseReleaseEvent() change %s" % (str(change))) + #log.debug("MixerNode.mouseMoveEvent() change %s" % (str(change))) self.setValue( - int(self.tmpvalue - math.copysign(pow(abs(change), 2), change)) + int(fromDBvalue(self.dBval - change / 10.0)) ) ev.accept() def mouseReleaseEvent(self, ev): - if hasattr(self, "tmpvalue") and self.pos is not QtCore.QPointF(0, 0): + if hasattr(self, "dBval") and self.pos is not QtCore.QPointF(0, 0): newpos = ev.posF() if ffado_pyqt_version == 4 else ev.localPos() change = newpos.y() - self.pos.y() #log.debug("MixerNode.mouseReleaseEvent() change %s" % (str(change))) self.setValue( - int(self.tmpvalue - math.copysign(pow(abs(change), 2), change)) + int(fromDBvalue(self.dBval - change / 10.0)) ) self.pos = QtCore.QPointF(0, 0) - del self.tmpvalue + del self.dBval ev.accept() # Wheel event is mainly for scrolling inside the mixer window -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:17
|
currently, the function crashes as .delta() is not a QT function any more restore functionality. adjust dB linearly in 1dB steps --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 9d4301e..53f479d 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -240,10 +240,11 @@ class MixerNode(QAbstractSlider): # Additionnaly press Control key for wheel controling the values def wheelEvent (self, ev): if (ev.modifiers() & Qt.ControlModifier): - tmpvalue = self.value() - change = ev.delta()/8 + self.dBvalW = toDBvalue(self.value()) + change = ev.angleDelta().y() / 120 + #log.debug("MixerNode.wheelEvent() change %s" % (str(change))) self.setValue( - int(tmpvalue + math.copysign(pow(abs(change), 2), change)) + int(fromDBvalue(self.dBvalW + change)) ) ev.accept() else: -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:16
|
"-inf dB" text on separator is extraneous --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 4a6f65e..e47fd36 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -162,7 +162,7 @@ class MixerNode(QAbstractSlider): # Only show the mute menu item if a value has been supplied self.mute_action = None if (muted != None): - action = QAction(text, self) + action = QAction(None, self) action.setSeparator(True) self.addAction(action) self.mute_action = QAction("Mute", self) -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:40:06
|
quickest way to set values precisely our displays are big enough Qt does a good job of keeping menus on-screen --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 67f3df8..4a6f65e 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -153,7 +153,7 @@ class MixerNode(QAbstractSlider): action.setDefaultWidget(self.spinbox) self.addAction(action) - for text in ["3 dB", "0 dB", "-3 dB", "-20 dB", "-inf dB"]: + for text in ["3 dB", "0 dB", "-3 dB", "-10 dB", "-15 dB", "-20 dB", "-25 dB", "-30 dB", "-35 dB", "-40 dB", "-45 dB", "-50 dB", "-55 dB", "-inf dB"]: action = QAction(text, self) action.triggered.connect(self.mapper.map) self.mapper.setMapping(action, text) -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:39:53
|
apply volume on editingFinished instead of valueChanged prevents blasting your ears while editing negative values --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 49bafac..67f3df8 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -148,7 +148,7 @@ class MixerNode(QAbstractSlider): if value != 0: self.spinbox.setValue(toDBvalue(value)) - self.spinbox.valueChanged.connect(self.directValues) + self.spinbox.editingFinished.connect(self.spinBoxSetsValue) action = QWidgetAction(self) action.setDefaultWidget(self.spinbox) self.addAction(action) @@ -186,6 +186,11 @@ class MixerNode(QAbstractSlider): self.mapper.setMapping(self.inv_action, "Invert") self.addAction(self.inv_action) + def spinBoxSetsValue(self): + n = fromDBvalue(self.spinbox.value()) + #log.debug(" linear value: %g" % n) + self.setValue(n) + def directValues(self,text): #log.debug("MixerNode.directValues( '%s' )" % text) if text == "Mute": -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:39:53
|
One decimal is enough precision, beyond that perception can't be accutate Two decimals is unnecessary brain-load (and wasted screen space) 'f' doesn't make the values jump around like 'g' does modified: Node label Node right-click-menu spinbox --- support/mixer-qt4/ffado/widgets/matrixmixer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 1ff86a7..49bafac 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -143,6 +143,7 @@ class MixerNode(QAbstractSlider): self.spinbox = QDoubleSpinBox(self) self.spinbox.setRange(self.vol_min, self.vol_max) + self.spinbox.setDecimals(1) self.spinbox.setSuffix(" dB") if value != 0: self.spinbox.setValue(toDBvalue(value)) @@ -262,7 +263,7 @@ class MixerNode(QAbstractSlider): if v != 0: lv = toDBvalue(v) #log.debug("new value is %g dB" % lv) - text = "%.2g dB" % lv + text = "%.1f dB" % lv if v == 0: symb_inf = u"\u221E" text = "-" + symb_inf + " dB" -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:39:20
|
uniformly declare in their min and max volume in the initializer of each class that needs access to them modify all volume limits: minimum = -60dB maximum = 6dB similar to range of faders in TotalMixFX VolumeSlider: calcualte range from minimum and maximum volumes in dB --- .../mixer-qt4/ffado/widgets/matrixmixer.py | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/support/mixer-qt4/ffado/widgets/matrixmixer.py b/support/mixer-qt4/ffado/widgets/matrixmixer.py index 88b8976..1ff86a7 100644 --- a/support/mixer-qt4/ffado/widgets/matrixmixer.py +++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py @@ -39,15 +39,15 @@ log = logging.getLogger("matrixmixer") def toDBvalue(value): n = int(value) c2p14 = 16384.0 - if n > 164: + if n > 16: return round(20.0*math.log10(float(n)/c2p14), 2) else: - return -40.0 + return -60.0 def fromDBvalue(value): v = float(value) c2p14 = 16384.0 - if (v > -40): + if (v > -60.0): return int(round(math.pow(10.0, (value/20.0))*c2p14, 0)) else: return 0 @@ -114,6 +114,9 @@ class MixerNode(QAbstractSlider): QAbstractSlider.__init__(self, parent) #log.debug("MixerNode.__init__( %i, %i, %i, %i, %s )" % (input, output, value, max, str(parent)) ) + self.vol_min = -60.0 + self.vol_max = 6.0 + # Store a direct link back to the underlying matrix object so the mute # and invert interfaces can be easily found. By the time the matrix # has been set into the full widget hierarchy, its parent is unlikely @@ -139,7 +142,7 @@ class MixerNode(QAbstractSlider): self.mapper.mapped['QString'].connect(self.directValues) self.spinbox = QDoubleSpinBox(self) - self.spinbox.setRange(-40, 12) + self.spinbox.setRange(self.vol_min, self.vol_max) self.spinbox.setSuffix(" dB") if value != 0: self.spinbox.setValue(toDBvalue(value)) @@ -696,10 +699,12 @@ class VolumeSlider(QSlider): def __init__(self, In, Out, value, parent): QSlider.__init__(self, QtCore.Qt.Vertical, parent) + self.vol_min = -60.0 + self.vol_max = 6.0 self.setTickPosition(QSlider.TicksBothSides) - v_min = 10.0*toDBvalue(0) - v_max = 10.0*toDBvalue(65536) - self.setTickInterval(int((v_max-v_min)/10)) + v_min = 10.0*self.vol_min + v_max = 10.0*self.vol_max + self.setTickInterval(int((self.vol_max-self.vol_min)/10)) self.setMinimum(int(v_min)) self.setMaximum(int(v_max)) self.setSingleStep(1) @@ -729,6 +734,9 @@ class VolumeSliderValueInfo(QLineEdit): def __init__(self, In, Out, value, parent): QLineEdit.__init__(self, parent) + self.vol_min = -60.0 + self.vol_max = 6.0 + self.setReadOnly(True) self.setAlignment(Qt.AlignCenter) self.setAutoFillBackground(True) @@ -752,7 +760,7 @@ class VolumeSliderValueInfo(QLineEdit): self.setPalette(palette) v = round(toDBvalue(value),1) - if (v > -40): + if (v > self.vol_min): text = "%.1f dB" % v else: symb_inf = u"\u221E" -- 2.45.2 |
From: Edmund R. <edm...@pr...> - 2024-07-24 21:39:11
|
This is a patch series for the FFADO 2.4.9 mixer. It started because I sometimes would like to use my monitors at -40dB or even below to not disturb people next door and keying in values gave me a good scare. It improves various aspects of usability, haptics and even fixes some minor bugs. Even CTRL + scrollwheel now works again to adjust volume in 1dB increments! Please give my modifications a try! I hope sending this as git diffs is OK too. Edmund Raile (12): mixer: unify volume bounds mixer: show all volumes with 1 decimal place mixer: Node right-click menu spinbox: prevent eardamage mixer: Node right-click menu add more values mixer: Node right-click menu separator: remove text mixer: Node linear volume drag behavior mixer: Node CTRL + scroll control restore functionality mixer: VolumeSlider: InfoBox: rename "slider" to "label" mixer: all volume labels: unify and adjust width mixer: remove font size setting bug mixer: VolumeSlider: make label writable mixer: VolumeSlider: label robust input .../mixer-qt4/ffado/widgets/matrixmixer.py | 129 +++++++++++++----- 1 file changed, 93 insertions(+), 36 deletions(-) -- 2.45.2 |
From: Jonathan W. <jw...@ju...> - 2024-07-17 22:58:56
|
Hi Edmund On Wed, Jul 17, 2024 at 02:01:22PM +0000, edmund.raile via FFADO-devel wrote: > so I've dug into FFADO's mixer and made some usability improvements. > How should I go about sending them in? The best option is to send them to the ffado-devel mailing list. > If so, how do I generate the diff? > Or is gnu diff enough? Gnu diff is fine. > Also, should the changes be divided into multiple commits? That depends on the nature of the changes. If it's possible to divide them into relatively small self-contained change sets then this can be helpful during the review stage. Regards jonathan |
From: edmund.raile <edm...@pr...> - 2024-07-17 14:01:42
|
Hi, so I've dug into FFADO's mixer and made some usability improvements. How should I go about sending them in? I've signed up for the svn mailing list (never used svn before), should I send the changes there? If so, how do I generate the diff? Or is gnu diff enough? Also, should the changes be divided into multiple commits? Kind regards, Edmund Raile. Sent with [Proton Mail](https://proton.me/) secure email. |
From: Jonathan W. <jw...@ju...> - 2024-06-26 10:31:24
|
The FFADO project (https://ffado.org) announces the availability of FFADO version 2.4.9. This is a maintenance release which contains minor improvements. This is a source-only release that can be downloaded from https://ffado.org/files/libffado-2.4.9.tgz Changes since FFADO 2.4.8: * Support compilation against musl libc. Thanks to Alyssa Ross. * Remove build-time checks for utilities that are not used (pyuic). * Install the ffado-mixer appdata file only if ffado-mixer has been built. Thanks to Jan Tojnar for the suggestion. * Add a DATADIR option to scons and use it in line with GNU conventions. Thanks to Jan Tojnar for the suggestion and the patch. * Update the AppStream document with more complete information and in line with current best practice (Jan Tojnar). * Rename XDG files to match modern standards (Jan Tojnar). * Install XDG files manually to simplify the build script and avoid depending on xdg-utils (Jan Tojnar). Thanks to those who have helped with this release, including Alyssa Ross and Jan Tojnar. Notes for packagers: * A consequence of the DATADIR support is that the default MANDIR has shifted from `${PREFIX}/man/` to `${PREFIX}/share/man/`. The latter is arguably more common, but if the original path must remain in use it is still possible to manually set MANDIR at build time. * The presence of the DATADIR option may allow simplification of build commands or require minor build option adjustments depending on how FFADO is built. * Aside from the manpage location, the introduction of DATADIR is not expected to change the path of any other installed files by default. Jonathan Woithe (on behalf of ffado.org) -- |
From: Jonathan W. <jw...@ju...> - 2024-06-26 09:18:42
|
Hi Jade On Wed, Jun 26, 2024 at 01:38:06AM -0700, Jade Lovelace via FFADO-devel wrote: > I am currently auditing broken sources in the repository and found that > ffado 2.4.8 has had its hash changed, which appears to have been that it > was fixed in-place: https://www.ffado.org/posts/ffado-2.4.8-tarball_fix/. > > Can you please, in future such instances, release, e.g. a 2.4.8-1 with > corrected tarball instead of overwriting the 2.4.8 tarball in-place? ... Noted. Thanks for bringing this use case to our attention. Regards jonathan |
From: Jade L. <li...@ja...> - 2024-06-26 09:02:29
|
Hi! I work on NixOS, a Linux distribution, with, among other things, strict hashing of sources in the pursuit of reproducible builds. I am currently auditing broken sources in the repository and found that ffado 2.4.8 has had its hash changed, which appears to have been that it was fixed in-place: https://www.ffado.org/posts/ffado-2.4.8-tarball_fix/. Can you please, in future such instances, release, e.g. a 2.4.8-1 with corrected tarball instead of overwriting the 2.4.8 tarball in-place? We can fix this on our end once we notice it, but tarballs being swapped in-place means that we cannot build the system from source without using our cache of tarballs, since the build will fail on a hash mismatch, and it is much preferable to have the build continue to work with the same slightly wonky tarball rather than fail. Thanks! Jade |
From: Jonathan W. <jw...@ju...> - 2024-04-30 00:01:10
|
Hi Joerg On Mon, Apr 29, 2024 at 09:01:04AM +0200, Joerg M. Sigle wrote: > So I've looked into the 2.4.8 build problem and found an underlying cause > on my system: > > /usr/bin/python pointing into the nirvana, while /usr/bin/python3 really > worked. Yes, that'll do it. > This caused the execution of the locally built (only!) ffado-diag fail, > and this caused the closing lines of the 2.4.8 (only?!) build process to > break. I can understand that. A filesystem object called "python" that isn't python is going to cause trouble. > After fixing a broken symlink, the 2.4.8 build went through That's great news. Thanks for confirming this. > (but there's another difference of unknown importance still left. > > That may, however, be interesting (only) for the question: > Should you use #!/usr/bin/python or #!/usr/bin/python3 in your scripts? This has been discussed in the past. The practical upshot is that it was decided that it was best to keep /usr/bin/python as the default. This is valid on most distributions. For the very few where it is not, packagers can use the PYTHON_INTERPRETER scons option to set something else. This approach is not set in stone, however, and may be revised in future if it proves necessary. > And, why would the pyuic4/pyuic5 in scons vary between 2.4.7 and 2.4.8? > (Please note, this *might* also be caused by a something I introduced > when working with 2.4.7; I have NOT looked into that yet at all.) I'm not sure what variation you are referring to here so it's difficult to comment. I can confirm that there are no differences in pyuic4/pyuic5 expectations between FFADO 2.4.7 and 2.4.8, but I'm not convinced this addresses your question. Feel free to elaborate as appropritate. > (a) Problem found on my system which caused the build to end with an error: > > python and python3 are symbolic links. > > On my system, "python" currently pointed to the nirvana, > whereas "python3" pointed correctly to a working interpreter. > : > Your script /usr/local/bin/ffado-diag 2.4.8 has in its first line: > > $ head /usr/local/bin/ffado-diag > #!/usr/bin/python > ... > > this failed in my broken environment. > > > The ffado-diag 2.4.7 which comes with my distribution, however, uses: > > $ head /usr/bin/ffado-diag > #!/usr/bin/python3 > ... > > so this one still works. That all makes sense. Presumedly the packager of FFADO for your distribution has chosen to use PYTHON_INTERPRETER to set an alternative name for the python executable. > (Notably, the ffado-diag in the 2.4.7 version I used for building from > source myself, also wants /usr/bin/python; but the failure seemingly did > NOT break the build result > in the same way in the end as it did in 2.4.8. For whatever reason...) It's difficult to know without stepping through all the steps on an identically configured system. At this stage I don't think there's any point doing this because you have identified (and fixed) the underlying issue on your system. We can deal with other current issues as they arise. > (b) Before finding this, I noted another peculiarity: > > $ scons ENABLE_BEBOB=no ENABLE_OXFORD=no ENABLE_METRIC_HALO=no ENABLE_RME=no ENABLE_OPTIMIZATIONS=yes > ... > The prerequisites ('pyuic4'/'pyuic5' and the python-modules 'dbus' and > 'PyQt4'/'PyQt5', the packages could be named like dbus-python and PyQt) to > build the mixer were not found. Therefore the qt mixer will not be > installed. > ... > scons: done reading SConscript files. > scons: Building targets ... > scons: `src' is up to date. > support/tools/ffado-diag --static > support/tools/static_info.txt > sh: 1: support/tools/ffado-diag: not found > scons: *** [support/tools/static_info.txt] Error 127 > scons: building terminated because of errors. > > > NOTHING I tried around... > > # apt install python3-pyqt5 pytqt-tools python3-anyqt > # apt install pyqt5-dev pyqt5-dev-tools ... > > did help at all (and most related python packages were already installed > anyway). Since the ffado-diag script failed during this build we can conclude that the broken /usr/bin/python link was still in place at this point (which must be true given that you noticed this before fixing it). The detection of pyuic4 and pyuic5 require a working python interpretor which by default is named /usr/bin/python. Since this was a dangling symlink at the time of this test, the test will fail even if the applicable pyuic package has been installed. > I *might* suspect that the pyuic4 / pyuic5 tests in your scons also > require "python" and not "python3" as an interpreter. Yes - as above, the same python interpreter is used for pretty much everything. If it's broken for whatever reason (such as it being a dangling symlink) then various things associated with the build process will be broken. > ------------------------------------------------- > > (c) ONLY for reference: > > Here are the two outputs from building 2.4.7 and 2.4.8 for you to compare; > this time run as normal user for building (with selected fw chips enabled only); > and run as root for installing, and AFTER fixing my broken python symlink. > > The difference I can easily see is that 2.4.7 says: > Checking whether 'which pyuic4' executes (cached) no > Checking whether 'which pyuic5' executes (cached) yes > > and 2.4.8 says: > Checking whether 'which pyuic4' executes (cached) no > Checking whether 'which pyuic5' executes (cached) no The 2.4.8 report may be due to the persistent scons cache. Once the result of these tests has been obtained, the tests won't be re-run unless forced. You can force the tests to be re-evaluated in several ways: * Remove .sconsign.dblite and cache/ in the top-level FFADO source tree. This not only removes all cached test results, but it resets the scons configuration to the defaults. That means that if you reply on PREFIX or any of the "ENABLE_*" options you'll need to specify them again when you next run scons. * Run scons with the "--config=force" option. This forces all tests to be re-run during that invocation of scons. This is perhaps the best option because it preserves the state of any of the build options you might have previously activated (PREFIX, ENABLE_* etc). I suggest you re-run scons with "--config=force" in your 2.4.8 tree to force all tests to be re-run now that the system has a valid /usr/bin/python. We can then address any remaining issues which show up. As is eluded to above, scons stores the state of any settings you pass to it. For example, if you run scons PREFIX=/usr/local ENABLE_BEBOB=no at some point, these settings (PREFIX, ENABLE_BEBOB) will remain in place in all subsequent scons runs until you explicitly override them. That is, once you've run the above command once, it is only necessary to run scons for future builds if you wish to build with the same settings. Only if you manually remove .sconsign.dblite and cache/ would you need to specify the desired settings again. Regards jonathan |
From: Joerg M. S. <in...@js...> - 2024-04-29 07:01:13
|
Hi Jonathan ... again :-) Your reviews and your input often arrives faster than I can look into things myself. So I've looked into the 2.4.8 build problem and found an underlying cause on my system: /usr/bin/python pointing into the nirvana, while /usr/bin/python3 really worked. This caused the execution of the locally built (only!) ffado-diag fail, and this caused the closing lines of the 2.4.8 (only?!) build process to break. After fixing a broken symlink, the 2.4.8 build went through (but there's another difference of unknown importance still left. That may, however, be interesting (only) for the question: Should you use #!/usr/bin/python or #!/usr/bin/python3 in your scripts? And, why would the pyuic4/pyuic5 in scons vary between 2.4.7 and 2.4.8? (Please note, this *might* also be caused by a something I introduced when working with 2.4.7; I have NOT looked into that yet at all.) --- (a) Problem found on my system which caused the build to end with an error: python and python3 are symbolic links. On my system, "python" currently pointed to the nirvana, whereas "python3" pointed correctly to a working interpreter. /usr/bin/python -> /etc/alternatives/python -> /usr/bin/python3.7 BUT: python 3.7 does NOT exist :-( [Naturally, this would break more than merely your script.] /usr/bin/python3 -> python3.11 And python 3.11 DOES exist. Your script /usr/local/bin/ffado-diag 2.4.8 has in its first line: $ head /usr/local/bin/ffado-diag #!/usr/bin/python ... this failed in my broken environment. The ffado-diag 2.4.7 which comes with my distribution, however, uses: $ head /usr/bin/ffado-diag #!/usr/bin/python3 ... so this one still works. (Notably, the ffado-diag in the 2.4.7 version I used for building from source myself, also wants /usr/bin/python; but the failure seemingly did NOT break the build result in the same way in the end as it did in 2.4.8. For whatever reason...) ------------------------------------------------- (b) Before finding this, I noted another peculiarity: $ scons ENABLE_BEBOB=no ENABLE_OXFORD=no ENABLE_METRIC_HALO=no ENABLE_RME=no ENABLE_OPTIMIZATIONS=yes ... The prerequisites ('pyuic4'/'pyuic5' and the python-modules 'dbus' and 'PyQt4'/'PyQt5', the packages could be named like dbus-python and PyQt) to build the mixer were not found. Therefore the qt mixer will not be installed. ... scons: done reading SConscript files. scons: Building targets ... scons: `src' is up to date. support/tools/ffado-diag --static > support/tools/static_info.txt sh: 1: support/tools/ffado-diag: not found scons: *** [support/tools/static_info.txt] Error 127 scons: building terminated because of errors. NOTHING I tried around... # apt install python3-pyqt5 pytqt-tools python3-anyqt # apt install pyqt5-dev pyqt5-dev-tools ... did help at all (and most related python packages were already installed anyway). I continued to see: Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) no The prerequisites ('pyuic4'/'pyuic5' and the python-modules 'dbus' and 'PyQt4'/'PyQt5', the packages could be named like dbus-python and PyQt) to build the mixer were not found. Therefore the qt mixer will not be installed. even though pyuic5 clearly exists (and even uses python3): # which pyuic4 root@think3 Mo Apr 29 07:49:10 /usr/src/ffado/libffado-2.4.8 # which pyuic5 /usr/bin/pyuic5 root@think3 Mo Apr 29 07:49:11 /usr/src/ffado/libffado-2.4.8 # /usr/bin/pyuic5 # head /usr/bin/pyuic5 #!/bin/sh exec /usr/bin/python3 -m PyQt5.uic.pyuic ${1+"$@"} I *might* suspect that the pyuic4 / pyuic5 tests in your scons also require "python" and not "python3" as an interpreter. ------------------------------------------------- (c) ONLY for reference: Here are the two outputs from building 2.4.7 and 2.4.8 for you to compare; this time run as normal user for building (with selected fw chips enabled only); and run as root for installing, and AFTER fixing my broken python symlink. The difference I can easily see is that 2.4.7 says: Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) yes and 2.4.8 says: Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) no The prerequisites ('pyuic4'/'pyuic5' and the python-modules 'dbus' and 'PyQt4'/'PyQt5', the packages could be named like dbus-python and PyQt) to build the mixer were not found. Therefore the qt mixer will not be installed. However, this doess NOT break the completion of the build any more, after I fixed the python -> 3.7 vs. 3.11 problem mentioned above. I'll add the adoptions to the 2.4.8 tree and try to build the DM-4800 ready version later. (I really need a break right now.) ------------------------------------------------- jsigle@think3 Mo Apr 29 08:34:30 /usr/src/ffado/libffado-2.4.7 $ scons ENABLE_BEBOB=no ENABLE_OXFORD=no ENABLE_METRIC_HALO=no ENABLE_RME=no ENABLE_OPTIMIZATIONS=yes scons: Reading SConscript files ... Checking for a working C-compiler (cached) yes Checking for a working C++-compiler (cached) yes Checking for pkg-config (at least version 0.0.0)... (cached) yes Checking for libxml++-3.0... (cached) no Checking for jack... (cached) no Checking jackd version...1.9.21 Installed Jack Audio Connection Kit (JACK) supports FFADO setbuffersize API Checking for libraw1394 (2.0.5 or higher)... (cached) yes Checking for libiec61883 (1.1.0 or higher)... (cached) yes Checking for libconfig++ (0 or higher)... (cached) yes Checking for libxml++-2.6 (2.13.0 or higher)... (cached) yes Checking for libxml++-2.6 >= 2.39.1... (cached) yes Checking for libxml++-3.0 >= 3.0.0... (cached) no Checking for lrint(3.2) in C library m... (cached) yes Checking for lrintf(3.2) in C library m... (cached) yes Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) yes Checking for the python module 'PyQt5' (cached) yes Checking for the python module 'dbus.mainloop.pyqt5' (cached) yes Checking whether 'xdg-desktop-menu --help' executes (cached) yes Checking whether 'xdg-icon-resource --help' executes (cached) yes Checking for alsa (0 or higher)... (cached) yes Checking for dbus-1 (1.0 or higher)... (cached) yes Checking for dbus-c++-1 (0 or higher)... (cached) yes Checking whether 'which dbusxx-xml2cpp' executes (cached) yes Checking for variable session_bus_services_dir in package dbus-1... (cached) yes Trying to find the system triple: (cached) yes Doing a debug build Detected DIST_TARGET = x86_64 User space is 64-bit Doing a 64-bit x86_64 build for Intel(R) Core(TM) i7-4910MQ CPU @ 2.90GHz Doing an optimized build... Insufficient rights to install the system-wide dbus service file. Please run the "scons install" command with higher authority. scons: done reading SConscript files. scons: Building targets ... scons: `src' is up to date. scons: `support' is up to date. scons: `tests' is up to date. scons: done building targets. # scons install scons: Reading SConscript files ... Checking for a working C-compiler (cached) yes Checking for a working C++-compiler (cached) yes Checking for pkg-config (at least version 0.0.0)... (cached) yes Checking for libxml++-3.0... (cached) no Checking for jack... (cached) no Checking jackd version...1.9.21 Installed Jack Audio Connection Kit (JACK) supports FFADO setbuffersize API Checking for libraw1394 (2.0.5 or higher)... (cached) yes Checking for libiec61883 (1.1.0 or higher)... (cached) yes Checking for libconfig++ (0 or higher)... (cached) yes Checking for libxml++-2.6 (2.13.0 or higher)... (cached) yes Checking for libxml++-2.6 >= 2.39.1... (cached) yes Checking for libxml++-3.0 >= 3.0.0... (cached) no Checking for lrint(3.2) in C library m... (cached) yes Checking for lrintf(3.2) in C library m... (cached) yes Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) yes Checking for the python module 'PyQt5' (cached) yes Checking for the python module 'dbus.mainloop.pyqt5' (cached) yes Checking whether 'xdg-desktop-menu --help' executes (cached) yes Checking whether 'xdg-icon-resource --help' executes (cached) yes Checking for alsa (0 or higher)... (cached) yes Checking for dbus-1 (1.0 or higher)... (cached) yes Checking for dbus-c++-1 (0 or higher)... (cached) yes Checking whether 'which dbusxx-xml2cpp' executes (cached) yes Checking for variable session_bus_services_dir in package dbus-1... (cached) yes Trying to find the system triple: (cached) yes Doing a debug build Detected DIST_TARGET = x86_64 User space is 64-bit Doing a 64-bit x86_64 build for Intel(R) Core(TM) i7-4910MQ CPU @ 2.90GHz Doing an optimized build... Will install the service-file scons: done reading SConscript files. scons: Building targets ... xdg-desktop-menu install support/xdg/ffado.org-ffadomixer.desktop xdg-icon-resource install --size 64 --novendor --context apps support/xdg/hi64-apps-ffado.png ffado scons: done building targets. jsigle@think3 Mo Apr 29 08:35:56 /usr/src/ffado/libffado-2.4.8 $ scons ENABLE_BEBOB=no ENABLE_OXFORD=no ENABLE_METRIC_HALO=no ENABLE_RME=no ENABLE_OPTIMIZATIONS=yes scons: Reading SConscript files ... Checking for a working C-compiler (cached) yes Checking for a working C++-compiler (cached) yes Checking for pkg-config (at least version 0.0.0)... (cached) yes Checking for libxml++-3.0... (cached) no Checking for jack... (cached) no Checking jackd version...1.9.21 Installed Jack Audio Connection Kit (JACK) supports FFADO setbuffersize API Checking for libraw1394 (2.0.5 or higher)... (cached) yes Checking for libiec61883 (1.1.0 or higher)... (cached) yes Checking for libconfig++ (0 or higher)... (cached) yes Checking for libxml++-2.6 (2.13.0 or higher)... (cached) yes Checking for libxml++-2.6 >= 2.39.1... (cached) yes Checking for libxml++-3.0 >= 3.0.0... (cached) no Checking for lrint(3.2) in C library m... (cached) yes Checking for lrintf(3.2) in C library m... (cached) yes Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) no The prerequisites ('pyuic4'/'pyuic5' and the python-modules 'dbus' and 'PyQt4'/'PyQt5', the packages could be named like dbus-python and PyQt) to build the mixer were not found. Therefore the qt mixer will not be installed. Checking for alsa (0 or higher)... (cached) yes Checking for dbus-1 (1.0 or higher)... (cached) yes Checking for dbus-c++-1 (0 or higher)... (cached) yes Checking whether 'which dbusxx-xml2cpp' executes (cached) yes Checking for variable session_bus_services_dir in package dbus-1... (cached) yes Trying to find the system triple: (cached) yes Doing a debug build Detected DIST_TARGET = x86_64 User space is 64-bit Doing a 64-bit x86_64 build for Intel(R) Core(TM) i7-4910MQ CPU @ 2.90GHz Doing an optimized build... Insufficient rights to install the system-wide dbus service file. Please run the "scons install" command with higher authority. scons: done reading SConscript files. scons: Building targets ... scons: `src' is up to date. scons: `support' is up to date. scons: `tests' is up to date. scons: done building targets. root@think3 Mo Apr 29 08:38:42 /usr/src/ffado/libffado-2.4.8 # scons install scons: Reading SConscript files ... Checking for a working C-compiler (cached) yes Checking for a working C++-compiler (cached) yes Checking for pkg-config (at least version 0.0.0)... (cached) yes Checking for libxml++-3.0... (cached) no Checking for jack... (cached) no Checking jackd version...1.9.21 Installed Jack Audio Connection Kit (JACK) supports FFADO setbuffersize API Checking for libraw1394 (2.0.5 or higher)... (cached) yes Checking for libiec61883 (1.1.0 or higher)... (cached) yes Checking for libconfig++ (0 or higher)... (cached) yes Checking for libxml++-2.6 (2.13.0 or higher)... (cached) yes Checking for libxml++-2.6 >= 2.39.1... (cached) yes Checking for libxml++-3.0 >= 3.0.0... (cached) no Checking for lrint(3.2) in C library m... (cached) yes Checking for lrintf(3.2) in C library m... (cached) yes Checking whether 'which pyuic4' executes (cached) no Checking whether 'which pyuic5' executes (cached) no The prerequisites ('pyuic4'/'pyuic5' and the python-modules 'dbus' and 'PyQt4'/'PyQt5', the packages could be named like dbus-python and PyQt) to build the mixer were not found. Therefore the qt mixer will not be installed. Checking for alsa (0 or higher)... (cached) yes Checking for dbus-1 (1.0 or higher)... (cached) yes Checking for dbus-c++-1 (0 or higher)... (cached) yes Checking whether 'which dbusxx-xml2cpp' executes (cached) yes Checking for variable session_bus_services_dir in package dbus-1... (cached) yes Trying to find the system triple: (cached) yes Doing a debug build Detected DIST_TARGET = x86_64 User space is 64-bit Doing a 64-bit x86_64 build for Intel(R) Core(TM) i7-4910MQ CPU @ 2.90GHz Doing an optimized build... Will install the service-file scons: done reading SConscript files. scons: Building targets ... scons: `install' is up to date. scons: done building targets. ------------------------------------------------- Kind regards again, Joerg Am 29.04.2024 um 07:20 schrieb Jonathan Woithe: > A final observation is that the problem with FFADO 2.4.8 was apparently a > compile time error. Neither of the changes noted above would affect > the build, so I expect they are independent of the problem you found with > FFADO 2.4.8. All in all, the best way forward is to start with a standard > FFADO 2.4.8 source and try to build it on your system. Post the build > errors you get and we'll take a look at them. |
From: Joerg M. S. <in...@js...> - 2024-04-29 05:21:27
|
Hi Jonathan (again...) Thanks for your looking into my previous post already & your thoughts on the 2.4.7 vs. 2.4.8 vs. QStrings issue. The changes there were made in 2019, 2020 - so I'll have to see how all this compares to my current environment. Your suggestions will certainly help me :-) But I'll take a break now before I go on with that. - Just one more test result, after this: > root@think3 Mo Apr 29 05:53:02 /usr/src/ffado/libffado-2.4.7 > # chmod 760 /dev/fw0 > # chmod 760 /dev/fw1 > # chown :audio /dev/fw0 > # chown :audio /dev/fw1 > # ls -l /dev/fw0 > crwxrw---- 1 root audio 243, 0 29. Apr 05:04 /dev/fw0 > # ls -l /dev/fw1 > crwxrw---- 1 root audio 243, 1 29. Apr 05:04 /dev/fw1 > > And now it still works, I can run jackd -dfirewire as a normal user who's a member of group audio :-) I just tested rosegarden via jackd -dfirewire -r 44100, both running in my own user context, member of group audio. 4 audio files played on individual rosegarden tracks, and it all worked well on the first attempt :-) I wish you all a good start into the new week! Kind regards, Joerg |
From: Jonathan W. <jw...@ju...> - 2024-04-29 05:20:37
|
Hi Joerg On Mon, Apr 29, 2024 at 06:51:46AM +0200, Joerg M. Sigle wrote: > Oh no no no, very naturally there's NO systemd on my machines. I've used > the Devuan distro since it became available. Okay. > Also, I had used the line for the 60-ffado.rules even back in 2019 (see > the previous message with all my old attempts): > : > ATTR{vendor}=="0x00022e", ATTR{model}=="0x00022e", GROUP="audio", ENV{ID_FFADO}="1" > : > But even WITH that entry, after # /etc/init.d/eudev restart, even after > reboot, even after adding another line for the Linux Firewire device which > is shown by ffado-test ListDevices - it did NOT suffice to let me run > jackd -dfireware as non-root-user: ... In that case (and as mentioned earlier), please plug the DM-4800 into the computer, run ffado-diag and post the result. > The problem finally went away, after I changed permissions on the fireware > device nodes: > > # chmod 777 /dev/fw0 > # chmod 777 /dev/fw1 That's at best a temporary fix because the revised permissions will be reset when the device is next connected. When you run ffado-diag, please do so in a clean boot without any manual changes having been made to anything under /dev/. > But that's probably a little bit toooo wide open. So I tried: > > root@think3 Mo Apr 29 05:53:02 /usr/src/ffado/libffado-2.4.7 > # chmod 760 /dev/fw0 > # chmod 760 /dev/fw1 > # chown :audio /dev/fw0 > # chown :audio /dev/fw1 > # ls -l /dev/fw0 > crwxrw---- 1 root audio 243, 0 29. Apr 05:04 /dev/fw0 > # ls -l /dev/fw1 > crwxrw---- 1 root audio 243, 1 29. Apr 05:04 /dev/fw1 > > And now it still works ... As it should, if your user is in the "audio" group. > I'm not sure however, if it's intended to work this way? If udev is set up correctly, you should see something like this: crw------- 1 root root 238, 0 Mar 17 08:15 /dev/fw0 crw-rw---- 1 root audio 238, 1 Mar 17 08:15 /dev/fw1 /dev/fw0 is your host controller card. Users do not need to access that. The audio device is usually /dev/fw1 and users need read-write permission to that. It is usually achieved with the above permissions. By default the access permissions of /dev/fw1 will be correct (660) but the group will be root. This is why the FFADO udev rules sets the group of the device to "audio". > I don't know either whether this is mentioned in the ffado documentation. Off-hand I don't either. However, it not normally necessary because udev takes care of it (either through the FFADO udev rule file or systemd). > (And I'm not sure, whether that must be done to BOTH firewire nodes, > or only to the one actually representing the IF-FW/DM MKII card. As above, only the device node corresponding to the IF-FW/DM MKII card needs to be accessed by the user. > [1] https://forums.gentoo.org/viewtopic-t-863523-start-0.html The problem here appears to have been caused by confusion (or perhaps a strange interaction) between the old and new kernel firewire stacks which were in use in 2011. > [2] https://bugs.launchpad.net/ubuntustudio/+bug/668590 This bug is dated from 2010. Most of the report seems to focus on the old kernel firewire stack which has long since been superseded. > [3] https://www.google.ch/search?q=jackd+-dfirewire+must+be+root+or+No+FireWire+adapters+found Many of these reports are from over 10 years ago. Unfortunately I don't have time to analyse every one of them, but I suspect there's little useful information to be found in any of them. Let's see what ffado-diag says about your system and take it from there. Regards jonathan |
From: Joerg M. S. <in...@js...> - 2024-04-29 04:52:00
|
Hi Jonathan and Takashi Thanks again for your kind responses. Jonathan, I just mentioned both qjack & qjackctl as a reference for people who would try both ways in the future - and because qjackctl *might* theoretically start jackd in a different user context. > If your distribution runs systemd then I understand that systemd > takes care of handling the permissions and group membership for you (I think > this is what Takashi was referring to). Oh no no no, very naturally there's NO systemd on my machines. I've used the Devuan distro since it became available. And there's no avahi, and no pulseaudio either - if apt hasn't just brought that back as a subversive dependency of whatever. There's only apulse, since the reckless-marketing-epidemia even managed to strip precompiled firefox from plain ALSA support [...] I mentioned systemd only because Takashi's config ROM collection says it's a systemd oriented project. Also, I had used the line for the 60-ffado.rules even back in 2019 (see the previous message with all my old attempts): ---------------------------------------------------------------------------------------- ... ATTR{vendor}=="0x10c73f", GROUP="audio", ENV{ID_FFADO}="1" # The devices below are by vendors who make other firewire devices in # addition to their audio interfaces. They need more specific rules to # ensure only audio interfaces are covered here. # Tascam, a subsiduary of TEAC (the OUI is TEAC's) ATTR{vendor}=="0x00022e", ATTR{model}=="0x010067", GROUP="audio", ENV{ID_FFADO}="1" #201906030014js added Tascam IF/FW-DM Mk II Firewire Interface for DM-4800 #according to output from ffado-test ListDevices or ffado-test Discover #N.B. This shows VendorId and ModelID to be the same, namely 0x0000022E! #even though the GUID is 0x00022e00018000000! ATTR{vendor}=="0x00022e", ATTR{model}=="0x00022e", GROUP="audio", ENV{ID_FFADO}="1" #Maybe we also need to add the Linux Firewire device? ATTR{vendor}=="0x0001B7", ATTR{model}=="0x000000", GROUP="audio", ENV{ID_FFADO}="1" # The devices below abuse another Vendor's ID, and therefore we need more advanced rules for those. ... ---------------------------------------------------------------------------------------- But even WITH that entry, after # /etc/init.d/eudev restart, even after reboot, even after adding another line for the Linux Firewire device which is shown by ffado-test ListDevices - it did NOT suffice to let me run jackd -dfireware as non-root-user: jsigle@think3 Mo Apr 29 05:04:18 /etc/udev/rules.d $ jackd -dfirewire -r 44100 -v6 jackdmp 1.9.21 ... 1714359861993695: Debug (ffado.cpp)[ 148] ffado_streaming_init: setting slave mode to 0 1714359861993712: Debug (ffado.cpp)[ 154] ffado_streaming_init: setting snoop mode to 0 1714359861993814: Debug (Configuration.cpp)[ 63] openFile: Could not open file: ~/.ffado/configuration 1714359861998420: Fatal (devicemanager.cpp)[ 187] initialize: No FireWire adapters (ports) found. <--- look here 1714359861998434: Fatal (ffado.cpp)[ 160] ffado_streaming_init: Could not initialize device manager <--- look here 1714359861998450: Debug (Configuration.cpp)[ 138] save: Not saving temporary config file: temporary 1714359861998455: Debug (Configuration.cpp)[ 135] save: Not saving readonly config file: /usr/local/share/libffado/configuration firewire ERR: FFADO: Error creating virtual device Cannot attach audio driver <--- look here JackServer::Open failed with -1 no message buffer overruns Failed to open server The problem finally went away, after I changed permissions on the fireware device nodes: # chmod 777 /dev/fw0 # chmod 777 /dev/fw1 jsigle@think3 Mo Apr 29 05:10:29 ~ $ jackd -dfirewire -r 44100 jackdmp 1.9.21 Copyright 2001-2005 Paul Davis and others. ... 03992866248: (dice_avdevice.cpp)[ 833] showDevice: Out 31 03992866249: (dice_avdevice.cpp)[ 833] showDevice: Out 32 03992889735: (dice_avdevice.cpp)[ 324] setSamplingFrequency: Setting sample rate: 44100 But that's probably a little bit toooo wide open. So I tried: root@think3 Mo Apr 29 05:53:02 /usr/src/ffado/libffado-2.4.7 # chmod 760 /dev/fw0 # chmod 760 /dev/fw1 # chown :audio /dev/fw0 # chown :audio /dev/fw1 # ls -l /dev/fw0 crwxrw---- 1 root audio 243, 0 29. Apr 05:04 /dev/fw0 # ls -l /dev/fw1 crwxrw---- 1 root audio 243, 1 29. Apr 05:04 /dev/fw1 And now it still works, I can run jackd -dfirewire as a normal user who's a member of group audio :-) jsigle@think3 Mo Apr 29 05:54:40 ~ $ jackd -dfirewire -r 44100 jackdmp 1.9.21 Copyright 2001-2005 Paul Davis and others. Copyright 2004-2016 Grame. ... 04284995291: (dice_avdevice.cpp)[ 833] showDevice: Out 31 04284995292: (dice_avdevice.cpp)[ 833] showDevice: Out 32 04285017600: (dice_avdevice.cpp)[ 324] setSamplingFrequency: Setting sample rate: 44100 I'm not sure however, if it's intended to work this way? I don't know either whether this is mentioned in the ffado documentation. I just found clues to that possible solution in other people's discussions; examples below. (And I'm not sure, whether that must be done to BOTH firewire nodes, or only to the one actually representing the IF-FW/DM MKII card. The other one is (probably) either some os/driver component, or the ExpressCard34 which gives my laptop firewire ports.) Kind regards, Joerg [1] https://forums.gentoo.org/viewtopic-t-863523-start-0.html [2] https://bugs.launchpad.net/ubuntustudio/+bug/668590 [3] https://www.google.ch/search?q=jackd+-dfirewire+must+be+root+or+No+FireWire+adapters+found Am 29.04.2024 um 02:53 schrieb Jonathan Woithe: > Hi Jörg > > On Sun, Apr 28, 2024 at 02:37:30PM +0200, Jörg M. Sigle wrote: >> Here's some answers, and a little documentation of attempts made last >> night: > > Much of what follows has been written in my reply to your more recent > message where you reported success with FFADO. I'm including this abridged > version in this thread to help others who might encounter it in the mailing > list archive in future. > >> My user *is* in the audio group (if I'm not wrong...), but I still need >> superuser privileges for the ffado firewire stuff. > > If you add > > ATTR{vendor}=="0x00022e", ATTR{model}=="0x00022e", GROUP="audio", ENV{ID_FFADO}="1" > > somewhere between > > SUBSYSTEM!="firewire", GOTO="ffado_end" > > and > > LABEL="ffado_end" > > in the libffado/60-ffado.rules file from the libffado source tree and have > it installed in your system where udev looks for its rules file, the need to > be root when running jackd should go away. The above udev rule will make > "audio" the group-owner of the DM-4800's device node (/dev/fw1 normally). > Members of the "audio" group will then be able to access it. > >> There's no "firewire" or "ffado" entry in /etc/groups so far. I'll look >> into that later... > > Correct. FFADO works with the "audio" group. > >> I'll also look into the compile problems in 2.4.8 later. >> My local 2.4.7 tree is from some time ago, maybe I have fixed some >> dependecies etc. in there so that it works. > > Thanks, that would be appreciated. > >> When I change the sampling rate on the mixer, that's reflected in >> ffado-test and ffado-mixer output. So this item is certainly obtained >> from the mixer and correct :-) >> >> However when I try to *set* the sample rate through ffado-test, that >> throws an error message. > > Some devices don't allow the sampling rate to be set from the computer. > I've seen this with other mixers (including more recent USB ones). > >> Afterwards, the DM-4800 appeared in alsamixer, but with "Dieses Gerät hat >> keine Regler" = "This device has no faders" (similar to some FastTrack USB >> interface I remember). >> >> The mixer also has a USB port and MIDI connectors. Tascam provides a >> software for MS Windows for remote control and remote display; IIRC this >> uses the USB connection. >> >> So your considerations that there might not be any firewire based mixer >> controls might be true. > > It certainly sounds like that. > >> (Also, the mixer has so many buttons & functions it would take ages to >> support them all, even with documentation...) > > Indeed - it would be a lot of work. > >> Then, it also appears in the audio output device list in vlc, with >> multiple entries (still through ALSA): >> >> DM-4800 Direct hardware device without any conversions >> DM-4800 Hardware device with all software conversions >> DM-4800 Default audio device >> DM-4800 Default audio device >> DM-4800 Direct sampling mixing device >> DM-4800 Direct sampling snooping device > > That's because of the way DICE devices are structured and how that is > reflected by ALSA. For more information about the ALSA side, please contact > the ALSA project where there will be many more people who would be able to > assist. > > Regards > jonathan > -- ------------------------------------------------------------------- Dr. med. Jörg M. Sigle +41 76 276 86 94 http://www.ql-recorder.com +41 32 510 23 46 http://www.jsigle.com +49 176 96 43 54 13 |