• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Test CD for measurements of CD Players

If I understood/read the reason for this symmetrical file correctly then it is that you got distortion before. But that must have been a fault in the generator. The asymmetrical full scale 16 bit signal would not show distortion at all - the difference positive/negative is too small in the 16 bit domain.

Adding a proper full scale test signal makes sense to test that this valid (!) signal is processed correctly. It also might be useful for other tests. For example it is possible that units with level meters use only that +32768 part to light up the Over LED (instead of the other method of counting consecutive three +-32767 samples). So IMHO it makes sense to add this full scale signal.
Thanks for the suggestion! And you are right. As shown above and from the discussion with @AnalogSteph which originated this decision, it was in fact to avoid low level distortion with shaped dither. And so I stayed with that lower amplitude with all test tones.
I understand the purpose of the test and it’s a miss with the current Test CD, so I can revert to full amplitude except for test tones with shaped dither. I think it’s only 3 files to update.
Thanks again!
 
Nice to get a test CD. I have a Cambridge Azur 640C in the closet, but I wonder if there are interests to see any performance of these older units.
 
Last edited:
Absolutely, because it uses the Wolfson WM8740, same as the Orpheus Zero that I reviewed and I’d be interested to see the difference ;)
If time permits, I might give it a try.
 
  • Like
Reactions: EJ3
It seems an Audacity sine tone (999.91Hz) created with amplitude=1 uses the full range (compared to the flac sine tone created with Sox by @danadam):

1730634401248.png


It looks like I'm good to update couple of files.
 
Even though I well understand this post would be a little bit out of the scope from OP @NTTY's main objective (i.e. Test CD for measurements of CD Players), now I would like to share the following information in this post, of course after having very nice PM communication and discussion with OP @NTTY.

OP @NTTY kindly gave me his permission and consent on my sharing this post with all of you visiting this exciting thread.

Just for my personal curiosity, I analyzed all the intact 18 tracks (44.1 kHz 16 bit wav files) in his latest Test-CD ver.7.1.01 by MusicScope 2.1.0 (PDF attached below), and I also analyzed several tracks thereof by ADOBE Audition 3.0.1.

Here in this post, I focus my attention on the top two sine sweep tracks:
Track-01: 01A_256kMeasSweep_1_to_22050_-12dB_LR_refL.wav
Track-02: 02A_256kMeasSweep_1_to_22050_-12dB_LR_refR.wav

First, I analyzed Track-01 by MusicScope 2.1.0;
WS735.JPG


Then, analyzed by ADOBE Audition 3.0.1;
WS734.JPG


Next, I analyzed Track-2 by MusicScope 2.1.0;
WS733.JPG


Then, analyzed by ADOBE Audition 3.0.1;
WS732.JPG


