Pulseaudio Crossover Rack - multi-way crossover design & implementation with linux

Thanks. I think I've installed re installed from
https://t-5.eu/hp/Software/Debian repository/
I'll try to clean up everything and start afresh, modules included.

It looks like the app cannot 'see' the the modules in /usr/lib/ladspa. (I have the app installed in a home subdir.) Maybe it has to do with permissions.

On the other hand the new Time Alignment shows up ok and is functional.

Oriol
 
Hi T-5,
I removed (autoremove) plugins and PaX app.
I updated the repository from the source and reinstalled plugins and app.
Then I started the app from a terminal using

sudo python3 /usr/lib/pulseaudio-crossover-rack/pulseaudio-crossover-rack.py "$@"

It seemed good as during the first opening PaX app has shown dialogs prompting to install dependencies and missing bits, etc.
Eventually the main window opened but the same problem occurs:
Nothing happens when trying to create a new file or open a .paxor file.

Here is the traceback:
Bash:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 867, in _openFile
    self._xoverFile = XoverFile(fn)
  File "/usr/lib/pulseaudio-crossover-rack/DataClasses/XoverFile.py", line 86, in __init__
    self._zodb_storage = FileStorage.FileStorage(self._tempname)
AttributeError: 'NoneType' object has no attribute 'FileStorage'

During handling of the above exception, another exception occurred

Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 408, in onFileOpen
    self._openFile(fn)
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 883, in _openFile
    except (FileStorageError, TypeError):
TypeError: catching classes that do not inherit from BaseException is not allowed
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 389, in onFileNew
    self._xoverFile = XoverFile("")
  File "/usr/lib/pulseaudio-crossover-rack/DataClasses/XoverFile.py", line 86, in __init__
    self._zodb_storage = FileStorage.FileStorage(self._tempname)
AttributeError: 'NoneType' object has no attribute 'FileStorage'
Empty filename passed to function
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 867, in _openFile
    self._xoverFile = XoverFile(fn)
  File "/usr/lib/pulseaudio-crossover-rack/DataClasses/XoverFile.py", line 86, in __init__
    self._zodb_storage = FileStorage.FileStorage(self._tempname)
AttributeError: 'NoneType' object has no attribute 'FileStorage'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 408, in onFileOpen
self._openFile(fn)
File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 883, in _openFile
except (FileStorageError, TypeError):
TypeError: catching classes that do not inherit from BaseException is not allowed
Traceback (most recent call last):
File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 389, in onFileNew
self._xoverFile = XoverFile("")
File "/usr/lib/pulseaudio-crossover-rack/DataClasses/XoverFile.py", line 86, in init
self._zodb_storage = FileStorage.FileStorage(self._tempname)
AttributeError: 'NoneType' object has no attribute 'FileStorage'

It's still possible that I've made a mess, because of my former cloning of the repository via git

At this point the problem is starting getting over my head.

Thanks for your help and hope I can use your program some time.

The design is very neat (no obstruse configuration files: you can see everything and potter no end when it works).

Maybe making a foolproof package would help a wider adoption amongst the less computer literate.

Oriol
 
When I try to choose "Second Order Butterworth Lowpass" from the Add menu it does nothing.

Also the menu option is misspelt it actually says "Second Order Butterworth Lowpassk" (Which may be the problem?)

Sorry for being the annoying man who keeps finding problems ;)

Just released version 1.80 that fixes the typo. Thanks for reporting.

Here's the changelog:
Code:
pulseaudio-crossover-rack (1.80) stable; urgency=high
  *  bugfix:
     - fixed a typo that prevented the insertion of
       "Second Order Butterworth Lowpass" filters
 -- Jürgen Herrmann <t-5@t-5.eu>  Sun, 17 Apr 2022 22:38:01 +0200
 
  • Like
Reactions: 1 user
Unfortunately this is not possible with LADPSA Plugins, pulseaudio can only process left/right channels identically.

The successor version that will use camilladsp in the background will be able to do this.
Isn't there a workaround to split channels into mono channels or something?

