Modulation sonore

Un peu de théorie que je connais sur le son - le son est:
une onde, des oscillations, des oscillations amorties, une onde peut être décrite en termes de physique, une onde peut être décrite en termes de mathématiques.

Téléchargez et testez le programme


Puisque nous modélisons sur un ordinateur, notre onde est décrite en utilisant une séquence (série de Fourier) d'octets (nombres de -128 à 127 et zéro), c'est-à-dire un tableau d'octets.

L'équation vibrationnelle est mieux décrite par la fonction SIN.

D'accord, ce serait trop simple si nous exécutions simplement la fonction SIN dans le tableau.

Par conséquent, guidé par des articles sur la description du périphérique synthétiseur Yamaha, j'ai écrit l'algorithme suivant:

1. En utilisant la fonction SIN, une vague principale ou de modélisation est créée, voici une formule qui peut être utile à d'autres développeurs:

for(int k = 0; k < SoundLabVisual.player.data.length;k++){ double sinusoid = amplitude1 * Math.sin(2 * (3.14/1 ) * k * frequency1 + faza); } 

Où:
amplitude1 - amplitude
fréquence1 - fréquence d'oscillation
faza - la phase initiale des oscillations

2. À l'aide de la deuxième fonction SIN, une onde principale est créée, dont l'amplitude est la valeur de la première onde:

 //c   double a1 = 0.1f; //c   double c1 = 0.1f; //c   double d1 = 0.1f; sinusoid = a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 )); 


Capture d'écran du programme

image

J'ai chargé les sons de test dans le programme lmms.

image

Écouter mp3

Un autre algorithme sera implémenté qui fonctionnera sur les canaux, si possible, j'écrirai à ce sujet dans le deuxième article.

Mise à jour:
Selon les commentaires des commentateurs, les algorithmes peuvent désormais être multipliés par eux-mêmes et entre eux.

 if(jCheckBox8.isSelected()){ sinusoid = (a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ))) * (a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ))); }else{ sinusoid = a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 )); } 


Update 2: Le programme a été mis à jour, maintenant l'onde peut être mélangée avec le son.

Source: https://habr.com/ru/post/fr431488/


All Articles