For my reference purposes, I analyzed Track-9 "Frequency Check-2 Sweep Sine Wave 20Hz to 20kHz" of SONY SUPER AUDIO CHECK CD 48CDG3 (1983) (ref. here #651 on my project thread) by MusicScope 2.1.0;
WS731.JPG


Then analyzed it by ADOBE Audition 3.0.1;
WS730.JPG


I also analyzed Track-13 "Sound Space Quality Check by Warble Tone Scanning" of SONY SUPER AUDIO CHECK CD 48CDG3 (1983) by MusicScope 2.1.0;
WS729.JPG


Then, analyzed it by ADOBE Audition 3.0.1;
WS728.JPG



Upon play-and-listening to @NTTY's Track-1 (Fig. 01 and Fig.02) as well as to Track-2 (Fig. 03 and Fig.04), we can hear simple short (5.5 sec) sine sweep tone with top and end very short reference (timing marker?) high-Fq-sweep on L-Ch and R-Ch, respectively.

As you can clearly observe in Fig.01 and Fig.03, however, the Fq-SPL spectrum shows that the sine sweep is not simple-smooth sweep but it is (FM modulated) Fq-warbled sweep all over 10 Hz - 20 kHz. We should note, therefore, this means if you measure-observe the air recorded sound in expanded time scale, you will see the Fq-warbled SPL spectrum/curve, not a simple smooth Fq-SPL spectrum/curve, using @NTTY's Test-CD 7.1.01 Track-1 and Track-2.

On the other hand, the Track-9 "Frequency Check-2 Sweep Sine Wave 20Hz to 20kHz" of SONY SUPER AUDIO CHECK CD 48CDG3 (1983) shows (Fig.05 and Fig.06) simple smooth 20 Hz - 20 kHz sine sweep spectrum spread over rather long 150 sec (2 min 30 sec); of course we can hear smooth sine sweep tone.

The intentionally Fq-warbled Track-13 "Sound Space Quality Check by Warble Tone Scanning" of SONY SUPER AUDIO CHECK CD 48CDG3 (1983) shows (Fig.07 and Fig.08) the warbled Fq all over 20 Hz - 20 kHz sweep spectrum spread over rather long 150 sec (2 min 30 sec); and we can clearly hear the Fq-warbled sweep tone.

My next question was/is that what would be SONY's intention and/or objective (in 1983!) for preparing and including the Track-13 "Sound Space Quality Check by Warble Tone Scanning" in their SUPER AUDIO CHECK CD 48CDG3.

I (again!) carefully read the liner notes (booklet) of the attached PDF (English translation by myself), and re-discovered very interesting description and guidance on using the Track-13 "Sound Space Quality Check by Warble Tone Scanning" for room mode tuning which can be done by many people who did not (do not) have any advanced measurement tools (like REW and others) in the era of 1980s (and nowadays, also).

The interesting description and guidance on Track-13 can be found under this spoiler cover;
Track-13: Room acoustic check: wobble tone scan
Acoustic transmission characteristics can be checked/measured by using 1. pink noise and spectrum analyzer, 2. signal with sound energy at specific frequency area such as band noise or wobble tone, and sound-level meter.

Wobble tone is the FM modulated sine wave which has periodically oscillating frequency spectrum in specific frequency region. This track consists of 20 Hz - 20 kHz sine wave of 50 s/dec log-sweep with 6.3 times/sec +/- 16Hz FM modulation. The elapsed time and center frequency are in the same correlation as shown in Figure-1 for Track-9.

Now let’s check transmission characteristics of your listening room using this wobble tone signal Track-13.

1. Prior to the measurement, you need to apply the linearity check signal (Track-6) and frequency check signal (Track-8) into your recorder to know the frequency and linearity deviations, so that the level meter can be used as convenient level meter.

2. Now you may play the band noise or wobble tone to be recorded by microphone and recorder as simple level meter.

3. You can measure the transient characteristics. Read the level value from the meter when the frequency at which the deviation of the level meter is known and the center frequency of each signal match and plot it on the graph. The obtained characteristics represent the transmission characteristics, including the respective characteristics, between speaker and microphone.

The transmission characteristics obtained by this simple method depend on the equipment used, but in general it is better to consider that the result is effective only below 10 kHz.

Even if you check the transmission characteristics with your own ears, the wobble tone seems to be easier to understand than the band noise. The mid-high range is particularly easy for the human ear to hear, so it may sound strong, but generally all bands should feel at the same level. It is a problem if there is a strangely jarring sound in the mid-low range or high range. If the low range is too high, try the following measures.
1. Raise the speaker from the floor, place it on a block, etc.,
2. Move the speaker away from the wall,
3. Put a low-frequency transparent wall like a bran behind the speaker,
4. Move your listening position away from the wall,
5. Lower the level of the woofer.

If the low range is insufficient, do the opposite. If there are mountains and valleys in the midrange, the sound may be jarring, or it may be a consonant or jarring voice. In this case, you may try;
1. Eliminate parallel surfaces on the wall,
2. Reduce the apparent parallel planes between the furniture so that sound is dispersed,
3. Curtains and carpet also suppress reflections.

If the high range is raised,
1. Absorb high notes with thick curtains and carpet,
2. The soft furniture on the surface diffuses and absorbs; generally it's better to be “live” around the speaker, and “dead” around the listener,
3. Lower the level of the tweeter.

Do the opposite when you run out of high frequencies.
As for furniture, usually vinyl, leather, etc. are better than cloth.
 

Attachments

  • SONY Super Audio Check CD_ Booklet_English by dualazmak_rev04.pdf
    2.3 MB · Views: 32
  • 20241102_TNNY_Test-CD_ver7_1_01___analyzed_by_MusicScope_2_1_0.pdf
    2.5 MB · Views: 30
Last edited:
Note that the first two tracks are REW specific (the only ones) and they indeed include a ref level sine tone on right or left channel for REW to sync to the upcoming test. Find more information in REW’s user guide (file playback measurement).

I use Tracks #01 and #02 mainly for THD vs Frequency measurement @-12dBFS which reveals weaknesses of older CD players (their DACs). They can also be used for FR and phase analysis after calibration of the input interface (not ideal though).
 

Creating 16-bit sine waves reaching from +32767 to -32768 in Audacity for dummies​

Audacity version used: trusty old 2.1.3 (I have been slow to update as some UI changes have been infuriating, e.g. I'm switching between linear and dB waveform view all the time)

0. Settings
Settings:
Quality - Default sample format: 32-bit float, Dither for high-quality conversion: None
Interface - Meter dB range: 120 or 145 dB

Project sample rate: probably 44100 Hz since you're here

1. Generate -1/2 LSB offset
Generate - Tone: Square, 1.0 Hz (silly arbitrary lower limit), amplitude 0.152588, length less than 0.5 seconds (~22050 samples).
Select the initial part of the waveform section that's entirely at +1, trim waveform.
Effects - Invert.
Edit - Duplicate, enter a number high enough to get you safely above 1 minute or whatever length you want.
Join sections (Ctrl-J), trim to desired length
Effects - Amplify: -40 dB, twice
You should now have a small negative DC offset displayed at -96.33 dB.

2. Generate sine
Select nothing, cursor at 0 s.
Generate - Tone: Sine, desired frequency (like 1000.03 Hz or 1000.045777 Hz), amplitude 0.999985
If you want to add dither later, try reducing amplitude to 0.999954 (rectangle, see note) or 0.999655 (shaped).
Note: I always thought dither amplitude for rect / triangular dither was a bit low, adding 0.000023 to max amplitude means that's maybe 3/2 LSB p-p and I think it should be about twice that... That seems to be equivalent to selecting 1.0 lsb in mda Dither for Foobar2000. The fact that applying this dither to silence gives 16-bit digital silence output should be kind of a hint that it's not actually sufficient. You can, incidentally, make the 1.0 lsb dither appear in person by including a -0.5 lsb DC trim (which effectively halves the threshold) - but if your noise floor is influenced by what amounts to DC offset (which might just as well be in the signal itself), that also is a major red flag indicating that you have not actually (fully) turned correlated quantization noise into uncorrelated white noise.
The recommended 0.999954 amplitude is for mda Dither generating 16-bit triangular PDF dither with a 2.0 lsb amplitude, no DC trim.

3. Downmix and export
The rest is not terribly hard:
Select both your offset and your sine track.
Tracks - Mix and render to new track.
Ta-dah, you should now have a float32 version of the track you want. You can now export it as a 16-bit WAV for the undithered version. You can also export as float and dither using e.g. Foobar2000's converter with the mda Dither DSP externally.
 
after conversion to WAV with Audacity (not sure of the potential negative impact of that and more so after reading the post of @AnalogSteph above),
...
Can you create directly in WAV format? I can't use a flac file from REW of Multitone.
Audacity conversion should be fine, as long as dither is set to None. If you use foobar2000 you can verify if the content is the same using its bit comparator or even convert FLAC to WAV in the first place.

But sure, I can generate WAV, just tell me how long it should be, mono or stereo and length of fade in/out (if any).

It seems an Audacity sine tone (999.91Hz) created with amplitude=1 uses the full range (compared to the flac sine tone created with Sox by @danadam):
Depends how much OCD do you want to be about it :). Technically the Audacity version will be slightly clipped. If you load the file back, invert and mix with the generated waveform you'll see that the error at some peaks is twice as large as in the rest of the samples:

audacity_999.91_1.0.png


Note: I always thought dither amplitude for rect / triangular dither was a bit low, adding 0.000023 to max amplitude means that's maybe 3/2 LSB p-p and I think it should be about twice that
Rectangular dither is adding random values in +/-0.5 range (in +/-32768 scale), so it needs 0.000023 headroom (in +/-1.0 scale). Triangular dither is adding random values in +/-0.5 range twice, so it needs twice that.

The fact that applying this dither to silence gives 16-bit digital silence output should be kind of a hint that it's not actually sufficient.
But that's one of the properties of rectangular dither, that it doesn't add noise to digital silence (and in general, that the produced noise level is dependent on the signal level). If that's desirable depends on situation, I guess. It is sufficient though, AFAIK, to remove distortion:
Furthermore,
uniform or rectangular PDF (RPDF) dither of width ∆,
although it does eliminate all distortion, does not prevent
noise modulation, and is not recommendable for high-
quality digital audio (and RPDF dither whose width is not
an integer multiple of ∆ eliminates neither the distortion
nor the noise modulation).
(from "Pulse-Code Modulation - An Overview" by Stanley P. Lipshitz and John Vanderkooy, in JAES Vol. 52 No. 3, 2004 March)
rectangular.dither.png

Oh, it's a bit unclear to me if you included Audacity's triangular dither in the above, but it does produce white noise when applied to digital silence.
 
Rectangular dither is adding random values in +/-0.5 range (in +/-32768 scale), so it needs 0.000023 headroom (in +/-1.0 scale).
Apropos OCD ;) ...

