Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/11/2014, à 09:52

temps

Optimiser une application

Bonjour,
Je travaille sur une application, la gestion graphique mise à part, qui effectue trois types d'actions.

Le premier type utilise une structure, même s'il est encore possible d'améliorer cela n'apportera pas grand chose.
le deuxième type utilise un sélecteur, même s'il est encore possible d'améliorer cela n'apportera pas grand chose.
Le troisième type utilise 6500 class contenant chacune une fonction différente, c'est sur cette partie que je voudrait tester quelques améliorations.

En premier, je me demande s'il est possible d'intégrer dans une application un compilateur qui ne compile que la class qui vient d'être appelée ?
En d'autre mots, l'idée serait de ne pas compiler les 65k class et que dans l'application selon la class appelée, c'est l'application qui compile la class demandé juste avant utilisation et la jette si une autre class est appelée.
Ainsi l'application au départ de contiendrait qu'une class par défaut au lieu des 65k class remplacée par un tar.gz bien léger.

Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#2 Le 09/11/2014, à 10:00

jplemoine

Re : Optimiser une application

Je ne connais pas beaucoup Java mais je pense que tu peux faire des packages.
Tes classes seront regroupées dans des packages (en nombre plus réduit) d'une manière logique.
Quand tu modifies une classe, seul le package correspondant sera à compiler et à relivrer.
De même qu'il te faut faire des jar au lieu des tar.gz : c'est aussi de la compression sauf qu'à l'execution, la jre peut utiliser le jar tel quel.

NB : 6500 = 6,5k pas  65k.. smile

Dernière modification par jplemoine (Le 09/11/2014, à 10:02)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 09/11/2014, à 12:08

temps

Re : Optimiser une application

Bonjour,
Merci pour la réponse..

Le fait que ce soit possible en java, me laisse un petit espoir en c
l’application est ici https://github.com/temps9/PianoBaul
et ce sont les 65k class AdnForme que je voudrais compiler pour utilisation que quand l'application demande de changer de forme.

Cette technique a pour but d'avoir une application compilée portant en permanence les 65k class, actuellement je n'en ai mis que 40, je teste la faisabilité petit à petit en envisageant à l'approche de la limite plusieurs versions de piano virtuel. Plus j'arriverai à mettre de class, moins j'aurais de version. Le top c'est d'arriver à mettre toutes les class tout en gardant une application très légère.

en arrondissant 65k = 256 expo 2;

Objectif finale avoir 65k * ( 256 expo 14) * 26 sons possible sachant que comme plusieurs causes peuvent avoir le même effet, un très grand nombre de ces sons sont identiques, mais produit de manière différente

Cordialement

N.B. Mon clavier est un peu vieux, les touches sont capricieuses et effacées, faute de frappe c'est bien 65k.

Dernière modification par temps (Le 09/11/2014, à 12:19)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#4 Le 09/11/2014, à 12:57

telliam

Re : Optimiser une application

si c'est du C, la notion de classe n'existe pas.
Si tu as 6500 "class", je pense que c'est sur ce point que tu dois optimiser, avoir autant de fichier C, il y a forcément des choses à factoriser. ou alors ton algo n'est pas au point.
il y a qd mm des outils qui détectent les portions de code identiques.
ensuite optimisation dans quel sens? en temps? en place mémoire sur le disque? en place mémoire lors de l'execution?
compiler à la volée c'est à mon avis une tres tres tres mauvaise idée. Pour être direct, si un mec me proposait ce genre de trucs dans un dev, il quitterait la piece sans que ses pieds touchent le sol :-)
au mieux tu px faire un code qui charge une librairie dynamique "à la volée" et qui appelle un point d"entrée. Mais c'est vraiment la dernière solution.
Pour l'instant factorise ton code et revois ton algo.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#5 Le 09/11/2014, à 13:28

temps

Re : Optimiser une application

