On Thu, 7 Nov 2024, Nicolas George wrote:
Thanks for explaining. You have gotten the math wrong, and therefore are going for an incorrect fix. Sure, the 32 bits of precision will push the incorrectness very far in the future, but it is still invalid. The output is not supposed to be periodical for any integer frequency (assuming you mean periodical over one period; everything finite is eventually periodical). For example, “sine=1000” will NOT be periodical over a period, only after the tenth period. The frequencies that should cause the output to be periodical are the frequencies that are integer divisors of the sample rate. Sure, even for a frequency of 900, the current code uses dphi=87652394 instead of dphi=4294967296/49=~87652393.80. Once stated that way, the correct way of getting a periodical output is obvious: you need to implement rational arithmetic. In this particular case, it is quite easy: 1. Remove the +0.5 in the computation of dphi to get it to round downwards, leave everything else as is. 2. Convert ldexp(sine->frequency, 32) / sine->sample_rate to a rational to get a denominator, and subtract the integer part to keep only the fractional part, let us call it dphi_rem / dphi_den, with 0 <= dphi_rem < dphi_den.
How do you convert the number to rational to get the denominator? Or you simply want me to use sine->sample_rate?
Thanks, Marton
4. Start with phi_rem = -phi_den / 2 (that is the +0.5 we removed). 5. Each time you add dphi to phi: 5.1. Add dphi_rem to phi_rem. 5.2. If phi_rem >= 0, subtract dphi_den to it and increment phi. Regards, -- Nicolas George _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".