I think I have also seen audio effects that ping-pong (modulate) from left-to-right, if I am not mistaken.
Similar for some dynamic plugins (gates, compressors etc), that handle left-right differently.
So that at least suggest there are some other workarounds/"hacks" possible maybe?

also found this; https://www.mltframework.org/plugins/FilterLadspa-1956/

and LADSPA plugins like this also seem to have a balance in them and/or treat left/right channels differently
https://lsp-plug.in/?page=manuals&section=para_equalizer_x16_stereo
 
Last edited:
as far as I know pulseaudio runs a single (mono) instance of a ladspa plugin for each channel.

even if there have been improvements I will not do any major work to the old architecture as there already has bee a lot of effort put into the new version that will use camilladsp. It will be much more flexible in a lot of other things, too.

please don't ask for a release date though. it's done when its done :)
 
  • Like
Reactions: 1 user
as far as I know pulseaudio runs a single (mono) instance of a ladspa plugin for each channel.

even if there have been improvements I will not do any major work to the old architecture as there already has bee a lot of effort put into the new version that will use camilladsp. It will be much more flexible in a lot of other things, too.

please don't ask for a release date though. it's done when its done :)
Fair enough, it were just some thoughts, with maybe some quick fixes :)
 
Hello, I find this idea VERY interesting. Usually, one needs Crossover, Delay and EQ on a typical stereo plus sub system (maybe limiters too). If that all can be done within the Linux system, then one DA-AD conversion plus one costly module (the DSP) can be saved! Is there any plan to bring this software to that level? (Sorry, I did not read through 56 pages of discussion, so I am not up to the latest info)
 
Hello, I have problem using this program, I have an old pc (ALC882 audio card and asus xonar). My cards seems to work with Ubuntu studio. When I start the program, I click on new file, but I can not find the input interface, then If I add new output I see only the 3 icon (image 1), if I add a filter see image 2. I am going crazy, please can someone help me?
 

Attachments

  • 1.jpeg
    1.jpeg
    111 KB · Views: 74
  • 2.jpeg
    2.jpeg
    145.4 KB · Views: 73
  • Audio Settings.jpeg
    Audio Settings.jpeg
    225.6 KB · Views: 70
No error, but when I create a new file thi is the output. Thank you

