Euh encore une fois j'ai l'impression qu'on peut améliorer significativement l'algorithme en redéfinissant la variable _fcounter1 : tu fais une nouvelle variable _fcounter_extended1 qui vaut "_fcounter1 - play_frequency - (frequency_voice1)/2", et ensuite tu fais :
play:
lea _fcounter_extended1(pc),a0
move.w frequency_voice1(pc),d0
bne.s son_1
add.w (a0),d0
bcc.s son_1
sub.w play_frequency(pc),d0
patch_playmode_1
eori.b #123,($60000E) ; à patcher en 1 en stéréo, 3 en mono
son_1
move.w d0,(a0)
subq.w #1,_ucounter1 ; et tu peux l'améliorer en mettant _ucounter1 juste après _fcounter1
rts
Tu peux faire une fonction de mise à jour de _fcounter_extended1 à chaque fois que tu joues une nouvelle note.