16Fermer18
Kevin KoflerLe 20/04/2008 à 11:01
Ça permet de gérer des fréquences qui ne sont pas multiples de la fréquence de l'AI5. Il y a des erreurs, mais le calcul en virgule fixe fait que l'erreur moyenne est nulle (enfin presque, il reste des erreurs de l'ordre de T_AI5/32768 (où T_AI5=1/AI5_freq), mais...).

Par exemple, imagine une AI5 à 500 Hz <=> 2 ms et imagine que tu veuilles jouer un son à 167 Hz <=> 6 ms (donc la demi-période à 333 Hz <=> 3 ms). Le calcul en virgule fixe fera que, si on commence à un signal U=0 au moment t=0:
* t = 2 ms (1er tic de l'AI5) ... r = 2 ms < 3 ms, on reste à U=0
* t = 4 ms (2ème tic de l'AI5) ... r = 4 ms >= 3 ms, on passe à U=1, r -= 3 ms => r = 1 ms
* t = 6 ms (3ème tic de l'AI5) ... r = 3 ms >= 3 ms, on passe à U=0, r -= 3 ms => r = 0 ms
* t = 8 ms (4ème tic de l'AI5) ... r = 2 ms < 3 ms, on reste à U=0
* t = 10 ms (5ème tic de l'AI5) ... r = 4 ms >= 3 ms, on passe à U=1, r -= 3 ms => r = 1 ms
* t = 12 ms (6ème tic de l'AI5) ... r = 3 ms >= 3 ms, on passe à U=0, r -= 3 ms => r = 0 ms
etc., donc on arrive bien à un son à 167 Hz, alors que la demi-période n'est pas multiple de la période de l'AI5. C'est pour ça que PolySound utilise cette méthode, mais ça peut s'appliquer à n'importe quel programme.