Hello, continue from my recent post.
A little background:
I am developing a music game. Now I am experimenting with the capability with interactive interface.
It works for the basics. Play note and stop note. But for a music game, the skill and fun comes from timing of playing a note.
In my experiment I know that, if the
play_note() happens between rows, the beginning of notes will not be rendered (especially noticeable for drums).
If I timed it so the play_note() happen before rendering the next row, the sound is perfect. AWESOME!

Hence my game loop would be, some play_note(), some stop_note(), then read_interleaved_float_stereo() for a row worth of samples.
my test songs is IT format and XM format, so classic tempo mode
for my sample rate of 48000, the #rowSamples is currently calculated by (int)(48000 * 2.5 * Speed / Tempo).
It may be off by 1 or rounding error, and not handling alternative/modern mode.
So here I would request for a function
openmpt_module_get_row_samples()Then I have another test song with variable tempo/speed. So I have to query for speed and tempo for each row (to calculate #rowSamples)
After I set_position_order_row(), the
get_current_speed() and get_current_tempo() does not reflect the change of tempo/speed on current row.
They only change when I read_interleaved_float_stereo() for even 1 sample. Looking at the source code, I realize it is because the change happens after ProcessRow()
And peek with read_interleaved_float_stereo() is a quite demanding process.
So I would expect the proposed function openmpt_module_get_row_samples() to account for the tempo/speed change,
and get_current_speed/tempo() to reflect it. or another set of functions for
get_next_row_speed() get_next_row_tempo()