Merci pour la réponse.
L'idée est d'utiliser un switch à tiroir pour appeler les formes, la raison en est le temps au détriment du poids.
Pour gérer, je vois trois techniques, la boucle, le switch, la mise en mémoire avec des int, et je pense qu'en alliant le switch et des paliers à l'aide de int, c'est le meilleur compromis entre le poids et la vitesse.
Au sujet des class au début il y a 4 ans, j'utilisais que du C avec la SDL, mais m'étant aperçu que Qt apportait la fonction touche maintenue au clavier, j'utilise pour la gestion graphique du C++, d'ou cette notion de class, bien que plus tard, je referai une version qu'en C.
Au sujet du code dans les formes, il y a bien un point commun sur l'ouverture du fichier pour écrire, mais il n'y a que ça.
Il n'y a pas d'algo, dans cette partie du code, il y a juste différentes manière de marier les boucles.
Pour simplifier, nous pourrions dire que cette partie du code est comme pour les sons, elle trouve sa beauté dans des équilibres particuliers faisant apparaître des effets, ne pouvant être représentés avec l'algèbre donc avec des algo
En d'autres mots encore, deux codes semblant identiques vont avoir des effets bien différents car ils ne travaillent pas sur les même lois. Nous manipulons les équilibres d'une vingtaine de lois avec 2 facteurs et nous jouons sur des effet du genre, que nous produisons un phénomène, qui fait naitre un autre phénomène, qui va amplifier et entretenir le premier phénomène créé. Et ça l'algèbre, les algo, ne savent pas gérer, c'est dans l'écriture différente de chaque forme que c'est géré.

Je vais donc continuer à écrire les formes et quand j'arriverai à une limite, je me concentrerai sur les factorisations, car la construction des formes demande toute mon attention, et je me sens bien incapable de factoriser en même temps.

Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#6 Le 09/11/2014, à 15:54

telliam

Re : Optimiser une application

tu fais souvent ce genre de betise dans ton code :

for (a=a_debut;a<a_fin;a++)
{
switch(toto)
{
 case 1 :
  {
    for (b=b_debut;b<b_fin;b++)
    {
      /// une série de fprintf qui ne dépend pas de a, ni de b
    }
  }
}
}

pour résumer tu mets ton switch/case dans tes boucles ou l'indice de boucle ne sert pas dans le traitement du case.

je serais toi je ferais un truc du genre

max = a_fin;

switch(toto)
{
 case 1 :
  {
    max+= b_fin;
/// au lieu d''écrire dans le fichier j'écris dans un buffer avec des [u]sprintf(buffer,....)[/u]
  }
}
fwrite(buffer,longueur_buffer,max,fichierjo);
}

de cette façon tu ne passes qu'une fois dans le switch case, tu construits qu'une fois ton buffer (fprintf et sprintf sont tres couteux en temps). et tu écris en une seule fois toutes tes informations (ce qui gagne encore du temps), et ça vire 2 boucles.
il faut que tu sors au maximum des boucles et des switch case ce qui n'est pas dépendant de l'indice de la boucle ou du selecteur du switch case.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#7 Le 09/11/2014, à 16:31

temps

Re : Optimiser une application

Bonjour,
Merci pour le retour.
Pourquoi j'écris cette forme de ligne (des boucles de  fprintf) :
j'écris cette forme de ligne car il existe plusieurs techniques pour augmenter la force d'une forme acoustique, la répétition est l'une des techniques possibles. Dans l'effet finale, le son entendue, les équilibres des différentes forces est important, et cette écriture permet de piloter les forces.
Il existe aussi des cas d'utilisation ou je fais légèrement varier le contenue pour les voix humaines, ou vraiment varier pour obtenir d'autres effets.
Quand à la partie du code cité je pense qu'elle doit provenir de sélecteur de touche piano, il faut que regarde mieux.
C'est une partie qui a déjà suivit un grand nettoyage en poids (nombre de ligne de code) quoique les boucles ou les opérations arithmétiques à la place de switch sont toujours à surveillant à cause des temps d’exécution, l'apport de la structure a été apporté à ce moment là, donnant un  coup de fraicheur.

C'est dans quel fichier ? car je n'arrive pas à retrouver le bout de code cité.

Pour la technique, je vais essayer d'écrire la forme suivante en l'utilisant.
Je vais écrire une forme à durée constante en ne travaillant que sur les variations d'amplitudes. Forme 26 fichier AdnForme25.cpp

Cordialement

Dernière modification par temps (Le 09/11/2014, à 16:51)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#8 Le 09/11/2014, à 16:50

telliam

Re : Optimiser une application

je suis partie de  forme9, mais si tu vx donnes nous un fichier au hasard et je te montre comment l'optimiser.
il faut éviter d'ecrire plusieurs fois et de faire plusieurs fprintf si tu vx gagner en temps.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#9 Le 09/11/2014, à 16:53

