Hammer Filters

The hammer filter coefficients are derived from several parameters defined in the pianoDriverA subpatch. The coefficients also depend on the incoming note velocity, normalizedVelocity. This parameter is routed through a lookup table which performs velocity warping. Stephen had noticed that the result of the velocity warping was incorrect. As a workaround, he assigned normalizedVelocity a value of 1.0 regardless of the incoming note velocity. What he may not have seen is that that the table lookup filter is turned off; something I only noticed using trace information. As a result, normalizedVelocity remains unchanged. The parameters overallGain and BrightnessAdjustment were also incorrect. These are actually slider parameters in the PianoControlPanel subpatch. I added these control parameters to the algorithm and matched them with the default slider values. When comparing the incoming filter coefficients with the trace information, I noticed that the rearticulation logic copied from BrandNewThump.c does not apply to simple noteOn, noteOff messages, and thus produced incorrect pole positions. Once fixed, I compared the output of the filters when applied to white noise. With the proper parameters, the waveform amplitudes and frequency spectrum for each octave were precisely matched, as seen in Fig. 6. The increased filter gain makes the soundboard more present in the synthesis and consequently the algorithm sounds much more like a piano.
Figure 6: Output of the linearized hammer filters applied to 0.05 amplitude noise. Top: SynthBuilder recording, bottom: STK implementation.
Image hammerPatch_a0-a7_0dot05noise
Image hammerfilt-a0-a7_0dot05noise

Sebastian Laguerre 2018-12-08