lmfab106 support des U.E. des piano virtuels

joris Abadiejoris Abadie

Adnforme.cpp :

L'application lmfab a été conçu pour initier les plus jeunes enfants au concept de programmation informatique en utilisant l'attirance de pouvoir créer avec facilité des piano virtuels inédits.
Le fichier Adnforme sert à indiquer comment nous manipulons les plateaux d'équilibre
#include "AdnForme.h"
// Génère les fichiers c.jo et c.joa
void genereFichierJo(char c)
{

jo joc = mesjo[c-'a'];

  // Nom du fichier jo
  char nomfichierjo[32];
  snprintf(nomfichierjo, 32, "%c.jo", c);
  // Nom du fichier joa
  char nomfichierjoa[32];
  snprintf(nomfichierjoa, 32, "%c.joa", c);

  // Fichier jo
  FILE* fichierjo;
  if (!(fichierjo = fopen(nomfichierjo, "wb")))
   {
    exit(-1);
   }
  // Fichier joa
  FILE* fichierjoa;
  if (!(fichierjoa = fopen(nomfichierjoa, "wb")))
   {
    exit(-1);
   }
/******************************fin*partie*fixe************/
// ici commence la zone de travail pour l'apprenant
//Nous allons utiliser les boucles du for en langage c pour produire les différents sons.
//Imaginer un gaulois qui marche, il va rencontrer plusieurs paysages prédéterminés.
//pour les sons, il en est de même, nous allons rencontrer plusieurs plateaux en équilibre 
//selon le chemin emprunté et les valeurs placées dans les plateaux d'équilibre.
//lmfab104 est un chemin de huit fronts qui augmente l'amplitude, fait un plateau modulo 5, puis diminue l'amplitude.


// Etape 1
//Nous indiquons ici combien de fois nous allons augmenter l'amplitude
    for(int laforcehbase = joc.laforceh; laforcehbase > 0; laforcehbase--)
     {
      for(int i=0; i<8; i++)
       {
//ici nous appliquons le changement de la valeur d'amplitude du front tous les 8 fronts
        if(i%2)
         joc.amplitude[i] -= joc.changeamplitude[i];
        else
         joc.amplitude[i] += joc.changeamplitude[i];

//les 2 lignes suivantes écrivent les fichiers audio, le premier en binaire, l'autre en ascii
          fprintf(fichierjo,  "%c%c",    (char)joc.amplitude[i], (char)joc.dureefront[i]);
          fprintf(fichierjoa, "%d %d\n", (unsigned char)joc.amplitude[i], (unsigned char)joc.dureefront[i]);
       }
     }

// Etape 2

// la nous créons un plateau de 8 front sans variation d'amplitude


int basculeDe1 = joc.nbtremolo * 8;
int basculeDe2 = basculeDe1 - 1;
int basculeDe3 = basculeDe1 * 2 - 1;
int basculeDe5 = 0;

    for(int laforcehbase = joc.laforceb; laforcehbase > 0; laforcehbase--)
     {



      for(int i=0; i<8; i++)
       {

//nous créons ici un trémolo de nbtremolo, comme c-est sur 8 fronts une bascule à nbtremolo*8 
//avec une vinaigrette l'amplitude et la durée varient à l'inverse
if(basculeDe5basculeDe2)
{
joc.dureefront[i] -= joc.changedureefront[i];
joc.amplitude[i] += joc.changeamplitudep[i];
}
basculeDe5++;
if(basculeDe5>basculeDe3)
basculeDe5 = 0;


//les 2 lignes suivantes écrivent les fichiers audio, le premier en binaire, l'autre en ascii
          fprintf(fichierjo,  "%c%c",    (char)joc.amplitude[i], (char)joc.dureefront[i]);
          fprintf(fichierjoa, "%d %d\n", (unsigned char)joc.amplitude[i], (unsigned char)joc.dureefront[i]);
       }
     }

// Etape 3

    // la nous reprenons la premiere forme en changeant le sens pour revenir aux valeurs de départ

    for(int laforcehbase = joc.laforceh; laforcehbase > 0; laforcehbase--)
     {
      for(int i=0; i<8; i++)
       {
//ici nous appliquons le changement de la valeur d'amplitude du front tous les 8 fronts
        if(i%2)
         joc.amplitude[i] += joc.changeamplitude[i];
        else
         joc.amplitude[i] -= joc.changeamplitude[i];

         joc.dureefront[i] += joc.changedureefront[i];
// création d'une décurité afin que la durée ne soit jamais supérieur à 240
	if (joc.dureefront[i]>240)
	joc.dureefront[i] = 240;

//les 2 lignes suivantes écrivent les fichiers audio, le premier en binaire, l'autre en ascii
          fprintf(fichierjo,  "%c%c",    (char)joc.amplitude[i], (char)joc.dureefront[i]);
          fprintf(fichierjoa, "%d %d\n", (unsigned char)joc.amplitude[i], (unsigned char)joc.dureefront[i]);
       }
     }

// fin de la zone de travail de l'apprenant
/************************************************************************/
  fclose(fichierjo);
  fclose(fichierjoa);
}


