There are three sound quality issues with all the audio CDs in my music collection.
-
There is always a timing offset between the left and right channels, that varies from CD to CD.
-
The amount of group delay always differs between the left and right channels, and the amount of difference varies from CD to CD.
-
When there is a difference in balance between the left and right channels, the quieter channel may sound louder if it is the channel that arrives sooner.
For the past six years, I have been using the PHA-979 from Voxengo to address these three issues. From left to right, my most-used controls are:
- Separate delay lines for the left and right channels
- Separate all-pass filters for the left and right channels
- The pan/balance control
I would prefer to have the delay lines and the pan control adjacent to each other, because of their psycho-acoustic relationship. The PHA-979 includes a 32-band correlometer which provides useful feedback about the timing between the left and right channels. I would like to develop a component that analyzes the amount of correlation for the user of the application and presents the data with 1-3 meters instead of 32.
With the PHA-979, each channel’s control for the all-pass filter consists of a single dial. Rotating the dial counter-clockwise from center provides up to 90 degrees of inductive phase shift. Rotating the dial clockwise from center provides up to 90 degrees of capacitive phase shift.
For years, I have wanted to work with all-pass filters that have an adjustable center frequency, and with the current version of JUCE this is finally a reality. I want to experiment with chaining all-pass filters, using instances of IIRFilterAudioSource
, but as a newbie to JUCE and C++, I don’t know how to do this yet.
Can anyone recommend cookbook examples of how to chain instances of
IIRFilterAudioSource
?