Python Open Room Correction
PORC is intended to be a free command line tool and is an Open Source project ported by Mason A. Green and based based on the work of Dr. Balázs Ban hosted at the following page: http://home.mit.bme.hu/~bank/parfilt/. This package allows one to specify a target curve and generate the corresponding loudspeaker-room correction filters for the OpenDRC platforms. The filters may easily be imported into OpenDRC or other convolution engines. More details about Dr. Bank's parallel filter can be found in his papers at the following links.
Balazs Bank, "Perceptually Motivated Audio Equalization Using Fixed-Pole Parallel
Second-Order Filters", IEEE Signal Processing Letters, 2008.
Balazs Bank, "Direct Design of Parallel Second-order Filters for Instrument Body Modeling",
International Computer Music Conference, Copenhagen, Denmark, Aug. 2007.
Required software dependencies to be installed on your PC
IMPORTANT note: This is a command line tool and therefore dedicated to a more advanced crowd. Matplotlib will produce very nice graphs but will require some computer knowledge and basic command line skills. If you want a plug&play solution and are not too computer friendly, this tool is not the easiest way to get your system up and running. PORC has been tested successfully on both Linux and Windows 7 with Python 2.7. Linux depenency install is fairly straightforward. Windows install packages are available for all dependencies.
1) Python 2.7
2) Scientific Python: SciPy, Numpy, & Matplotlib
5) Sox for converting files to correct format
6) Room EQ Wizard (REW)
One needs to measure the log-frequency impulse response of your speakers with a calibrated Electret Measurement Microphone (e.g. Dayton Audio EMM-6 / ECM8000 or other measurement microphones). Software such as Room EQ Wizard (REW) may be used for the purpose of measuring the impulse response. We recommend that you have a look at REW's website for more info. http://www.hometheatershack.com/roomeq/
porc.py [-h] [-t FILE] [-n NTAPS] I F
python porc.py -t tact30f.txt -n 6148 l48.wav leq48.wav
Use the -h flag for help!
The default target curve for PORC is flat. Included in the data directory are a number of target curves. Experiment to suit your listening preferences (I prefer tact30f.txt, bk-48.txt).
For further reference, the B&K House Curve is a good place to start. Read "Relevant loudspeaker tests in studios in Hi-Fi dealers' demo rooms in the home etc.," Figure 5: http://www.bksv.com/doc/17-197.pdf
To convert the end results to a .bin file that can easily be loaded to the OpenDRC, you will need to use sox to convert the output .wav file to a raw 32 bit IEEE floating point mono. The process must be repeated for the left & right channels.
sox leq48.wav -t f32 leq48.bin sox req48.wav -t f32 req48.bin
You can then take the output file and load it to the OpenDRC using the "Load Bin" feature in the FIR dialog box.
Support Community Work & Credits
- Algorithms are based on the work of Dr. Balázs Bank and the numerous papers he published at AES/IEEE journals. Dr Bank's personal website includes a wealth a knowledge certainly worth a read. Thanks again to Dr Bank for allowing us to publish his work under this website!
- Our community is also very fortunate to include developers like Mason A. Green working on some Open Source projects. All credits goes to Mason for starting up this project and building the project. Please take some time to give a small donation to this project so Mason can eventually keep developing creative software! All profits are linked to his Paypal account.