Zeph > pas mal du tout !

squalyl > nan

Ton truc c'est de la modulation AM, ça fait une translation dans l'espace fréquentiel : si tu as par exemple le mélange d'un sinus à 100 Hz (f1) et d'un autre à 220 Hz (f2), et que tu modules à 100 Hz (f3), tu obtiens en sortie un sinus à 200 Hz (f1 + f3), mais aussi un à 320 Hz (f2 + f3), un à 0 Hz (f1 - f3) et un à 120 Hz (f2 - f3).
Ce qu'il faut c'est une homothétie (un truc qui conserve les rapports de fréquence), par exemple avec un rapport 2 si tu veux décaler d'une octave vers le haut, du coup tu obtiens un sinus à 200 Hz et un autre à 440 Hz.
(Les deux sont équivalents seulement si le signal est un sinus pur.)
L'homothétie ça s'obtient en réenchantillonnant, la méthode la plus simple c'est (pour chaque échantillon de sortie) :
échantillon_sortie = échantillon_entrée[pos];
pos += fréq_sortie / fréq_entrée;
Bon évidemment on obtient des valeurs de pos qui ne sont pas entières. Y'a des algos pour évaluer mathématiquement la valeur du signal échantillonné entre les échantillons, mais ils sont assez lourds. En pratique une interpolation "classique" donne de bons résultats ; rien qu'une interpolation linéaire, c'est déjà beaucoup mieux que rien. Perso je le fais avec une polynôme d'ordre 3 (je prends les 2 échantillons avant la position, les 2 après, je calcule l'équation du polynôme qui passe par ces 4 points, et je l'évalue en x = le point que je cherche), et les résultats sont très corrects à l'oreille.