Python Open Room Correction (PORC)

Right, the C# GUI is up on Github (anlin93/SPORCUI).

On another subject, am I right in understanding that PORC can only account for a single channel when generating correction filters? I recall the Dirac Live calibration process also captures the sum response of the (stereo or multichannel) system, in addition to each channel individually. Do you think there is any benefit to including the sum response? I tried to Google sources on the subject but came up short. If there is merit to the use of sum and individual measurements, it would be fantastic to have PORC support it.
 
I have set up a new experimental branch of PORC over on Github with some updates to PORC:

Changelog:
- Averaging of multiple impulses is now possible
- Added an option for OpenDRC-formatted text file output
- Recursive kurtosis-based trimming option. Highly experimental. (--experimentaltrim)
 
Hi anlin,

I'll have a look at the code changes later, but just in passing glance I had at lunchtime here today I noticed the indent depth in your new branch isn't consistent with the existing PORC code. Try to keep it consistent with the rest of the lib for practical reasons.

I haven't had time to play with the GUI yet either, lots of projects on at the moment but I will try to chime in here in the next week or so with some ideas/comments.


Cheers,
Chris
 
Whoops, I forgot to change the indentation back to spaces. The indentation in porc.py was all over the place (varying number of spaces and tabs) partly because of my recent changes, so I thought I'd make it consistent with the rest of the project files. I'll push an update later today with the correct 4-space indentation.

On another subject, how big of a difference should enabling the mixed phase correction make? I toyed around with it a bit yesterday, but didn't notice almost any change when compared to a minimum phase filter. From what I've seen, the effect mixed phase compensation has on the magnitude response is in the range of +-0.5db. The effect on the phase response is not much greater at +-8deg. I am using a manually trimmed RIR, a flat target and a fresh copy of PORC without the trimming feature.
 
It's a fantastic program, thanks for taking the time to put it script it! Judging from my early tests it's the first program that holds up to Dirac Live's filters, inasmuch as it doesn't only correct the frequency response but also gives me a better defined stage.
One question though: when I try to use the mixedphase there is a problem with the right speakers impulse only. I measured the impulses in REW, and exported them as 32bit wave files. For the left speaker porc generates a nice mixedphase filter. For the right however there's a message: "zero taps, skipping mixed-phase computation". Usually I got this message when I tried to process 16bit or 24bit wave-files. But this time it's for a 32bit file, and only for the right speaker. Does anybody have any idea what I might be doing wrong?
 
For anybody who is struggling to make this fantastic piece of software work, the following advice might be helpful.

So i installed the up to date version of Python, which is, at the time of this writing, is 2.17.13. I installed Octave, all the dependencies listed on the websites, all the dependencies that are alluded to in the help file of Align2 software (Also beautiful soft). It just didn't work.

When i tried using PORC from the Python, it spewed different kind of errors which i don't even remember. When i tried using it from Align2, it gave other kinds of errors :) Align, i think, modifies the porc.py by adding some additional code (for better correction computation, i guess), but there is an error - it puts the code in a wrong line (37 instead of 102).

So i was wondering how come that everyone on this thread were using the software with success? I tried installing Anaconda, which is Anaconda2-4.3.1 at this moment. It didn't help.

So i looked up the date at which a participant of this thread was recommending the Anaconda distribution (circa October 2013), found the corresponding version of Anaconda, installed it, put the linsndfile.dll into the corresponding folder and PORC worked like a charm.

So, for those who want to try the PORC and struggle making it work - download Anaconda-1.8.0 from their website, install libsndfile and it should work.

I couldn't make Align2 work with PORC and hope that the author will in some time fix the errors. Align2 does indeed bring some cool features - ERB smoothing, multiple points measurements, etc.
 
Hey all,

I created a few filters using REW PORC. Bur I find the sound to be too much distorted compared to the original result. E.g. Some hights from instruments are missing, even though voices seem clear.

I‘m a complete beginner. Thus chances are good I‘m doing something wrong. Could you suggest me how to create best results for a stereo setup with PORC? It is quite anchallenge forma newbie to put all bits and pieces together.

This is my current process:
- Create measurements in REW on Windows with a UMIK-1. Levels and settings set according to the tutorial found at the minidsp site.
- I record each channel individually at the listening position, mic targeting the ceiling.
- the measurement for each channel is exported as wav file (32 bit, 48khz)
- the resulting .wavs are processed on Ubuntu with PORC
- the equalized wav files are used by jconvolver
- (I‘m using patchage to route digital toslink input to jconvolver and to a toslink audio output to my receiver for live processing, input is an Apple TV, output is a Denon AVR x4400h with all audio falsifiers disabled)