Bash:
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 215, in paintEvent
    self.paint(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/InputWidget.py", line 32, in paint
    self._drawOutputDot(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 300, in _drawOutputDot
    qp.drawArc(x, y, w, h, 90 * 16, -180 * 16)
TypeError: arguments did not match any overloaded call:
  drawArc(self, QRectF, int, int): argument 1 has unexpected type 'int'
  drawArc(self, QRect, int, int): argument 1 has unexpected type 'int'
  drawArc(self, int, int, int, int, int, int): argument 2 has unexpected type 'float'
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 215, in paintEvent
    self.paint(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/InputWidget.py", line 32, in paint
    self._drawOutputDot(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 300, in _drawOutputDot
    qp.drawArc(x, y, w, h, 90 * 16, -180 * 16)
TypeError: arguments did not match any overloaded call:
  drawArc(self, QRectF, int, int): argument 1 has unexpected type 'int'
  drawArc(self, QRect, int, int): argument 1 has unexpected type 'int'
  drawArc(self, int, int, int, int, int, int): argument 2 has unexpected type 'float'
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 215, in paintEvent
    self.paint(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/InputWidget.py", line 32, in paint
    self._drawOutputDot(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 300, in _drawOutputDot
    qp.drawArc(x, y, w, h, 90 * 16, -180 * 16)
TypeError: arguments did not match any overloaded call:
  drawArc(self, QRectF, int, int): argument 1 has unexpected type 'int'
  drawArc(self, QRect, int, int): argument 1 has unexpected type 'int'
  drawArc(self, int, int, int, int, int, int): argument 2 has unexpected type 'float'
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 215, in paintEvent
    self.paint(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/InputWidget.py", line 32, in paint
    self._drawOutputDot(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 300, in _drawOutputDot
    qp.drawArc(x, y, w, h, 90 * 16, -180 * 16)
TypeError: arguments did not match any overloaded call:
  drawArc(self, QRectF, int, int): argument 1 has unexpected type 'int'
  drawArc(self, QRect, int, int): argument 1 has unexpected type 'int'
  drawArc(self, int, int, int, int, int, int): argument 2 has unexpected type 'float'
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 215, in paintEvent
    self.paint(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/InputWidget.py", line 32, in paint
    self._drawOutputDot(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 300, in _drawOutputDot
    qp.drawArc(x, y, w, h, 90 * 16, -180 * 16)
TypeError: arguments did not match any overloaded call:
  drawArc(self, QRectF, int, int): argument 1 has unexpected type 'int'
  drawArc(self, QRect, int, int): argument 1 has unexpected type 'int'
  drawArc(self, int, int, int, int, int, int): argument 2 has unexpected type 'float'
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 215, in paintEvent
    self.paint(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/InputWidget.py", line 32, in paint
    self._drawOutputDot(qp)
  File "/usr/lib/pulseaudio-crossover-rack/CustomWidgets/AbstractWidget.py", line 300, in _drawOutputDot
    qp.drawArc(x, y, w, h, 90 * 16, -180 * 16)
TypeError: arguments did not match any overloaded call:
  drawArc(self, QRectF, int, int): argument 1 has unexpected type 'int'
  drawArc(self, QRect, int, int): argument 1 has unexpected type 'int'
  drawArc(self, int, int, int, int, int, int): argument 2 has unexpected type 'float'
QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it?
 
Never have seen this one before - seems to me that PyQt5 sometimes does conversion from float to int by itself, and in your case it doesn't. Are you able to download this file: https://gitlab.com/t-5/paxoverrack/.../CustomWidgets/AbstractWidget.py?inline=false and put it into the directory /usr/lib/pulseaudio-crossover-rack/CustomWidgets (have to do that as root!)? There might be other bugs like this one lurking around and I don't want to spam everybody with a load of new releases...
 
Ok @Tfive thank you, now it works, I can see the input, but...... I can not use any filters, I have this error
Bash:
Traceback (most recent call last):
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 303, in onAddFilter
    dlg = EditFilterDialog(self, new, newlyCreated=True)
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/EditFilterDialog.py", line 68, in __init__
    slider.setValue(FILTER_EDIT_DLG_SLIDER_MAX / 2)
TypeError: setValue(self, int): argument 1 has unexpected type 'float'

Then with another type of filter I have this one
Bash:
then with other FILTER

File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/MainWindow.py", line 299, in onAddFilter
    dlg = EditFilterDialog(self, new, newlyCreated=True)
  File "/usr/lib/pulseaudio-crossover-rack/WindowClasses/EditFilterDialog.py", line 68, in __init__
    slider.setValue(FILTER_EDIT_DLG_SLIDER_MAX / 2)
TypeError: setValue(self, int): argument 1 has unexpected type 'float'
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 1694, resource id: 16790618, major code: 40 (TranslateCoords), minor code: 0

Really nice work, I think that I am unfortunatly, or my machine has got tough hardware... I see that you are working with another version, if my errors require too time, for me is not a problem... I don't want that you loose too many times. However congratulations for the work :-D
 
Really nice work, I think that I am unfortunatly, or my machine has got tough hardware... I see that you are working with another version, if my errors require too time, for me is not a problem... I don't want that you loose too many times. However congratulations for the work :-D

Please bear with me as these errors might crop up for other users as well... There's another file here: https://gitlab.com/t-5/paxoverrack/-/raw/master/WindowClasses/EditFilterDialog.py?inline=false
Please put it into /usr/lib/pulseaudio-crossover-rack/WindowClasses .

Hopefully this is the last one where a int is expected but a float is given as parameter.

BTW: Which linux distro/version are you on?
 
Last edited: