Well, while it's not pretty, it is used. Let me quote e.g. https://highendbyoz.com/wp-content/uploads/2022/07/Operating_Manual_Maximinus.pdf:I'm certain the DAC chip in this device doesn't do that. And I doubt that any device would be able to function at all employing that strategy. I've heard what happens when a DAC loses the clock and starts dropping/duplicating samples - which is effectively what such a strategy is. It is not pretty.
Re-clocking
– Enable this function in the user menu (see “Menu structure” below) . This very
important feature of the DAC allows for all jitter to be removed from the input source.
Data is read onto the device’s memory and then independently read out using a ultra
stable clock. When enabled, this option will completely replace the incoming clock with
an ultra low jitter TCXO based clock. The DSP monitors the incoming sample frequency
and detects standard sample rate signals - 44.1 kHz, 48 kHz, 88.2 kHz, 96 kHz, 176.4 kHz, 192
kHz, 352.8 kHz and 384 kHz. The on-board clock then completely replaces the incoming
clock. The source’s clock is used for other sampling frequencies. The DSP allocates a
huge internal FIFO buffer (1/2 second at 44.1), that stores the incoming audio to
decouple the incoming and outgoing data streams. Long absolute digital silences in the
music stream, such as between tracks and during pauses, are selectively shortened or
lengthened by the DSP to maintain data synchronization. This results in a significant delay
between the audio source and the analog audio. You will not normally notice this delay
unless video is synchronized with the audio. For this reason you may want this feature to
be turned off when watching video, or the video might be delayed.
IIRC a FIFO reclocker board quite popular in RPi community does it too (using built-in FPGA), but I cannot find any quote now so will not pursue this path.
Another HW example which tracks no silence at all: https://www.mouser.com/pdfdocs/Semtech_GS2970A_DS.pdf p. 88 chapter 4.19.3.3 Audio FIFO Block:
The position of the write pointer with respect to the read pointer is monitored
continuously. If the write pointer is less than 6 samples ahead of the read pointer (point
A in Figure 4-46), a sample is repeated from the read-side of the FIFO. If the write pointer
is less than 6 samples behind the read pointer (point B in Figure 4-46), a sample is
dropped. This avoids buffer underflow/overflow conditions.
This method of crude async resampling (again without tracking silence) is commonly used in software, e.g. in gstreamer https://gstreamer-devel.narkive.com...o-sample-rate-conversion-with-gstreamer#post5 while a proper adaptive resampler has never been implemented https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2681 .
I would believe the same method (again without tracking silence) is applied in PTP-clocked RTP reception of Dante receivers as these need very short latency (i.e. employ only short FIFO internally) and low computing overhead (unlikely to run proper adaptive resampling algorithms in their FPGAs).
Since Topping D50 III has a rather powerful XMOS microprocessor, this part would easily be able to perform this crude reclocking of I2S stream coming from the SPDIF receiver, to avoid having to switch clocks between the XMOS (USB) and the SPDIF receiver (which often produces audible artefacts). No idea whether it actually does.