--emphasis DB is an upper-band shelf, centered at the lesser of 1 kHz and one quarter of the output sample rate. --rumble-cut HZ is a two-pole high-pass with Q = 1/sqrt(2), approximately 12 dB/octave and −3 dB at the cutoff. Both default to zero/off. FFmpeg's treble and highpass filters perform the processing; no Python dependency or C64 routine is added.
After the existing anti-alias resampling, the optional high-pass runs first, then emphasis, then a single final gain adjustment. EQ runs in double-precision floating point, including values above 0 dBFS internally, before conversion to 16-bit PCM. Peak normalization is on by default and uses the configured --maximize-level target (−0.1 dBFS by default). --post-normalize / --normalize-after explicitly enable the same behavior, before quantization; they cannot be combined with --no-maximize. --no-maximize instead keeps unity gain unless constant attenuation is necessary to avoid clipping. There is no compressor, dynamic limiter, vocal separator or interior noise gate.
RAW, PRG and streaming CRT reports retain analysis.processing, along with source/processed levels and quantization statistics. With both filters disabled the original PCM path is preserved. Legacy modules and player binaries are unchanged.
A four-bit amplitude quantizer has 16 levels across the entire mixed waveform; it does not allocate separate bits to bass and vocals. Large low-frequency excursions can set the peak-normalization ceiling, leaving smaller components poorly resolved. Reducing bass before quantization can change that balance, but the result depends on peaks and phase as well as average band energy. It is not guaranteed to improve overall signal-to-quantization-error ratio.
In the supplied music smoke test, approximately 47.6% of mono energy was below 150 Hz, 34.0% was in 40–80 Hz, and only 0.35% was below 40 Hz (Welch PSD, 48 kHz, 32768-sample windows). These are whole-mix power proportions, not measurements of isolated vocals or intelligibility. A 40 Hz high-pass is a modest cleanup; 80 Hz also cuts substantial musical bass. Its response is gradual, so it affects frequencies above the nominal cutoff too.
The default 4 kHz conversion retains at most a 2 kHz baseband, with a nominal −6 dB anti-alias cutoff near 1.88 kHz for the SW resampler's configured cutoff of 0.94. Upper consonant detail is already lost at that stage. See FFmpeg resampling parameters. Raising emphasis cannot restore discarded frequencies. Eight kHz PRGs provide a useful short-excerpt comparison; streaming CRT playback remains limited to 4 kHz until its timing is separately improved and validated.
For this full music sample, the unfiltered four-bit signal-to-quantization-error ratio was 14.83 dB. It was 12.59 dB with 6 dB emphasis and 12.61 dB with emphasis plus a 40 Hz cut, each using the default peak target. This compares each quantized result to its own prepared PCM, not to the original mix. The brightness change is not a general fidelity increase. Matching playback volume helps judge whether the changed balance is worth the noise and bass tradeoffs.
Pex “Mahoney” Tufvesson's Cubase64 White Paper describes a different architecture:
- Pages 2–3: approximately 7.8 kHz sample output using oscillator TEST-bit/triangle techniques, with strict timing and VIC-II bus-stealing constraints.
- Pages 4–6: a voice-oriented waveform/formant representation, interpolation and precomputed multiplication tables, rather than a linear stream of four-bit mix samples.
- Page 7: separate oscillator-generated sub-bass, SID analog EQ, and noise that the author explicitly distinguishes as colored masking noise rather than conventional digital dither.
Those are useful design lessons, not drop-in calibration settings for our player. In particular, the paper's volume multiplication tables are not a measured correction curve for every 6581/8580 volume DAC. Its advertised upper-frequency content should not be read as ordinary full-band PCM sampled at 7.8 kHz. We thank Mahoney for the explanations, inspiration and continued work on C64 music. No Cubase64 code or tables are incorporated in this EQ update.
Our player writes sample codes 0–15 to $D418. It does not route an audio stream through Cubase64's oscillator sample-and-hold path or enable the SID's selectable filter modes. The 8580 profile initializes all three voices to a steady mixer bias using $19 control values and full sustain; the 6581 profile uses native volume-register response. That setup affects level and distortion, independently of offline EQ. GATE is a register control bit, not a PCM loudness threshold; see the MOS 6581 datasheet.
An additional ten-second test of the uploaded cartridge's exact sample codes used ideal periodic writes at the PAL timer's 246-cycle period, reSIDfp/pyresidfp 0.17.0, and 48 kHz rendering:
| Model and initialization | AC RMS before listening gain |
|---|---|
| 6581, 6581 profile | −25.79 dBFS |
| 8580, 8580 bias profile | −26.94 dBFS |
| 8580, without bias | −42.82 dBFS |
The 8580 bias changes this model's output by about 15.9 dB. The values use the renderer's digital scale; they do not specify real-machine voltages or a universal model-to-model loudness ratio. These renders simulate steady periodic register writes; they do not include fresh CPU/bank/VIC execution or prove cartridge timing. The separately delivered listening files are AC-RMS-matched to compare character, and their JSON records the gain needed.
The uploaded CRT already selects the 8580 profile. That makes missing bias an unlikely explanation when it is played with a matching standard 8580 emulator configuration. Board coupling, individual chips, emulator filters and recording paths can still change the sound. A recording of the user's actual output is needed to measure those additional effects. Earlier timing and hardware-model checks remain documented in PIPELINE_AUDIT.md.