La pub, c'est ça

samedi 12 juillet 2014

Programmation d'un synthétiseur Jack sous GNU/Linux en C++ (Septième partie) - La polyphonie

Vous voila avec un petit synthétiseur capable de jouer une note par l'intermédiaire d'une source midi. Vous pouvez changer le volume général et changer la position gauche/droite, et le son produit est sensible à la force de frappe sur la touche du clavier. Ouiiiii! C'est coool!

En même temps, c'est pas terrible, il n'est pas possible de jouer plusieurs son en même temps. Pas de polyphonie. Pas d'accord possible. Non! Ce n'est pas possible, je ne suis pas d'accord... C'est un générateur de son et il n'a presque pas de son! Non mais allo quoi! ...

La polyphonie, vous l'aurez compris, c'est ce qui vous permet de jouer plusieurs sons en même temps. Un humain normal pourrait faire un accord avec ses dix doigts, et donc jouer dix notes en même temps. Si maintenant, vous avez des notes soutenues avec la pédale, vous pouvez très très vite monter très haut. Il va donc falloir trouver la valeur idéale. Tout dépend de votre ordinateur, de la complexité du son et ce que vous voulez faire en même temps sur votre machine.

Le mieux, c'est que cela soit paramétrable. Le plus facile, c'est encore de créer énormément de variables globales. Je ne vais donc pas passer mon temps à créer un fichier de configuration, cela ne rentre pas directement dans le cadre de ce tutoriel. Cela dit, si vous le demandez, je me ferai un plaisir de vous faire plaisir.

Je ferme la grosse parenthèse et je reviens à ce qui nous préoccupe pour le moment, j'ai nommé "La Polyphonie". Ce sujet va être un peu plus compliqué, même si très peu de calcul entrera en jeu. Il va falloir découper le travail en deux grandes parties. En effet, le Midi et l'Audio vont tout deux avoir pas mal de travail. Commençons donc par le Midi.

Il va falloir retenir tout ce qui est nécessaire à chaque note jouée. Pour cela, je vais créer une structure ..... Voyons nous sommes en train de programmer en C++, ne serait il pas plus intéressent de travailler avec des classes? Bon, je me suis convaincu. C'est le moment où les classes vont prendre une belle part de notre synthétiseur.

Réfléchissons peu mais réfléchissons bien... Il nous faut:

  • Une note de musique (0-127) pour connaître la fréquence.
  • Un volume (0-127) pour la vélocité et plus tard l'aftertouch
Pour le moment, c'est tout ce que l'on a en entrée.

Pour la sortie, on aura besoin:
  • Un baseSound

Si on imagine que l'on peut jouer 128 sons en même temps comme certain synthétiseur moderne, il va falloir faire attention au nombre de calculs. Je vais donc remplacer une partie de mes calculs par une table des notes.

Il va falloir modifier l'existant pour pouvoir gérer toutes ces entrées, mais aussi il faudra mixer tous ces nouveaux son ensemble sans perte, sans distorsion. Je sens que nous allons bien nous amuser maintenant. Les choses sérieuses vont commencer.

Après cette marche à suivre, je vais écrire trois articles:

  • La création de la classe
  • La gestion du midi et la mise à jour de la classe
  • L'utilisation de la classe pour créer les sons et puis les mixer ensemble
A bientôt!

Dagal.

Aucun commentaire:

Enregistrer un commentaire