LosslessSwitcher icon indicating copy to clipboard operation
LosslessSwitcher copied to clipboard

Unnecessary sample rate resets

Open hubert3 opened this issue 1 year ago • 7 comments

Running Version 1.1 Build 14

Playing this album https://music.apple.com/au/album/beats-in-space-068-marie-davidson-dj-mix/1682148235 with LosslessSwitcher active, the sample rate seems to be reset at the start of every track causing at least one ~0.5 second audio dropout on my SMSL M500 external DAC

This happens on every track change, even though all tracks are 16-bit 44.1 kHz ALAC and no switching is necessary

When I quit LosslessSwitcher these dropouts are 100% gone

Would it simply be possible to only reset the sample rate if it's different from the last track that was played?

hubert3 avatar May 18 '23 05:05 hubert3

Looking at the code, it seems like unnecessary changes should already be avoided (?)

The following is the console output when I skip to the next track in this album

Not totally sure what's happening here, there seem to be two detections with both 16 and 24 bitDepths based on the Apple Music logs

[getAllStats] []
Current Track Acelera (Mixed), previous: ID2 (from Beats In Space 068: Marie Davidson) [Mixed], isSame: false
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 24, date: 2023-05-18 05:54:29 +0000, priority: 2)
[getAllStats] [LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 24, date: 2023-05-18 05:54:29 +0000, priority: 2), LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)]
NEAREST FORMAT [__C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 4, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0), __C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 68, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0)]
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 24, date: 2023-05-18 05:54:29 +0000, priority: 2)
[getAllStats] [LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 24, date: 2023-05-18 05:54:29 +0000, priority: 2), LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)]
NEAREST FORMAT [__C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 4, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0), __C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 68, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0)]
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 24, date: 2023-05-18 05:54:29 +0000, priority: 2)
[getAllStats] [LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 24, date: 2023-05-18 05:54:29 +0000, priority: 2), LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)]
NEAREST FORMAT [__C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 4, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0), __C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 68, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0)]
detected stat CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)
[getAllStats] [LosslessSwitcher.CMPlayerStats(sampleRate: 44100.0, bitDepth: 16, date: 2023-05-18 05:54:29 +0000, priority: 1)]
NEAREST FORMAT [__C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 4, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0), __C.AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 68, mBytesPerPacket: 8, mFramesPerPacket: 1, mBytesPerFrame: 8, mChannelsPerFrame: 2, mBitsPerChannel: 24, mReserved: 0)]
[getAllStats] []
[getAllStats] []
same track, ignore cache
[getAllStats] []
[getAllStats] []
same track, ignore cache

hubert3 avatar May 18 '23 05:05 hubert3

fwiw I tested that album and couldn't repeat the error (v1.1/b11)

MasterRahool avatar May 18 '23 14:05 MasterRahool

fwiw I tested that album and couldn't repeat the error (v1.1/b11)

I imagine some DACs handle sample rate resets more gracefully than others without dropouts.

It seems like LosslessSwitcher is doing something on every track change on this album on my system but I haven't worked out what exactly

hubert3 avatar May 20 '23 01:05 hubert3

thats the thing, no change happened, because they're all 44.1

the dac I was using actually has a noticeable dropout usually, with a physical click on changing. No changes or system confusion for me.

MasterRahool avatar May 20 '23 02:05 MasterRahool

I found one particular repeatable sample rate change (but not reset): when adding tracks to "play next" it switches the sample rate to that of the new track

MusicSounds avatar May 20 '23 21:05 MusicSounds

I can confirm the excessive switching - using an M Track 2x2 and M Audio AIR 192 4, as well as my Built-in Macbook Pro M1Max DAC.

It causes more like 2-5 seconds of total dropouts for me, switching often more like 2 or 3 times between sample rates, I have bit depth switching deactivated.

I can also confirm switching fairly early (too early) to another sample rate when the upcoming song has different properties, something like 2-3 minutes of playback too early.

Lmk how I can provide some logs, if needed! :)

PivotMasterNM avatar May 30 '23 08:05 PivotMasterNM

I use a Fiio Q3 and at the start of every song it drops out for 1-3 seconds even when there isn't a switch (listening to an album rather than random songs)

Also happens whenever I drag the slider to another part of the song (forwards and backwards)

As soon as I quit the application and skip song/drag slider the issue goes away immediately.

JFizDaWiz avatar Jun 04 '23 12:06 JFizDaWiz