Bonjour,
Dans lmfab106, j'explique comment régler la fonction modulo en fonction de la durée totale du son joué.
/******************************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];
//nous diminuons la durée des fronts
// joc.dureefront[i] -= joc.changedureefront[i];
// création d'une décurité afin que la durée ne soit jamais inférieure à 6
// if (joc.dureefront[i]<6)
// joc.dureefront[i] = 6;
//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 5, comme c-est sur 8 fronts une bascule à 5*8 = 40
//avec une vinaigrette l'amplitude et la durée varient à l'inverse
if(basculeDe5<basculeDe1)
{
joc.dureefront[i] += joc.changedureefront[i];
joc.amplitude[i] -= joc.changeamplitudep[i];
}
if(basculeDe5>basculeDe2)
{
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
/************************************************************************/
Pour augmenter la force du modulo nous pouvons écrire les états d'équilibres sous cette forme dabs fronts.cpp
#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
68, // 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
65, // 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
44, // 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
24, // 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
48, // 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
51, // 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
55, // 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
33, // 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
56, // 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
58, // 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
59, // 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
60, // 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
70, // 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
35, // 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
37, // 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
39, // 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
26, // 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
42, // 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
28, // 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
32, // 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
66, // 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
62, // 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
63, // 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
30, // 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;
Sur ce code il ne reste qu'à ajuster les valeurs de laforceb pour que les notes aient toutes la même durée, j'hésite à faire un code pour que cela s'ajuste automatiquement (simple calcul de la somme des durée des 8 fonts placé proportionnelement entre chaque note), ou laisser l'apprenant créer la durer totale de chaque note comme il l'entend.
Cordialement