I'm using tracker modules for some placeholders and static SDL-vendored libxmp to play them back. Since SDL3_mixer doesn't deal with built-in loop starts in tracker modules, I resorted to manually specifying loop points in milliseconds using the properties MIX_PROP_PLAY_LOOP_START_MILLISECOND_NUMBER and MIX_PROP_PLAY_MAX_MILLISECONDS_NUMBER (I get the values by exporting a stream of the module using OpenMPT and checking the timeframes with Audacity, though this is likely to be a bit imprecise). However there's an issue where, and I assume, it starts the loop from the beginning of the pattern closest to the specified milliseconds. Sometimes it's off by one from whichever pattern I wanted it to start from. I'm currently going around this by cranking up the milliseconds of the starting point via trial-and-error, but that also has a side-effect where, after looping the first time, it will cut off the end prematurely on future loops.
I'm using tracker modules for some placeholders and static SDL-vendored libxmp to play them back. Since SDL3_mixer doesn't deal with built-in loop starts in tracker modules, I resorted to manually specifying loop points in milliseconds using the properties
MIX_PROP_PLAY_LOOP_START_MILLISECOND_NUMBERandMIX_PROP_PLAY_MAX_MILLISECONDS_NUMBER(I get the values by exporting a stream of the module using OpenMPT and checking the timeframes with Audacity, though this is likely to be a bit imprecise). However there's an issue where, and I assume, it starts the loop from the beginning of the pattern closest to the specified milliseconds. Sometimes it's off by one from whichever pattern I wanted it to start from. I'm currently going around this by cranking up the milliseconds of the starting point via trial-and-error, but that also has a side-effect where, after looping the first time, it will cut off the end prematurely on future loops.