fronts.cpp :

Le fichier fronts sert à placer les valeurs dans les plateaux d'équilibre manipulés
Chaque groupe de 8 données correspond à une note différente, en exemple pour la lettre a la première donnée est 7.
#include "fronts.h"
#include "jo.h"

jo clavier32[26] = {
   { // a touche1
    7, // laforceh
    21, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {56, 57, 58, 59, 60, 61, 62, 63}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },

   { // b touche25
    7, // laforceh
    109, // laforceb
    3, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {8, 9, 10, 11, 12, 13, 14, 15}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },



   { // c touche23
    7, // laforceh
    81, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {12, 13, 14, 15, 16, 17, 18, 19}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },

   { // d touche13
    7, // laforceh
    35, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {32, 33, 34, 35, 36, 37, 38, 39}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // e touche3
    7, // laforceh
    23, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {52, 53, 54, 55, 56, 57, 58, 59}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront 
   },

   { // f touche14
    7, // laforceh
    37, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {30, 31, 32, 33, 34, 35, 36, 37}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // g touche15
    7, // laforceh
    40, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {28, 29, 30, 31, 32, 33, 34, 35}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // h touche16
    7, // laforceh
    42, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {26, 27, 28, 29, 30, 31, 32, 33}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // i touche8
    7, // laforceh
    27, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {42, 43, 44, 45, 46, 47, 48, 49}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // j touche17
    7, // laforceh
    45, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {24, 25, 26, 27, 28, 29, 30, 31}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // k touche18
    7, // laforceh
    49, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {22, 23, 24, 25, 26, 27, 28, 29}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // l touche19
    7, // laforceh
    53, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {20, 21, 22, 23, 24, 25, 26, 27}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // m touche20
    7, // laforceh
    58, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {18, 19, 20, 21, 22, 23, 24, 25}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },

   { // n touche26
    7, // laforceh
    132, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {6, 7, 8, 9, 10, 11, 12, 13}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },



   { // o touche9
    7, // laforceh
    29, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {40, 41, 42, 43, 44, 45, 46, 47}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },



   { // p touche10
    7, // laforceh
    30, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {38, 39, 40, 41, 42, 43, 44, 45}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // q touche11
    7, // laforceh
    32, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {36, 37, 38, 39, 40, 41, 42, 43}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // r touche4
    7, // laforceh
    23, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {50, 51, 52, 53, 54, 55, 56, 57}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront 
   },

   { // s touche12
    7, // laforceh
    33, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {34, 35, 36, 37, 38, 39, 40, 41}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // t touche5
    7, // laforceh
    24, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {48, 49, 50, 51, 52, 53, 54, 55}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront 
   },


   { // u touche7    
    7, // laforceh
    26, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {44, 45, 46, 47, 48, 49, 50, 51}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // v touche24
    7, // laforceh
    93, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {10, 11, 12, 13, 14, 15, 16, 17}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // w touche21
    7, // laforceh
    64, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {16, 17, 18, 19, 20, 21, 22, 23}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },

   { // x touche22
    7, // laforceh
    71, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {14, 15, 16, 17, 18, 19, 20, 21}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront
   },


   { // y touche6    
    7, // laforceh
    25, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {46, 47, 48, 49, 50, 51, 52, 53}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront 
   },


   { // z touche2   
    7, // laforceh
    22, // laforceb
    5, // nombre de tremolo
    {129, 128, 129, 128, 129, 128, 129, 128}, // amplitude
    {54, 55, 56, 57, 58, 59, 60, 61}, // dureefront
    {16, 16 , 8, 8 , 4, 4, 2, 2}, // varamplitude
    {2, 2 , 4, 4, 8, 8, 16, 16}, // varamplitudeplateau
    {1, 1, 1, 1, 1, 1, 1, 1} // vardureefront 
   }
};

jo *mesjo = clavier32;
Pour écouter les notes de lmfab106, c'est ici


Lmfab est en hommage à Debian-facile qui a corrigé le code ; ce qui a permis d'avoir la structure qui permet l'enseignement
This article is licensed under the GNU Free Documentation License