I thought when playing digital audio from any PC that the goal was to keep the OS out of it, avoid upsampling, and stream "bit perfect" to the DAC. Windows doesn't make that easy to do, so I'd appreciate any advice.
I seldom listen to ripped CDs. I play actual CDs on a Marantz player with a well-regarded DAC chip, which I now skip. I now use coax digital out from the Marantz transport to my Bifrost 2. But I have endless hours of lossless FLAC files which I won't burn to CD, hence my queries about bit-perfect play from a PC.
Ah, now I understand your comment. My response was limited to streaming apps on Windows, where for Spotify/YouTube/Amazon Music HD setting the sample rate of the Windows output device is your only option, so I'd set that to the highest bit rate that the DAC supports*, the exact sample rate of the material, disable all enhancements, max out the volume and hope for the best.
For Amazon Music HD specifically it's tedious to adjust the sample rate for each track, and since the app picks the highest quality version supported by your device, it's easiest to just set your output device to 24/192, and Amazon Music HD should always pick the highest quality version available for each track, and sadly Windows will do some upsampling if the track isn't 192 kHz. But even within the same album there can be tracks with different sample rates, so until Amazon starts taking things seriously and implements exclusive mode including automatically setting the sample rate based on the track, that's what I'd do.
Qobuz and Tidal already support exclusive mode and set the sample rate as needed, so that should be bit perfect if enabled.
Spotify is always 16/44.1 for music, possibly 16/48 for podcasts with videos, not sure.
YouTube is 48 kHz (not sure if there are exceptions, but the stats for nerds feature in YouTube can tell you) so you could consider setting the sample rate to 48 kHz when the material seems worth it.
But for local files you want software that can use exclusive mode just like Qobuz and Tidal can. Personally, I use foobar2000, either with ASIO output if the driver supports that natively (iFi, Topping) or WASAPI event mode, though Schiit's Unison USB is rather finicky with WASAPI event mode unless you use just the right non-default WASAPI buffer settings, so WASAPI push mode might be easier - but my understanding is that that makes it synchronous, not asynchronous.
There's also the KS (kernel streaming) output plugin, but I think that ultimately uses WASAPI under the hood, not sure. I think ASIO4ALL also uses KS under the hood.
Fun fact: there's a Spotify plugin for foobar2000 that works by logging into Spotify in foobar2000, then copying a playlist URL in Spotify and adding a "location" in foobar2000 (using the playlist URL). This way you can play Spotify content with exclusive mode, and use all of foobar2000's plugins, like EQ, resampling, spectral analyzers and what have you. A bit clunky, but a neat option in my book. Might be more worth it when Spotify Hifi is finally available (lossless, but still CD quality only), until then foobar2000 will happily decode Ogg Vorbis for you (Spotify Premium doesn't seem to use MP3).
Then there's paid for software like Audirvana and HQPlayer. The latter is famous for supporting lots of different filters for upsampling, which could be interesting to explore, but with most Schiit DACs there will be an extra upsampling step to 352.8 kHz (for multiples of 44.1 kHz) or 384 kHz (for multiples of 48 kHz), with the exception of Bifrost 1 and Modi Multibit, which don't go beyond 192 kHz. Some people like to use NOS DACs for that so that they are in complete control of the filter. Especially interesting with Holo Audio DACs since they support 1,536 kHz (at least the Spring 2/3/May) so you can use filters comparable to what a Chord M Scaler uses.
And there are more options that people like, including playing indirectly via a Roon server, or a network endpoint for HQPlayer (like the iFi ZEN Stream), or a streamer with DLNA support (like BluOS devices and many more), DANTE as a virtual sound card over the network, and more.
*regarding the highest bit rate, in some cases the DAC can receive 16, 24 and 32 bits, but may still operate at 24 bit internally, which I think Schiit's DACs do, so I typically set 24 bit since I'm unsure whether 32 bit uses integers (like 16 and 24) or floating point numbers (32 bit WAV files use floating point numbers), which generally speaking can cause issues where a whole number like 5 suddenly become, say, 5.0000001 (which is why some financial applications use integers and calculate with whole cents instead of fractions of dollars). However, after reading
this answer, it sounds like all 24 bit integers can be exactly represented by a 32 bit floating point number, so 32 bit is probably completely fine.
Anyway, unlike sample rate conversions, using a higher bit rate is unambiguous and perfectly reversible, so it's perfectly fine to send 16 bit audio to a DAC that is set to 24 bit.
Hope that was what you were looking for, and as always, corrections are quite welcome.