évolution du projet pythoneon

Introduction

La synthèse sonore est un jeu d'algorithmes écrits en un langage informatique artificiel. Pour refaire une synthèse à l'identique, il faut avoir la description des algorithmes et quelques informations supplémentaires: largeur du mot de calcul (réel ou entier, 32 bits ou 64 bits) et la fréquence d'échantillonnage (44100 Hz en qualité cd-audio).

Le bricolage que favorisent les logiciels issus des concepts industriels en vogue n'offre aucune certitude quant à la possibilité de refaire les mêmes synthèses sonores: l'habitude est de stocker les résultats et de négliger les processus de synthèse.

Un langage clair et lisible tel que Python offre la possibilité de décrire tous les algorithmes - la synthèse sonore ne fait pas exception.

Sur les langages spécialisés, quels qu'ils soient, Python a l'avantage d'être d'un usage général et d'avoir des ramifications dans la vie informatique quotidienne - ce qu'on ne peut dire de systèmes fermés tels que Max/SMP ou autres qui n'offrent d'autre perspective que de faire la musique préconisée par luers concepteurs. Un élève qui apprend Max/SMP ne saura rien faire d'autre que du Max/SMP. Pour l'élève qui apprend Python s'ouvre un univers informatique sans bornes - sinon celle de l'informatique elle-même.

Débuts du projet

En 2003, il fallait d'abord acquérir les bases du langage en démontrant que la synthèse sonore était possible et qu'elle pouvait évoluer et se perfectionner. Mais immédiatement le texte source était considéré comme une partition de musique (rien à voir avec la partition d'un disque dur). Tant que les pièces de musique étaient de petites dimensions et les fonctions et classes disponibles qu'en petit nombre, la gestion générale du projet était facile: j'optais pour l'organisation des modules comme il est d'usage dans la plupart des projets informatiques.

En 2006 fut décidé de prendre la partition de musique instrumentales comme modèle pour une classe qui permette de placer les évènements sonores aussi bien en temps absolu qu'en temps relatif et aussi à maîtriser les variations continues de tempo - problème que les logiciels de l'informatique industrielle n'abordent qu'en toute obscurité.

Craignant, sans raison valable, que les temps de calcul du Python de base seraient insupportablement longs, j'ai utilisé des extensions de calcul rapide: d'abord Numarray, puis Numpy. Je pensai aussi que les outils tels que l'Analyse de Fourier et la convolution (qui font partie de ces extensions) allaient énormément agrandir les perspectives musicales.

Il n'en est rien ou pas grand'chose: les timbres construits par des méthodes beaucoup plus simples tels que le filtrage sont esthétiquement bien plus gratifiants (ceci dit l'Analyse de Fourier permet justement de concevoir des filtres - il ne faut pas être ingrat).

La description reproductible d'une synthèse sonore n'a pas du tout les mêmes objectifs que l'amélioration ou le perfectionnement des calculs (qui font partie de la pratique scientifique ou industrielle): un évènement esthétique est tel qu'il est. Il ne peut être amélioré que par l'auteur. Donc il ne faut pas courir avec l'évolution des algorithmes; il ne faut pas utiliser d'algorithmes susceptibles d'être améliorés, par ex. générateurs de nombres aléatoires (module random).

L'organisation en arborescence du paquet pythoneon pouvait être maintenue, mais il fallait songer à réunir l'ensemble des fonctions et classes utilisées par une pièce donnée en deux ou trois modules qui n'évolueraient plus à partir d'une date donnée. Ce virage fut pris en 2007-2008.

Concepts actuels

La partie R & D, comme dans chaque multinationale qui se respecte, s'effectue selon une arborescence bien hiérarchisée. Une telle structure permet au projet d'évoluer assez sereinement. Quand il s'agit de mettre à jour sur un autre site (ordinateur ou serveur), il suffit d'y envoyer le paquet de pythons.

La partition algorithmique d'une pièce de musique, par contre, doit rester telle qu'elle a été à une date donnée. Il faut donc prendre quelques précautions, en particulier, n'utiliser qu'un langage dont la grammaire est bien connue et aussi de n'en utiliser que les structures syntaxiques facilement reproductibles en d'autres langages. (Ces remarques ne concernent pas les auteurs qui ne s'inquiètent pas de cette pérennité.)

En fin de compte, la partition algorithmique d'une pièce de musique comprend en général trois modules: un module pour les fonctions et classes générales de base, un module pour les timbres et le module finale pour l'organisation des sons dans le temps et dans l'espace.

Les fonctions et classes générales qui ont une fonction de contrôle, par ex. affichage ou écoute de résultats intermédiaires, peuvent être exclues de la partition finale.

De même, les fonctions et classes dont le rôle est de servir d'interface entre les algorithmes descriptifs des évènements sonores et leur relation avec le système d'exploitations, la sortie audio, la fabrication de supports etc. doivent être soigneusement dissociées de la partition proprement dite.

Pour que cette concentration des fonctions et classes utilisées puisse se faire, on a deux solutions: soit écrire un extracteur qui travaille sans faille, soit respecter certaines règles de rédaction - donc un extracteur plus facile. J'opte pour la 2ème solution.

Conséquences

Lors des imports qui ne font appel aux modules du projet lui-même, éviter les imports non explicites tels que

from tralala import *
import beaucoup as _b

... mais écrire explicitement

from tralala import ceci, cela, cettechose, ceciaussi
from beaucoup import a, b, c, d

On peut continuer à importer comme d'habitude les fonctions et classes qui font partie du langage. Par contre, celles qui font partie du projet personnel et qui sont effectivement utilisées dans une partition sont clairement explicitées. Un extracteur les rassemblera en deux ou trois modules.

Sommaire

Imprimer du code Python
Évolution du projet pythoneon
Utiliser l'Analyse de Fourier
'A Primer on Scientific Programming with Python' de H.P. Langtangen


Copyright 2010 (c) René Bastian - rbastian (arrobe) free.fr