Menu

#198 Stuttering playback on mac

2.0.x
open
Mac (1) dsd (2)
5
15 hours ago
6 days ago
Anonymous
No

Hello Maxim.

Love your component, love your work.

I apologize in advance for the very long thread, but I think good work deserves proper feedback.

My daily driver is a mac, and my hi-fi setup is at my desk. I would hate to have to use a streamer as my computer is right here next to the DAC.

The DAC is a Topping E70 Velvet. The Mac is a Macbook Air M1 (2020).

I jumped on Foobar2000 as it seems to have the most customization and (with components) the most functionality. It works very well for PCM on apple's CoreAudio both in exclusive and non-exclusive modes.

Now, this is the SACD component so you may have guessed, I have some SACD i would love to listen to as well. When I recently saw that preliminary work had started on a universal version which would be compatible with the mac I jumped right in. I had to keep messing with the output settings but finally it happened. I had dsd going directly from foobar to my dac. At first it would keep stuttering, but messing around with the settings I got it to become stable. Now, it does have some kinks, and I'll go into details with those in a minute.

At the same time I am building a streaming unit for my dad. He needs it to be as plug and play as possible so for him I am going the route of Volumio. I was testing it on my dac and after I had finished testing reconnected my mac to my dac... the stuttering had come back... and now I am unable to remove it nomatter what settings i run with. (shy of converting to pcm, but then what's the point).

In comparison, running volumio through my dac there's not only perfect dsd playback, even with a buffer-size of several seconds the controls are instantanious, I can pause, play, skip, etc, and it reacts immediately. When using the component on foobar it will only react after the buffer is emptied. I have a suggestion here. When skipping or pausing, etc, clear the buffer entirely.

Another sort of weird behaviour in comparison is that, when playing dsd through something like volumio, when you skip from one dsd track to another, the dac will stay in dsd mode. However doiung the same with the component in foobar, the dac will not stay in dsd mode, it will go from dsd mode, back to my default settings, to some arbitrary pcm frequency (usually 176.4), before finally reaching back at DSD. This actually takes several seconds and becomes very jarring.

Sometimes when chaging from one dsd track to another, or when skipping ahead/back, the playback just disappears completely until you start another track. Sometimes that has to be a pcm track or it just won't play at all, but once you start a pcm track and it starts playing I can go back to a dsd track and it'll start playing.

The stuttering that is happening with the components dsd playback is not happening if i use the component to convert to pcm which leads me to believe the issues lie in the handling of the output, not anywhere in the handling of the input files. When the stuttering happens I can see that my dac switches from dsd to pcm for a split second before going back to dsd - it is as if it momentarily loses connection. In the foobar console, sometimes when the stuttering happens an event is logged stating 'Playback interrupted, source is stalling...' - The stuttering is every few seconds, the logged error is roughly every 10 seconds. IT is also weird how when you start a dsd track the console logs a coreaudio event: "CoreAudio: opening 32 bit 176400Hz 2ch buffer;0:00.050" - That looks like foobar is setting up for pcm playback before the component takes over.

The track 'seeker' or what you wanna call it also behaves very weird, instead of just, counting up, 0:01 -> 0:02, etc, it goes 0:01 -> 0:02 -> 0:01 -> 0:04 for instance, like it has no clue how long it actually is in the track.

This is how the console looks after starting one dsd track, letting it play out and start the next on the album, and letting that play out as well. Notice how it keeps stalling and every time it changes track it goes through 3 different playback modes...

"2024-08-25 11:53:20.000 Opening track for playback: "..." / index: 1
2024-08-25 11:53:20.000 CoreAudio: opening 32bit 176400Hz 2ch buffer:0:00.050
2024-08-25 11:53:23.000 Playback interrupted, source is stalling...
2024-08-25 11:53:34.000 Playback interrupted, source is stalling...
2024-08-25 11:53:45.000 Playback interrupted, source is stalling...
2024-08-25 11:53:57.000 Playback interrupted, source is stalling...
2024-08-25 11:54:09.000 Playback interrupted, source is stalling...
2024-08-25 11:54:21.000 Playback interrupted, source is stalling...
2024-08-25 11:54:32.000 Playback interrupted, source is stalling...
2024-08-25 11:54:44.000 Playback interrupted, source is stalling...
2024-08-25 11:54:56.000 Playback interrupted, source is stalling...
2024-08-25 11:55:08.000 Playback interrupted, source is stalling...
2024-08-25 11:55:19.000 Playback interrupted, source is stalling...
2024-08-25 11:55:30.000 Playback interrupted, source is stalling...
2024-08-25 11:55:42.000 Playback interrupted, source is stalling...
2024-08-25 11:55:53.000 Playback interrupted, source is stalling...
2024-08-25 11:56:04.000 Playback interrupted, source is stalling...
2024-08-25 11:56:16.000 Playback interrupted, source is stalling...
2024-08-25 11:56:28.000 Playback interrupted, source is stalling...
2024-08-25 11:56:40.000 Playback interrupted, source is stalling...
2024-08-25 11:56:52.000 Playback interrupted, source is stalling...
2024-08-25 11:57:02.000 Playback interrupted, source is stalling...
2024-08-25 11:57:14.000 Playback interrupted, source is stalling...
2024-08-25 11:57:26.000 Playback interrupted, source is stalling...
2024-08-25 11:57:37.000 Playback interrupted, source is stalling...
2024-08-25 11:57:49.000 Playback interrupted, source is stalling...
2024-08-25 11:58:01.000 Playback interrupted, source is stalling...
2024-08-25 11:58:12.000 Playback interrupted, source is stalling...
2024-08-25 11:58:23.000 Playback interrupted, source is stalling...
2024-08-25 11:58:35.000 Playback interrupted, source is stalling...
2024-08-25 11:58:45.000 Playback interrupted, source is stalling...
2024-08-25 11:58:56.000 Playback interrupted, source is stalling...
2024-08-25 11:59:08.000 Playback interrupted, source is stalling...
2024-08-25 11:59:20.000 Playback interrupted, source is stalling...
2024-08-25 11:59:32.000 Playback interrupted, source is stalling...
2024-08-25 11:59:45.000 Playback interrupted, source is stalling...
2024-08-25 11:59:55.000 Opening track for playback: "..." / index: 1
2024-08-25 11:59:55.000 CoreAudio: opening 32bit 384000Hz 2ch buffer:0:00.050
2024-08-25 11:59:56.000 CoreAudio: opening 32bit 176400Hz 2ch buffer:0:00.050
2024-08-25 12:00:00.000 Playback interrupted, source is stalling...
2024-08-25 12:00:12.000 Playback interrupted, source is stalling...
2024-08-25 12:00:24.000 Playback interrupted, source is stalling...
2024-08-25 12:00:35.000 Playback interrupted, source is stalling...
2024-08-25 12:00:46.000 Playback interrupted, source is stalling...
2024-08-25 12:00:56.000 Playback interrupted, source is stalling...
2024-08-25 12:01:08.000 Playback interrupted, source is stalling...
2024-08-25 12:01:20.000 Playback interrupted, source is stalling...
2024-08-25 12:01:30.000 Playback interrupted, source is stalling...
2024-08-25 12:01:42.000 Playback interrupted, source is stalling...
2024-08-25 12:01:54.000 Playback interrupted, source is stalling...
2024-08-25 12:02:05.000 Playback interrupted, source is stalling...
2024-08-25 12:02:17.000 Playback interrupted, source is stalling...
2024-08-25 12:02:27.000 Playback interrupted, source is stalling...
2024-08-25 12:02:39.000 Playback interrupted, source is stalling...
2024-08-25 12:02:51.000 Playback interrupted, source is stalling...
2024-08-25 12:03:03.000 Playback interrupted, source is stalling...
2024-08-25 12:03:15.000 Playback interrupted, source is stalling...
2024-08-25 12:03:27.000 Playback interrupted, source is stalling...
2024-08-25 12:03:38.000 Playback interrupted, source is stalling...
2024-08-25 12:03:50.000 Playback interrupted, source is stalling...
2024-08-25 12:04:01.000 Playback interrupted, source is stalling...
2024-08-25 12:04:13.000 Playback interrupted, source is stalling...
2024-08-25 12:04:25.000 Playback interrupted, source is stalling...
2024-08-25 12:04:37.000 Playback interrupted, source is stalling...
2024-08-25 12:04:48.000 Playback interrupted, source is stalling...
2024-08-25 12:04:59.000 Playback interrupted, source is stalling..."

Another thing, I can't test the component on windows as the universal component (the windows+mac) crashes on windows as soon as you go into the configure menu with the latest version of foobar.

I am well versed in both c and c++ and have contributed to several open source projects throughout the last decade (github.com/phatcat), I have both a mac, windows, android and iphone.
If you need any help with testing

Discussion

  • Anonymous

    Anonymous - 6 days ago

    Also, it would be helpful if the source files came with the mac+windows component as well like it does with the foo_input_sacd download. That way I could maybe help more.

     
  • Anonymous

    Anonymous - 6 days ago

    One correction/elaboration:
    One of the PCM modes I see it change to between dsd tracks comes from the 'dsd + pcm' setting so that one is warranted. That's the 384000 hz one in the console example above. Still doesn't explain why it changes to 176400. If i set the frequency to 176400 in dsd to pcm conversion with dsd+pcm on then it only changes once, to 176400 hz, when you first start dsd playback, but then it actually stays in dsd mode in between changing tracks, otherwise it changes first to what i set, then to 176400 after, before going back to dsd. The stuttering is the same regardless.

     
  • Anonymous

    Anonymous - 5 days ago

    When using DSD+PCM mode it defaults to DoP so there is a brief interlude of PCM. I.e DSD - PCM - DSD. If you want pure DSD & you have a DSD DAC then set it to 'DSD 'not 'DSD+PCM'.

     
  • Anonymous

    Anonymous - 5 days ago

    That's interesting cause it shouldn't ever sent anything other than dsd to the dac when any of the dsd outputs are selected.
    I understand foobar needs the pcm for all the meter components and stuff, which is why I had it on, but it should NOT affect the data being sent to the DAC what-so-ever, under any circumstance, otherwise something is being handled wrong, hence, it would be handy to have the source files around so one could have a little look at the code.

     
  • Maxim V.Anisiutkin

    Thank you very much for this detailed review. It's rather clear that the method was used to output DSD (DoP actually) now doesn't work neither for Mac nor for the newest foobar2000 betas. Could you try to play SACD in PCM mode with the output sample rate set to 176400, please? And if you happen to have DSD128 track with 352800 as well. Does it play without stuttering?

     
  • Anonymous

    Anonymous - 4 days ago

    I set the output to PCM, and a samplerate of 176400. It plays without stuttering and without any playback interruptions in the console log. (seems to work on any converter settings, tried a few)

    Same goes for playing a dsd128 with a sample rate of 352800

    Testing a dsd256 track with ]705600] plays as well without any stuttering or any errors logged in the console either.

     
  • Anonymous

    Anonymous - 3 days ago

    A little more feedback after trying 0.0.4:

    No DSD+PCM anymore?

    Also am I understanding the patch notes correctly? Is all DSD playback DoP through this component? If so, then what is the point of the 'DoP for converter' option?

    Also there is a bug with this version. I don't know how or why, but removing the old component 0.0.3 and installing 0.0.4 I could no longer retain any changes to the Output (per device) options in the DSD config menu. If I changed output device in foobar to non exclusive mode or another output altogether, I could change between pcm and dsd fine, but once back to exclusive mode on the dac and it was stuck at pcm. Same goes for the frequency and gain settings, the entire 1st reow of settings.

    So to even try DSD playback in exclusive mode on the dac with 0.0.4 I had to remove that, reinstall 0.0.3, then change output to dsd, then remove it again and reinstall 0.0.4 - Now I of course can't change to pcm output without doing all of that over again.

     
  • Maxim V.Anisiutkin

    That's nice. I've prepared v0.0.4 with the very base DoP output. Please, check it out as well.

     
  • Anonymous

    Anonymous - 3 days ago

    I posted a little too soon... The DSD playback doesn't work at all in exclusive mode on the dac on 0.0.4, it doesn't even change to dsd mode anymore, it just sets itself at the frequency corresponding to the dsd file and the seeker starts moving in foobar but not sound. Switching to a pcm track it plays as normal.

     
  • Maxim V.Anisiutkin

    No sound at all or faint distorted sound behind the noise?

     
  • Anonymous

    Anonymous - 3 days ago

    Actually, I have to correct myself once again... There is sound... sweet, sweet, non-stuttering music... in dsd mode.
    I think it might be on the mac why it didn't work before, coreaudio doesn't always seem to play nice with apps wanting to take exclusive control, I havn't done anything besidest listening to some pcm music and now it works when I wanted to double check dsd to make sure (it was completely silent before, no sound, no noise, nothing) - Now it sounds like it should and the dac is reporting as it dsd. Yay.

    Now, for some more feedback (I am sorry) - If you pause a track in dsd mode, then press play again to resume, then we're back to no sound at all, but then if you repeat the process of pausing and then resuming again, the sound comes back. If I lean in real close while it's silent, a can hear the faintest of music playing from the midrange. Not distorted, though, sounds correct, just, only from the midrange. The tweeter is just playing low volume noise.

    The pausing and the resuming of playing (when it actually produces sound, so every 2nd time) is instantaneous now, though, which is yet again progress. Yay.

    Also you can now seek within a track while it is playing and it doesn't take buffer size amount of time for it to react, it reacts instantly. If the music has been paused and is playing at thast very low volume, skipping within the track doesn't fix it, you have to change tracks manually or pause and resume it again.

    Another thing is happening now, or I may just be noticing it now, however, though this may be on the dac, it produces a small noise whenever skipping ahead or backwards in a track, it sounds a bit like changing the channel on an old crt tv.

    All in all I am very happy to be able to hear my sacd's in dsd, even if it is only DoP for now.

    Once again thank you for your work and for your quick turnarounds. I would love to take a dive into the source code (which is also now present which is just chefs kiss) sometime and see if I can possibly do anything to help move towards native dsd playback down the line.

     
  • Thorbjørn Holst Hein Sindrup

    I signed up for an account as 3 days awaiting moderation to tell you that indeed I get sound now (also with the 0.0.4 version).

    What must have happened since I wasn't getting any sound I must have paused it.

    If you pause, and then hit 'play' again, nothing is going to play. That is to say, indeed if you get in close with your ear you can hear some very faint playing of the music. It doesn't sound distorted actually, just very very quiet. And for some reason only the midrange is playing, nothing from the tweeter (may not be sensitive enough, though).

    But to reiterate, when you are playing dsd, and then pause and resume playing, it's going to be quiet. If you then pause and resume once more, the music will actually start playing at normal volume again.

    Looking at the dac, what happens during playback is that initially it has whatever frequency the last pcm track you were listening to had, then when you start a dsd track, it will set the appropriate pcm frequency first, and then change to dsd mode.
    However, when you press 'pause', the dac not only leaves dsd mode and goes back to pcm, it goes back to the original pcm frequency of the last heard pcm track, so that when you press 'play' to resume, the dac simply stays in that frequency and won't play (or well, it does play, but very very quietly). When you then press 'pause' in this state, it will change to the correct pcm frequency. Now when you press 'play' it will go into dsd mode and play correctly.

    Or, to sum up:

    PCM -> Start DSD -> Music starts -> Pause -> Resume Play -> Pause Again -> Resume Play
    44.1kHz -> 176.4kHz -> 2.82MHz -> 44.1kHz -> 44.4kHz -> 176.4k Hz -> 2.82MHz

    And on to volume:
    DSD and digital volume control don't work together so the volume rocker should be disabled during dsd playback. What happens now in exclusive mode is that the playback stops entirely and the dac no longer detects it as dsd and reverts back to pcm mode. This happens at every other volume option besides max.

     

    Last edit: Thorbjørn Holst Hein Sindrup 15 hours ago

Anonymous
Anonymous

Add attachments
Cancel