What‘s your recommended process to create filters for PORC?

Cheers,
Ben
 
I just installed Align2 this week. It runs the octave scripts and produces results. I was able to combine left and right filter files and load the stereo filter into the JRiver Media Center DSP Convolution. It sounds great. The graphs do not work, and only a tiny square is produced. The code apparently uses some octave functions that no longer exist in the current distributions. I found the tab in the software that has links to an older version of octave, but downloading that version did not help get the plots working. I may have to see if there is an older version that may bring this to live. Apparently octave code is generated by the Align2 GUI, so editing the octave source isn't a solution as it is apparently overwritten.
 
Octave install for Align2, loading all the required packages

After using my cellphone video to capture the Align2 error message, I realized I had not installed the required Octave packages. I read the help.txt file where it states "install all options" for Octave. I wanted to, but just didn't know how to do it. Installing again slowly, I noticed there is a dialog box, "Choose Components" that I clicked through too fast when installing Octave the first time (use the download link in the Setup Tab). Scrolling down and checking the box for "Octave Forge" brings in all the packages at once. Now all the plots work. Next I will have to see if I can get all the python elements installed to get PORC working as well.
 

Attachments

  • mail.png
    mail.png
    40.2 KB · Views: 219
For anybody who is struggling to make this fantastic piece of software work, the following advice might be helpful.

So i installed the up to date version of Python, which is, at the time of this writing, is 2.17.13. I installed Octave, all the dependencies listed on the websites, all the dependencies that are alluded to in the help file of Align2 software (Also beautiful soft). It just didn't work.

...When i tried using PORC from the Python, it spewed different kind of errors which i don't even remember. When i tried using it from Align2, it gave other kinds of errors :) Align, i think, modifies the porc.py by adding some additional code (for better correction computation, i guess), but there is an error - it puts the code in a wrong line (37 instead of 102).

So i was wondering how come that everyone on this thread were using the software with success? I tried installing Anaconda, which is Anaconda2-4.3.1 at this moment. It didn't help.

So i looked up the date at which a participant of this thread was recommending the Anaconda distribution (circa October 2013), found the corresponding version of Anaconda, installed it, put the linsndfile.dll into the corresponding folder and PORC worked like a charm.

So, for those who want to try the PORC and struggle making it work - download Anaconda-1.8.0 from their website, install libsndfile and it should work.

I couldn't make Align2 work with PORC and hope that the author will in some time fix the errors. Align2 does indeed bring some cool features - ERB smoothing, multiple points measurements, etc.
Hi, I know this thread is quite old. Has there been any further development on PORC? Conceptually it looks like just what I need, but on my system (Arch Linux) with Python 2.7 there are issues with deprecated scipy calls (scipy.stats.nanstd) and the need for obsolete libraries.

I'm now generating filters using DRC-FIR, but it would be really useful to compare the filters with those generated by PORC. I'm sufficiently proficient in Python to put in some effort to troubleshoot and test a Python3 version of PORC.

FYI, I revived an the Logitech Media Server "brutefirwrapper", and have brutefir room correction running again. I last used this perhaps 7 years ago, and since then sox behaviour has changed enough to break the script.
 
Hi, I know this thread is quite old. Has there been any further development on PORC? Conceptually it looks like just what I need, but on my system (Arch Linux) with Python 2.7 there are issues with deprecated scipy calls (scipy.stats.nanstd) and the need for obsolete libraries.

My Python and Octave experience is quite limited, but I'm interested in this too. I'd love to have IIR filters for real-time correction and FIR for movies and music.
 
Tried to use Porc again, and sadly it doesn't work anymore. Some of the packages that it uses have been updated. I tried to port it to Python 3 but couldn't resolve a traceback 'Float' object cannot be interpreted as an integer. Too bad, it was a fantastic program. I hope someboday with the necessary skills will update it one day.
 
Tried to use Porc again, and sadly it doesn't work anymore. Some of the packages that it uses have been updated. I tried to port it to Python 3 but couldn't resolve a traceback 'Float' object cannot be interpreted as an integer. Too bad, it was a fantastic program. I hope someboday with the necessary skills will update it one day.

I have a working copy of PORC running on python 3. It was a quick and dirty port took me just over an hour to get the example working. I need to go through and clean it up then I will post it on my Github.