libera/#shirakumo - IRC Chatlog
Search
20:26:35
Colleen
<Grolter> I think I found the source of delay in harmony: mixed:mix sometimes blocks for too long (~50 ms) when called on mixed.pulse:drain. It seems to be pulseaudio related bug, though I'm not sure
20:36:35
Colleen
<shinmera> Pulse and most other shared audio systems will do their own buffering. If the buffers are full, their synchronous apis will block. I think that's what you're seeing there.
20:40:26
Colleen
<shinmera> I think what we would need is some way to trace latencies of individual samples. Meaning: change the mixed_bip_buffer to keep two arrays, one of the actual sample, and one of sample timestamps. When producing samples, use the current utime for the sample. When transferring, just copy it over. When mixing, pick the older. Then we can measure the in-pipeline latency from source to any point in the pipeline
20:40:40
Colleen
<Grolter> However, it is probably a bug. There is a problem with playing voices simultaneously, there is a noticeable delay. It disappears when I switch to alsa
20:42:01
Colleen
<shinmera> It may also not be a bug and simply be an artefact of using pulse's "simple" api. They have a more complex API that might not have the buffering behaviour
20:50:43
Colleen
<shinmera> Yeah, I was just wondering if other stuff like SDL2, OpenAL, Jack, PipeWire, would also reproduce the delay or not.
20:52:21
Colleen
<shinmera> It's odd, because when you use Alsa with Pulse active, it'll actually route through Pulse anyway.
20:53:15
Colleen
<shinmera> yes, but any program that connects to alsa with pulse active will pipe through pulse instead
20:53:29
Colleen
<shinmera> because alsa only supports one output program per device, it doesn't do any mixing.
20:57:07
Colleen
<shinmera> it looks like we currently pass NULL as the pa_buffer_attr to pa_simple_new
20:57:34
Colleen
<shinmera> so we should construct a pa_buffer_attr struct and fill it with the data corresponding to the pack's size
21:24:57
Colleen
<shinmera> though you'll probably need to convert that, since for packs the size is number of bytes, not samples/frames.
21:27:41
Colleen
<shinmera> Anyway, I'll leave you to it. This gal here is too tired and needs some beauty sleep