temps

Re : Optimiser une application

Oui, je veux bien avoir un exemple,

#include "AdnForme24.h"

// Génère les fichiers c.jo et c.joa
void genereFichierJo24(char c)
{

    int mesamplifront[2]; //son du n, la référence
    int mesdurerfront[2]; //son du n, la référence
    int mesvarampli[2]; //son du n, la référence
    int mesvardurer[2]; //son du n, la référence
    int madurer; //son du n, la référence
    int maforceh;
    int maforceb;
    int montremolo;
    int maforceplus;
    int macombiendezonememoire;


   FILE* fichierdesfronts = NULL;

 
    fichierdesfronts = fopen("fronts.txt", "r");
 
    if (fichierdesfronts != NULL)
    {
        fscanf(fichierdesfronts, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d", &mesamplifront[0], &mesamplifront[1], &mesdurerfront[0], &mesdurerfront[1], &mesvarampli[0], &mesvarampli[1], &mesvardurer[0], &mesvardurer[1], &madurer, &maforceh, &maforceb, &montremolo, &maforceplus, &macombiendezonememoire);       
 
        fclose(fichierdesfronts);

    }

/**********************************************/
 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);
   }

// ici commence la zone de travail pour l'apprenant

mesdurerfront[0] = ((joc.lagame * mesdurerfront[0]) * 0.01);
mesdurerfront[1] = ((joc.lagame * mesdurerfront[1]) * 0.01);

int tablex[250]= {120, 60, 40, 30, 24, 20, 17, 15, 13, 12, 11, 10, 9, 9, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int calculpossible = tablex[maforceh-1];
int ajusteur1;
int ajusteur2;

// multiplie
  for(int duree = madurer; duree>0; duree--)
   {

//monte

    for(int laforcebbase = maforceh; laforcebbase > 0; laforcebbase--)
     {

         mesamplifront[1] -= calculpossible;
         mesamplifront[0] += calculpossible;
	
	 // respect des limites
      for(int i=0; i<2; i++)
       {
	if(mesamplifront[i]>239)
	mesamplifront[i] = 239;

	if(mesamplifront[i]<16)
	mesamplifront[i] = 16;	
	}
	ajusteur1 = mesamplifront[0] - 2;
	ajusteur2 = mesamplifront[1] + 2;

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);

    for(int laforcebbasev = maforceplus; laforcebbasev > 0; laforcebbasev--)
     {
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
     }


     }
//plateau tremolo mariage

double vieapropor = 0.01 * macombiendezonememoire;
int vieapropor1 = 128;
int vieapropor2 = 128;
int vieapropor3 = 128;
int vieapropor4 = 128;
int basculeDe1 = montremolo * 2;
int basculeDe2 = basculeDe1 - 1;
int basculeDe3 = basculeDe1 * 2 - 1;
int basculeDe5 = 0;

    for(int laforcebbase = maforceb; laforcebbase > 0; laforcebbase--)
     {

if(basculeDe5<basculeDe1)
{
mesdurerfront[0] -= mesvardurer[0];
mesamplifront[0] -= mesvarampli[0];
ajusteur1 -= mesvarampli[0];
mesdurerfront[1] += mesvardurer[1];
mesamplifront[1] += mesvarampli[1];
ajusteur2 += mesvarampli[1];
}

if(basculeDe5>basculeDe2)
{
mesdurerfront[0] += mesvardurer[0];
mesamplifront[0] += mesvarampli[0];
ajusteur1 += mesvarampli[0];
mesdurerfront[1] -= mesvardurer[1];
mesamplifront[1] -= mesvarampli[1];
ajusteur2 -= mesvarampli[1];
}
basculeDe5++;
if(basculeDe5>basculeDe3)
basculeDe5 = 0;

      for(int i=0; i<2; i++)
       {
	if(mesamplifront[i]>239)
	mesamplifront[i] = 239;

	if(mesamplifront[i]<16)
	mesamplifront[i] = 16;	

	if(mesdurerfront[i]>239)
	mesdurerfront[i] = 239;

	if(mesdurerfront[i]<16)
	mesdurerfront[i] = 16;	
	}

if (mesamplifront[0]>128)
vieapropor1 = ((mesamplifront[0]-128)*vieapropor)+128;

if (ajusteur1>128)
vieapropor2 = ((ajusteur1-128)*vieapropor)+128;

if (mesamplifront[1]>128)
vieapropor3 = ((mesamplifront[1]-128)*vieapropor)+128;

if (ajusteur2>128)
vieapropor4 = ((ajusteur2-128)*vieapropor)+128;

if (mesamplifront[0]<128)
vieapropor1 = 128 - ((128 - mesamplifront[0])*vieapropor);

if (ajusteur1<128)
vieapropor2 = 128 - ((128 -ajusteur1)*vieapropor);

if (mesamplifront[1]<128)
vieapropor3 = 128 - ((128 - mesamplifront[1])*vieapropor);

if (ajusteur2<128)
vieapropor4 = 128 - ((128 -ajusteur2)*vieapropor);




        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
/*********************/

        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor2, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor2, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor4, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor4, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[1]);
/************************/

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[1]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[0]);
/*********************/

        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[1]);

        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor4, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor4, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[0]);
