r/audiophile • u/shunte88 • 2d ago
Discussion Step into the light, all are welcome - AKA I built an open-source vinyl capture tool and fell down a hole about pre-RIAA EQ curves
Hi, my first post here so be kind 😄 and a note to the mods - this post is about free software, MIT licensed, and non-commercial; it's free and open-source that was built with my love of audio, and the promotion of the same. Please don't delete.
I've been working on a free open-source vinyl capture solution, it is bit-perfect capture and encoding on all platforms Linux, macOS, and Windows - VCW, a vinyl capture workstation.
I am posting because of one part of it that turned out far more interesting than I expected, and I would like to hear from people who know more about it than I do.
The curves
If your record was cut after roughly 1955, your phono stage is correct and you can skip this bit, er - no not the correct term there for sure 😄. If the record was cut before that, it probably was not cut to RIAA. Columbia, Decca, EMI, NAB, AES and others each had their own characteristic. Play one back through a RIAA stage and you get the wrong tonal balance, usually a few dB out at both extremes.
Plenty of hardware and software can apply these curves. What I could not find anywhere was agreement on what the numbers actually are. So I worked them out from the published sources. The tool now carries sixteen curves, each with a citation to where its parameters came from and a note recorded wherever the sources disagree.
Some of what fell out of that:
- A lot of published tables quote "dB at 10 kHz" for the treble section alone, not for the complete curve. Columbia LP is widely listed as -16 dB. The complete curve reads -15.54 dB. Read the table as the whole curve and you are wrong before you start.
- NAB references 0 dB at 700 Hz, not 1 kHz. Every value in an NAB table is offset by 1.488 dB from everybody else's.
- A trailing "-0" in a curve code means there is no treble network at all. It does not mean 0 dB of treble. Three curves in common tables are like this and all three get misread.
- EMI and HMV are the same curve (Blumlein, 531 us turnover, no shelf, no rolloff). HMV then splits on a date: English HMV 33s cut after mid-July 1953 use the Columbia LP characteristic instead.
- The "Decca 640 us / 53 us" curve that circulates online appears to be fictitious, a misreading of where a published graph leaves flat, taken for time constants. Decca's 78 characteristic and its post-1950 LP characteristic are two different real curves.
- One row in a widely copied published table (RCAÂ 45) has an arithmetic slip in it that has since propagated. The same page computes the equivalent row correctly two lines above.
The filter
Applying the EQ correctly at 44.1 kHz is harder than it looks, because the correction has to stay accurate right up against Nyquist. A straight bilinear transform of RIAA is 13.5 dB out at the top of the band at 44.1 kHz. Matched-z gets that to 3.1 dB. Fitting one extra pole and zero pair gets it to 0.078 dB worst case across 20 Hz to 20 kHz. That last one is what ships, and the conformance figure is measured in the test suite at all six rates from 44.1 to 192 kHz, so a regression fails the build rather than quietly sounding slightly wrong.
The EQ curve is never baked into the capture. Any post-processing performed is applied non-destructively. The EQ curve is a stored decision that is then applied on audition, on render and on export, and the exported files carry a tag saying which curve was used and whether it was actually applied. If the tool cannot establish a bit-perfect path it says so rather than claiming one.
Honest status
This is an alpha release, and it says so. Capture, track detection, metadata lookup, crash recovery and export (WAV, AIFF, FLAC, ALAC, MP3, Ogg Vorbis) all work and I use it on my own records. Capture-path verification has only been done on Linux x86_64 so far. The Mac and Windows builds exist and run, but I have not yet validated a recording device on either, so treat those as experimental.
Repo, releases and the full write-up on the curves: https://github.com/shunte88/vcw
What I would most like back: if you have pre-RIAA records and a source for a curve I have wrong, or one I am missing entirely, would you please share it with me. And, equally happy to be told my DSP is wrong.
Folks using macOS or Windows - give the solution a spin and let me know what you find
1
u/philipb63 1d ago
Fantastic write up!
1
u/shunte88 1d ago
thanks much, hopefully you'll check it out and find it useful - all feedback welcome when you step into the light 😃
2
u/rankinrez 1d ago edited 1d ago
You should probably over-sample on the EQ stage to avoid the Nyquist/aliasing problems you mention due to the high frequency of the top curve.
Other than that looks cool. What hardware is best for this? I expect any AD with a line level input will perform badly due to level mismatch, perhaps something for mic level works ok?
One thing I typically do after recording is normalise levels. Easy to do manually, harder to automate (esp. if there are any loud pops an automated system might confuse with the music and thus set the threshold too high).