Product: WaveLab Elements 8.0.4 (32-bit)
WaveLab Master Section turned off.
Audio Interface: Focusrite Scarlett 6i6/ASIO
Byte ordering in this discussion will be big-endian.
When recording a 24-bit session of a 16-bit PCM stream being fed to the Scarlett 6i6 via SPDIF in, I am getting recorded samples that have a least significant byte (LSB) = 0x01 on samples with a negative value (below center axis). For samples with a positive value, the LSB is always = 0x00. See below for an example. All samples should have a LSB = 0x00 according to Focusrite support. I think that this error is manifesting in the WaveLab software as this does not happen with Ableton Live.
The Focusrite’s interface to the DAW is always 24-bit. Focusrite tech support has advised that when 16-bit PCM is fed into the SPDIF in of the 6i6, that the interface will left shift the samples and zero fill the LSB with a 0 byte so that it can be transferred as a 24-bit sample.
The issue was discovered as I was recording a session at 16-bit and discovered that the recorded samples did not match the samples in the SPDIF PCM stream. So I redid the recording as a 24-bit session and examined the saved samples. When 24-bit samples are having the LSB set to 0x01, and the session is recorded as a 16-bit session, or recorded as a 24-bit session and saved as 16-bit, the saved samples are skewed by -1 as a resultant of WaveLab’s word length reduction algorithm. At first I thought the issue was manifested from the word length reduction, but after extensive analysis of the content of samples I determined that the sample length reduction for 16-bit sessions or 24-bit sessions saved as 16-bit was a simple integer divide by 256 algorithm, and as such the bogus LSB of 0x01 would skew the result vs a simple right shift LSB truncation.
The following is some output samples from a PCM diagnostic tool I use. Here are some samples from a 24-bit session and the resultant save to a 16-bit file.
24-bit Save:
LEFT RIGHT
10681 [ 00 03 00 ^ -80.8 dB | 00 01 00 ^ -90.3 dB ]
10682 [ ff fd 01 v -80.8 dB | ff ff 01 v -90.3 dB ]
10683 [ 00 03 00 ^ -80.8 dB | ff ff 01 v -90.3 dB ]
10684 [ ff fd 01 v -80.8 dB | ff ff 01 v -90.3 dB ]
10685 [ 00 03 00 ^ -80.8 dB | ff ff 01 v -90.3 dB ]
10686 [ ff fd 01 v -80.8 dB | 00 00 00 - -Inf dB ]
10687 [ 00 03 00 ^ -80.8 dB | ff fe 01 v -84.3 dB ]
10688 [ ff fd 01 v -80.8 dB | 00 01 00 ^ -90.3 dB ]
10689 [ 00 03 00 ^ -80.8 dB | ff fc 01 v -78.3 dB ]
10690 [ ff fe 01 v -84.3 dB | 00 04 00 ^ -78.3 dB ]
( A ) ( B ) C ( D ) ( E ) F ( G )
16-bit Save from the above 24-bit session
LEFT RIGHT
10681 [ 00 03 ^ -80.8 dB | 00 01 ^ -90.3 dB ]
10682 [ ff fe v -84.3 dB | 00 00 - -Inf dB ]
10683 [ 00 03 ^ -80.8 dB | 00 00 - -Inf dB ]
10684 [ ff fe v -84.3 dB | 00 00 - -Inf dB ]
10685 [ 00 03 ^ -80.8 dB | 00 00 - -Inf dB ]
10686 [ ff fe v -84.3 dB | 00 00 - -Inf dB ]
10687 [ 00 03 ^ -80.8 dB | ff ff v -90.3 dB ]
10688 [ ff fe v -84.3 dB | 00 01 ^ -90.3 dB ]
10689 [ 00 03 ^ -80.8 dB | ff fd v -80.8 dB ]
10690 [ ff ff v -90.3 dB | 00 04 ^ -78.3 dB ]
The columns of the above are defined as per:
A : sample #
B : left channel sample value in hex (big endian format, 3 bytes for 24-bit, 2 bytes for 16-bit)
C : left channel sample polarity indicator ^ - positive, v – negative
D : left channel sample level in dbFS
E : right channel sample value in hex (big endian format)
F : rightt channel sample polarity indicator ^ - positive, v – negative
G : right channel sample level in dbFS
I present this situation and my observations to the community here to see if anyone can provide some insight into what I am seeing or can provide a suggestion to assist in diagnosing further. Specifically, the issue I am concerned about is the injection of the LSB=0x01 into the 24-bit session for the negative samples of 16-bit PCM SPDIF stream as captured by the WaveLab software.
I would really like to diagnose and completely rule out that this data is not being inserted by the interface or the drivers and in order to do that I would need to interface directly with the ASIO driver to see what exactly is being presented by the audio interface – at present I don’t know what I can use to diagnose this. When I was able to get samples with all LSB=0x00 from Ableton Live I immediately directed my suspicion on WaveLab. But, further analysis of the captured 24-bit samples from Ableton exposed some other issues and I am not completely sure I can use it as a gold standard.
So I am here hoping that someone from Steinberg development see this and may be able to provide some insight on if there could be a bug in WL with respect to this. This may in fact be a bug that has flown under the radar as a sample variation of 1 would not typically be detectable, or would be obscured with dither. The fact that I am presenting computer constructed PCM data to the interface allows me to validate the chain from source to recorded file by being able to detect something as subtle as a single bit error.