/************************/

    for(int laforcebbasev = maforceplus; laforcebbasev > 0; laforcebbasev--)
     {
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
/*********************/

        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor2, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor2, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor4, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor4, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[1]);
/************************/

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[1]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[0]);
/*********************/

        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor1, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor1, (unsigned char)mesdurerfront[1]);

        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor4, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor4, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)vieapropor3, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)vieapropor3, (unsigned char)mesdurerfront[0]);
/************************/
     }

     }



//descend

    for(int laforcebbase = maforceh - 1; laforcebbase > 0; laforcebbase--)
     {

         mesamplifront[1] += calculpossible;
         mesamplifront[0] -= calculpossible;
	
	 // respect des limites
      for(int i=0; i<2; i++)
       {
	if(mesamplifront[i]>239)
	mesamplifront[i] = 239;

	if(mesamplifront[i]<16)
	mesamplifront[i] = 16;	
	}
	ajusteur1 = mesamplifront[0] - 2;
	ajusteur2 = mesamplifront[1] + 2;

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);

    for(int laforcebbasev = maforceplus; laforcebbasev > 0; laforcebbasev--)
     {
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
     }
     }




// fin  multiplie
   }
 
  fclose(fichierjo);
  fclose(fichierjoa);
}

// fin de la zone de travail de l'apprenant

Cette forme ajuste automatiquement une montée, ensuite permet de jouer sur l'amplitude d'un front en écho.
Elle contient un trémolo réglable et je crois me souvenir que c'est une forme mariage (l'amplitude et la durée varient dans le même sens) beaucoup plus facile à piloter qu'une vinaigrette (variation inverse). La force est réglable, les portes sont rapidement rencontrées ont les distingue quand il apparait des bruits de marteaux acoustiques trop puissant.
En regardant le code, je vois qu'il y a aussi un effet de variation de fronts non réglable d'ordre 2

Cordialement

Dernière modification par temps (Le 09/11/2014, à 17:03)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#10 Le 10/11/2014, à 22:22

telliam

Re : Optimiser une application

par exemple ceci

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);

    for(int laforcebbasev = maforceplus; laforcebbasev > 0; laforcebbasev--)
     {
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur1, (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[0], (char)mesdurerfront[0]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0]);

        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)ajusteur2, (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1]);
        fprintf(fichierjo,  "%c%c",    (char)mesamplifront[1], (char)mesdurerfront[1]);
        fprintf(fichierjoa, "%d %d\n", (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);
     }

peut etre remplacé par :

            char bufferjo[12048];
            char bufferjoa[12048];
            sprintf(bufferjo,  "%c%c""%c%c""%c%c""%c%c""%c%c""%c%c",
                    (char)mesamplifront[0], (char)mesdurerfront[0],
                    (char)ajusteur1, (char)mesdurerfront[0],
                    (char)mesamplifront[0], (char)mesdurerfront[0],
                    (char)mesamplifront[1], (char)mesdurerfront[1],
                    (char)ajusteur2, (char)mesdurerfront[1],
                    (char)mesamplifront[1], (char)mesdurerfront[1]);

            sprintf(bufferjoa, "%d %d\n""%d %d\n""%d %d\n""%d %d\n""%d %d\n""%d %d\n",
                    (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0],
                    (unsigned char)ajusteur1, (unsigned char)mesdurerfront[0],
                    (unsigned char)mesamplifront[0], (unsigned char)mesdurerfront[0],
                    (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1],
                    (unsigned char)ajusteur2, (unsigned char)mesdurerfront[1],
                    (unsigned char)mesamplifront[1], (unsigned char)mesdurerfront[1]);

            fwrite(bufferjo,strlen(bufferjo),maforceplus+1,fichierjo);
            fwrite(bufferjoa,strlen(bufferjoa),maforceplus+1,fichierjoa);

