Bonjour, Habr! Dans le dernier article,
"un motif infini basé sur des nombres premiers", j'ai parlé d'un algorithme qui vous permet de générer de magnifiques motifs sans fin qui sont soit des dessins extraterrestres, soit quelque chose de technologique, comme un dispositif à puce. Cependant, l'algorithme de génération de motifs 2D peut également être utilisé pour créer des mélodies. Plus de détails sous la coupe.
Algorithme de génération de mélodie
Pour créer des mélodies, j'ai créé un simple générateur de méandre avec un signal de fondu. Dans ce cas, vous pouvez superposer plusieurs générateurs de méandre les uns sur les autres. Ensuite, nous réglons les périodes des générateurs de méandre en fonction des fréquences des notes, et nous réglons l'amplitude des générateurs en fonction de la présence de la touche «pincée». Comme signal pour une frappe, j'ai utilisé la valeur de pixel d'une image 2D prise à partir d'une colonne verticale qui peut être déplacée autour de l'image. La colonne contient 14 pixels, ce qui correspond à 7 notes de 2e et 3e octave. Une touche n'a que deux états - enfoncée ou non.
Le générateur de méandre et les fonctions de stockage du résultat dans un fichier WAV que j'ai implémenté en tant que bibliothèque distincte pour travailler avec le son. Elle est
là .
Le programme de génération de musique peut être consulté
ici . Il s'appelle simple_sound. Exe prêt peut être trouvé dans l'archive. En sortie, le programme crée un "exemple" de fichier WAV.
Exemples de mélodie
L'un des morceaux les plus intéressants,
example_dx1000_dy1000_x2018_y8 . Le nom de la mélodie montre la taille du décalage dans les coordonnées X et Y, ainsi que les coordonnées initiales. Autres mélodies:
example_dx_dy_x5678_y7768example_dx_dy_y776897123exemple_y47exempleEn théorie, vous pouvez affiner l'algorithme et l'utiliser pour les jeux primitifs, afin que les mélodies du jeu ne se répètent jamais.