I was getting uncertain where this 0.000023 came from actually. In order to strictly not cross +/-32767.0 in Audacity you need:
  • (2^15 - 1) / 2^15 = 0.999969, without dither
  • (2^15 - 1 - 0.5) / 2^15 = 0.999954, with rectangular dither
  • (2^15 - 1 - 2*0.5) / 2^15 = 0.999938, with triangular dither
and if we allow up to 32767.5 and treat the resulting 0.5 error as quantization error and not clipping, then:
  • (2^15 - 0.5) / 2^15 = 0.999984, without dither
  • (2^15 - 0.5 - 0.5) / 2^15 = 0.999969, with rectangular dither
  • (2^15 - 0.5 - 2*0.5) / 2^15 = 0.999954, with triangular dither
The only place where 0.000023 fits is that it is half of the headroom in 0.999954 case but I'm not sure what could be the meaning of this.
 
Last edited:
To my understanding, Audacity's rect dither is actually supposed to be white TPDF dither (like mda Dither with setting Triangular PDF, dither amp = 1.0 lsb). It just doesn't have enough amplitude. Although with some further testing, it seems to behave much like indicated for amplitude 1.0 lsb RPDF dither, including preserving signals to impressively low levels. Triangular is TPDF dither with 1st-order noise shaping and a ~linear increase of amplitude with frequency (like mda Dither's "High Pass Triangular PDF", but with an amplitude of 2.0 lsb this time, so that actually seems sufficient).

and if we allow up to 32767.5 and treat the resulting 0.5 error as quantization error and not clipping, then:
  • (2^15 - 0.5) / 2^15 = 0.999984, without dither
  • (2^15 - 0.5 - 0.5) / 2^15 = 0.999969, with rectangular dither
  • (2^15 - 0.5 - 2*0.5) / 2^15 = 0.999954, with triangular dither
s/rectangular dither/amplitude 1.0 lsb RPDF dither
s/triangular dither/amplitude 2.0 lsb TPDF dither
Plus, Audacity's "Shaped" dither seems to have an amplitude of up to 20 lsb (~0.000305), leaving 0.999679.
With Foobar's shaped dither I've seen up to 0.001099 peak or an amplitude of 72 lsb (though more commonly 0.001038 = 68 or 0.001068 = 70 lsb), leaving 0.998886.

Also, we can in fact go up to 32767.5 and apply a -0.5 lsb DC offset as outlined above, then the signal will occupy the full +32767 to -32768 range and not clip.
 
Audacity conversion should be fine, as long as dither is set to None. If you use foobar2000 you can verify if the content is the same using its bit comparator or even convert FLAC to WAV in the first place.

But sure, I can generate WAV, just tell me how long it should be, mono or stereo and length of fade in/out (if any).
Thank you!
30sec would be perfect, no fade in/out, stereo.
Thanks in advance.

Depends how much OCD do you want to be about it :). Technically the Audacity version will be slightly clipped. If you load the file back, invert and mix with the generated waveform you'll see that the error at some peaks is twice as large as in the rest of the samples:

View attachment 403937
I’ll sure play with that.

Also, we can in fact go up to 32767.5 and apply a -0.5 lsb DC offset as outlined above, then the signal will occupy the full +32767 to -32768 range and not clip.
And with that too :p
 
Last edited:
To my understanding, Audacity's rect dither is actually supposed to be white TPDF dither (like mda Dither with setting Triangular PDF, dither amp = 1.0 lsb).
Hm... I've never had that understanding. AFAIR I compared SoX, ffmpeg and Audacity dithers at some point in the past and Audacity rectangular was the same as ffmpeg rectangular and they both removed quantization distortion and had modulated noise floor. There wasn't any reason for me to mistake it for low-amplitude triangular.

Btw, here's Audacity implementation: Dither.cpp:336, DITHER_NOISE() (Dither.cpp:76) returns random value between -0.5 and 0.5.

And it's the same in 2.1.3 (Dither.cpp:356), only DITHER_NOISE is a macro instead of a function.

Although with some further testing, it seems to behave much like indicated for amplitude 1.0 lsb RPDF dither, including preserving signals to impressively low levels.
Something I made in the past (it's ffmpeg dither though, not Audacity):
ffmpeg_triangular_vs_rectangular.gif


Triangular is TPDF dither with 1st-order noise shaping and a ~linear increase of amplitude with frequency (like mda Dither's "High Pass Triangular PDF", but with an amplitude of 2.0 lsb this time, so that actually seems sufficient).
To me that's "sloped" triangular dither, as SoX manual calls it. I always thought of it as a normal triangular with this one "weird" trick in the implementation :) (instead of generating 2 random uniformly distributed values for each sample, generate only 1 and re-use the random value generated for the previous sample, as also seen in Audacity implementation in the earlier link).
 
Last edited:
Hard to argue with the code.

For fun, I compared a -120 dB 1 kHz sine with and without a -0.5 lsb DC offset applied and rectangular dither by ear after amplification. You can make out the sine a bit more easily without offset, but what the spectrum doesn't show you, the noise sounds pretty crackly.
 
Something I made in the past (it's ffmpeg dither though, not Audacity):
View attachment 404180
I saw the same on my low level test tones recently, as I started using rectangular dither from Audacity. I thought I potentially made an error, but obviously no. Thanks, one less issue ;)
 
Apropos OCD ;) ...

I was getting uncertain where this 0.000023 came from actually. In order to strictly not cross +/-32767.0 in Audacity you need:
  • (2^15 - 1) / 2^15 = 0.999969, without dither
  • (2^15 - 1 - 0.5) / 2^15 = 0.999954, with rectangular dither
  • (2^15 - 1 - 2*0.5) / 2^15 = 0.999938, with triangular dither
and if we allow up to 32767.5 and treat the resulting 0.5 error as quantization error and not clipping, then:
  • (2^15 - 0.5) / 2^15 = 0.999984, without dither
  • (2^15 - 0.5 - 0.5) / 2^15 = 0.999969, with rectangular dither
  • (2^15 - 0.5 - 2*0.5) / 2^15 = 0.999954, with triangular dither
The only place where 0.000023 fits is that it is half of the headroom in 0.999954 case but I'm not sure what could be the meaning of this.
OCD The Sequel...

I created several 999.91Hz tones with Audacity project set at 44.1kHz/16bits, and realized that any tone created from amplitude 1 down to 0.999955 showed clipped samples (Audacity Menu -> View -> Show Clipping in Waveform). With Amplitude = 0.999954, no clipping.

So I kept two test tones, with Amplitude = 1 and Amplitude = 0.999954.
To these two, I applied 8x resample (Audacity Menu -> Tracks -> Resample -> 352800).

Here below are the results (Clipping showed in red, as I got):

Clipped_Resample.jpg


I'm still to decide which one I prefer for my pseudo-1kHz pseudo-0dBFS test tone :)

I suppose I need to test them in an actual CD player (maybe more than one, actually).
 
I created several 999.91Hz tones with Audacity project set at 44.1kHz/16bits, and realized that any tone created from amplitude 1 down to 0.999955 showed clipped samples (Audacity Menu -> View -> Show Clipping in Waveform). With Amplitude = 0.999954, no clipping.
"Show Clipping" option in Audacity shows clipping whenever a sample value: v >= MAX_AUDIO or v <= -MAX_AUDIO

MAX_AUDIO is defined as 1. - 1./(1<<15) which is 0.999969.

When the project is set to 16-bits and you generate a tone with 0.999955 amplitude, then what happens is:
  • 0.999955 corresponds to 32766.52544,
  • which is rounded to 32767,
  • which corresponds to .999969
  • and is marked as clipped
With 0.999954 amplitude:
  • 0.999954 corresponds to 32766.492672
  • which is rounded to 32766
  • which corresponds to .999939
  • and is not marked as clipped
 
Back
Top Bottom