je l'ai fait vite ça, il doit rester des bugs, j'ai pas testé la compilation

Dernière modification par telliam (Le 10/11/2014, à 22:23)


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#11 Le 11/11/2014, à 00:39

temps

Re : Optimiser une application

Merci pour la réponse, je vais tester. J'ai observé qu'en sélectionnant certaines constructions assez longue, il arrivait parfois que la création des 130 notes du piano n'était pas instantanée. Ce serait bien que j'arrive à maîtriser cette technique avant de commencer à mettre les formes pour construire les voix.

Petite question pratique, est-il possible de créer en début que 2 buffer assez grand puis ensuite changer le contenu ?
De manière à n'avoir qu'un seul buffer pour les forces.

A part pour les forces, le contenu des boucles varies, ce qui rend cette technique limité aux forces. J'ai bien pensé à des tableaux, mais comme il y a en théorie 256 puissance 14 cas possibles par forme, et qu'il faudrait refaire le tableau pour chaque forme, la solution des tableaux n'est pas réalisable.

Cordialement

Dernière modification par temps (Le 11/11/2014, à 00:53)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#12 Le 11/11/2014, à 12:21

telliam

Re : Optimiser une application

oui tu px déclarer des buffers assez grand, dans ce cas là, déclare les en static pour éviter d'avoir une pile trop grosse.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#13 Le 11/11/2014, à 14:40

temps

Re : Optimiser une application

Bonjour,
Merci pour la réponse.
Si nous analysons l'origine qui a créée la série AdnForme, elle est éducative, c'est lmfab.
L'aspect éducatif m'a fait écrire les fichiers .joa pour que les apprenants puissent mieux identifier les actions
et le résultat des boucles qu'ils écrivent.
En fait l'écriture du format .joa est totalement inutile dans PianoBaul puisqu'ici c'est un instrument de musique ludique pour les enfants qui est recherché.
Je vais créer un fork allégé, et puis revenir sur comment créer des buffers statics en même temps qu'une recherche de factorisation.
Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#14 Le 17/11/2014, à 21:50

temps

Re : Optimiser une application

Bonjour,
Il faut que j'étudie plus la programmation pour commencer une recherche de factorisation dans la gestion des formes.
J'ai supprimé l'aspect éducatif en enlevant le format audio joa qui permettait de voir le contenue du format jo clairement de manière à avoir une application plus légère.
J'ai aussi ajouté la forme 37 qui permet de manipuler facilement la notion de porte.
En plus de détails,
1- logique pure, nous passons d'un état d'équilibre à une autre état d'équilibre.
2- logique appliquée, les effets sont trop espacés pour avoir une cohérence et donc ça décroche en faisant apparaitre des marteaux acoustiques.
3- Application pratique.
A durées égales (sans variation de durée), selon la pente (la variation d'amplitude) nous aurons l'apparition de marteaux acoustique. Avec une même vitesse de variation à faible durée le son est sans marteau, à forte durée le son est sans marteau, entre près des zones sans marteau, il y a une zone à marteau rapide que nous retrouvons dans de nombreux instrument de musique, et entre il y a une zone parqué par des marteaux acoustique.
La vidéo de démonstration est ici :
http://www.youtube.com/watch?v=iel2lT7eP0E
et ici http://www.youtube.com/watch?v=Jg5dUwqR … wggMIZbCEg

Une fois les notions de force, de vinaigrette, de basculement, d'équilibre entre les pentes et les durées, assimilés nous pouvons créer des chants de voix humaines.

il est à noter que selon comment nous écrivons le paysage, la même forme peut créer une licorne ou  un marteau acoustique. les deux types acoustiques principaux, en totale opposition.

je vais écrire ce soir la forme 38 qui permet de régler la pente par rapport à la  durée toujours constante, de manière à faire toucher du doigt, ce que j'essaie de dire.

Cordialement

Dernière modification par temps (Le 17/11/2014, à 22:03)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne