Pythoneon05

Mise en forme

Avoir des sinus, du bruit et des impulsions ne fait pas encore de musique : il faut varier les hauteurs, les amplitudes et bien d'autres choses.

Profils

Les lignes qu'on peut réaliser par l'informatique sont des droites, des courbes de Bezier, des splines et toutes les courbes descriptibles par des fonctions mathématiques. On peut combiner ces courbes de différentes origines

Il semble qu'il n'y ait pas dans ce domaine des relations récursives comme on en a pour les sinus ou les bruits ; avec une exception : l'évolution du sinus récursif peut être agencée de telle façon qu'on obtienne une variation progressive de l'amplitude.

Ainsi on peut implémenter un algorithme alternant affaiblissements et renforcements de l'amplitude selon des critères de temps et d'amplitude atteinte. Le procédé est intéressant - mais il nous faut encore des outils davantage volontaristes permettant de façonner des droites et des courbes allant de y0 à y1 en un temps dt, comme les fonctions :

L'écriture des éléments de profils se fait habituellement ainsi :

d = [recta, duree, y0, y1]
d = [cubica, duree, y0, pente0, y1, pente1]
d = [curva, duree, y0, y1, courbure]

en tirant parti du fait que Python accepte des fonctions (ou des classes ou des modules ...) comme membres d'une liste (ou d'un tuple, ou d'un dictionnaire).

Le calcul de la courbe se fait par la fonction profil :

courbe = profil([
                  [cubica, duree, y0, pente0, y1, pente1],
                  [recta, duree, y0, y1],
                  ...])

Concevoir mentalement la répartition des durées à l'intérieur d'un profil pour obtenir la durée finale souhaitée est un trop grand effort intellectuel ; je préfère faire faire ce travail par Python en utilisant la classe ProfilBase qui adapte les profils décrits sommairement comme dit ci-dessus aux temps ou nombre de samples souhaités :

descriptionEnveloppe = [
                  ....
                  [cubica, duree, y0, pente0, y1, pente1],
                  [recta, duree, y0, y1],
                  ...] 
enveloppe = ProfilBase(descriptionEnveloppe).temps(duree)

ou

enveloppe = ProfilBase(descriptionEnveloppe).samples(ns)
... la suite (utilisation des profils)...


Sommaire

Pythoneon 01, 02, 03, 04, 05, 06, 07
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 2011 (c) René Bastian - rbastian (arrobe) free.fr