H(ω)Tone

OVERVIEW

What it does

H(ω)Tone improves the quality of digitally recorded music by applying precision equalization profiles derived from audio recordings with more desirable tonal qualities. This is a proof-of-concept application whose technology can be integrated into a software plugin or a hardware solution.

H(ω)Tone is used in post-processing when re-recording is not an option. The application captures the tonality of a high-quality recording and applies it to a target track, giving the target track a matching high-quality tonality. The tonality of the high-quality recording is represented by a transfer function H(jω), and this is applied to the target track via convolution. The transfer function is essentially an equalization profile.

H(ω)Tone has been successfully used in rhythm guitar tracks on two songs from the Electric Fez: Project A’ EP. (See the EP’s Track Credits for song details and listen to each one on the web page).

(Note that the accurate notation for the transfer function is H(jω) and not H(ω) which, although makes for a better logo, denotes only the frequency-dependent gain of the transfer function.)

Advantages

Ideally, the transfer function would be derived from an impulse response of the desired sound.

However, there are two limitations to this approach:

1. Often, an impulse response will have elements in the signal chain which are already present in the recording that we wish to treat, e.g. a microphone. Simply convolving such an impulse response would add the response of another microphone into the convolution, thus diverging from the desired tonality.

2. If we wish to emulate a desired sound as it appears on a professional recording (in other words, we wish to get to the end result) we would have to incorporate all the tonal characteristics of the instrument used, along with the equalization implemented on that instrument in the studio, apart from the equipment and environment modeled by impulse responses.

H(ω)Tone overcomes these two limitations by directly using clips of the reference track whose tonality is to be captured.

HOW IT WORKS

In the following example a recorded electric guitar part was used.

1. Load Reference clip
By pressing the “Load Reference” button we load a clip of a desired guitar sound.
The clip can be played by pressing the “Load Reference” button.

2. Load Subject clip
By pressing the “Load Subject” button we load a clip of the guitar track that we wish to modify.
The clip can be played by pressing the “Play Subject” button.

3. Load Target track
By pressing the “Load Target” button we load the entire guitar track that we wish to modify.
The part can be played by pressing the “Play Target” button.

Note: Because we are not using impulse responses, we must ensure that our part is playing exactly what the reference clip is playing i.e. same notes, chords etc. When a playing match is achieved the overall spectral maxima and minima are matched as well. This will have the effect of “de-trending” the derived envelope, i.e. removing the specific note or chord while retaining the curve which accounts for the tonal differences between the reference and the subject clips. This effectively becomes an impulse response which can be applied to an entire track. (A future improvement to H(ω)Tone will be the addition of a pitch transposer, which will remove necessity of tuning to the reference clip.)

4. Adjust the window size and time indices of subject and reference clips.
Regardless of the respective sizes of the reference and subject clips, the transfer function itself requires a common number of samples between both clips. The “Ref. Window Size” denotes the size of subset of the clips (in samples) which will be used in its derivation. The time indices of both reference and subject clips can be adjusted using the “Ref. Time Index” and “Sub. Time Index” respectively. Again, the units displayed are samples. An image of each clip is shown with a set of vertical bars denoting the beginning and end of each window.

5. Select stereo channel combinations
Pressing one of the radio buttons under “Ref. Channels” and “Sub. Channels” respectively will select the stereo channel(s) to be used in generating the transfer curve.

6. Enter Zeros and Poles of Transfer Function
The application will generate a linear phase (FIR) transfer function if 0 poles are entered. While an IIR response is available, it produces audible phase cancellations typically resulting in an unpleasant sound. In this example, 1024 zeros (and 0 poles) gave a more audibly pleasing result.

7. Generate the Transfer Function H(jω)
Press the “Generate Transfer” button to generate the transfer function and apply it to the entire track.

You can listen to the modified track by pressing the “Play Convolved” button.
Also, you can compare the frequency response of the new clip with that of the reference clip by viewing their respective curves at the bottom of the application.

LISTEN TO THE RESULTS

Click on the play buttons to hear each clip.

Example 1

Subject clip (the sound we currently have)

Reference clip (the sound we want)

Transfer curve applied to Subject clip (the result)

The parameters used were as follows:

Ref. Time index=1230 samples
Sub. Time index=838 samples
Window Size=16457 samples
Zeros=1024, Poles=0

Clip of raw (unprocessed) subject track

Transfer function applied to subject track (the result)

Example 2

Subject clip (the sound we currently have)

Reference clip (the sound we want)

Transfer function applied to Subject clip (the result)

The parameters used were as follows:

Ref. Time index=0 samples
Sub. Time index=5371 samples
Window Size=10815 samples
Zeros=1024, Poles=0

Clip of raw (unprocessed) subject track

Transfer curve applied to subject track (the result)

Example 3

Subject clip (the sound we currently have)

Reference clip (the sound we want)

Transfer function applied to Subject clip (the result)

The parameters used were as follows:

Ref. Time index=472 samples
Sub. Time index=3166 samples
Window Size=14193 samples
Zeros=1024, Poles=0

Clip of raw (unprocessed) subject track

Transfer function applied to subject track (the result)