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 07/02/2015, à 22:10

temps

Générateur de voyelle

Bonjour,

En premier voici une forme qui génère le son "i"

// son "i" api 301
  int tabamplitude[38] =
    { 
132, 123, 142, 121, 144, 124, 140, 123, 141, 121, 137, 125, 130, 124, 130, 122, 126, 122, 129, 118, 130, 120, 128, 122, 131, 121, 131, 126, 129, 126, 131, 125, 128, 123, 127, 123, 128, 128
};
  int tabdurer[38] =
    { 
7, 6, 7, 7, 7, 6, 7, 6, 7, 7, 7, 7, 5, 6, 6, 5, 7, 4, 6, 7, 7, 6, 7, 6, 6, 6, 7, 7, 5, 5, 5, 8, 7, 14, 9, 6, 21, 2

};

Il est possible de remplacer des variables à la place de valeurs de manière à obtenir un son moins monotone ou bien même passer à la forme d'une autre voyelle

En deuxième voici l'API 304, forme de son A

// creation de la voyelle "A" API 304

  int tabamplitude[combientaba] =
    { 
132, 130, 142, 113, 142, 123, 127, 120, 138, 120, 128, 127, 131, 122, 128, 124, 128
};

  int tabdurer[combientabd] =
    { 
23, 8, 23, 22, 18, 20, 9, 16, 24, 21, 21, 12, 11, 23, 23, 16, 18
};

En exemple dans SequenBaul AdnForme57, les deux premier octets indiquent que nous appelons la forme indiquée dessus qui crée le son "i",  les 8 octets suivants servent à gérer la forme du son "i" je vais certainement améliorer cette gestion pour inclure des ondulations et avoir un son moins statique. Les six octets suivants servent à sélectionner la consonne.

Le code actuel de AdNForme57 qui génère le son "i" est :

#include "AdnForme57.h"

// Génère les fichiers c.jo et c.joa
void genereFichierJo57(int piste,int quelpiano2,int quelpiano3,int quelpiano4,int quelpiano5,int quelpiano6,int quelpiano7,int quelpiano8,int quelpiano9,int quelpiano10,int quelpiano11,int quelpiano12,int quelpiano13,int quelpiano14,int quelpiano15)
{

choixconsonne(piste, quelpiano11, quelpiano12, quelpiano13, quelpiano14, quelpiano15);


  // Nom du fichier jo
  char nomfichierjo[32];
  snprintf(nomfichierjo, 32, "%d.jo", piste);
  // Fichier jo
  FILE* fichierjo;
  if (!(fichierjo = fopen(nomfichierjo, "ab")))
   {
    exit(-1);
   }
// ici commence la zone de travail pour l'apprenant


//multiplie


// son "i" api 301
  int tabamplitude[38] =
    { 
132, 123, 142, 121, 144, 124, 140, 123, 141, 121, 137, 125, 130, 124, 130, 122, 126, 122, 129, 118, 130, 120, 128, 122, 131, 121, 131, 126, 129, 126, 131, 125, 128, 123, 127, 123, 128, 128

};





  int tabdurer[38] =
    { 
7, 6, 7, 7, 7, 6, 7, 6, 7, 7, 7, 7, 5, 6, 6, 5, 7, 4, 6, 7, 7, 6, 7, 6, 6, 6, 7, 7, 5, 5, 5, 8, 7, 14, 9, 6, 21, 2
};

int	 pass1=0;
int	 pass2=0;
int	 pass3=0;
int	 pass4=0;

//multiplie

    for(int laforcebbase = quelpiano10; laforcebbase > 0; laforcebbase--)
     {
	 pass3=0;
	 pass4=0;


if(quelpiano9>2)

   {


  for(int varit = 0; varit<quelpiano6; varit++)
   {
  for(int positiontab = 0; positiontab<38; positiontab++)
   {

        if(positiontab%2)
                {
	pass1 = tabamplitude[positiontab] - int(tabamplitude[positiontab] * 0.01 * quelpiano2);
	pass2 = int(tabdurer[positiontab] * 0.01 * quelpiano3);

	}
        else
                {
	pass1 = tabamplitude[positiontab] + int(tabamplitude[positiontab] * 0.01 * quelpiano4);
	pass2 = int(tabdurer[positiontab] * 0.01 * quelpiano5);
	}

	pass1 += pass3;
	pass2 += (int)(pass2 *0.01*pass4);

	if(pass1<16)
	pass1=16;

	if(pass2<3)
	pass2=3;

	if(pass1 >239)
	pass1=239;

	if(pass2>250)
	pass2=250;

        fprintf(fichierjo,  "%c%c",    (char)(pass1), (char)(pass2));

}//fin boucle for
	pass3 +=quelpiano7;
	pass4 +=quelpiano8;
}//fin boucle varit

  for(int varit = 0; varit<quelpiano6-1; varit++)
   {
	pass3 -=quelpiano7;
	pass4 -=quelpiano8;
  for(int positiontab = 0; positiontab<38; positiontab++)
   {

        if(positiontab%2)
                {
	pass1 = tabamplitude[positiontab] - int(tabamplitude[positiontab] * 0.01 * quelpiano2);
	pass2 = int(tabdurer[positiontab] * 0.01 * quelpiano3);

	}
        else
                {
	pass1 = tabamplitude[positiontab] + int(tabamplitude[positiontab] * 0.01 * quelpiano4);
	pass2 = int(tabdurer[positiontab] * 0.01 * quelpiano5);
	}

	pass1 += pass3;
	pass2 += (int)(pass2 *0.01*pass4);

	if(pass1<16)
	pass1=16;

	if(pass2<3)
	pass2=3;

	if(pass1 >239)
	pass1=239;

	if(pass2>250)
	pass2=250;

        fprintf(fichierjo,  "%c%c",    (char)(pass1), (char)(pass2));

}//fin boucle for

}//fin boucle varit

    for(int pourquelpiano9 = quelpiano9; pourquelpiano9 > 3; pourquelpiano9--)
     {
        fprintf(fichierjo,  "%c%c",    (char)127, (char)250);
     }

}
else
   {

  for(int varit = 0; varit<quelpiano6; varit++)
   {

  for(int positiontab = 0; positiontab<38; positiontab++)
   {



        if(positiontab%2)
                {
	pass1 = tabamplitude[positiontab] - int(tabamplitude[positiontab] * 0.01 * quelpiano2);
	pass2 = int(tabdurer[positiontab] + (tabdurer[positiontab]* 0.01 * quelpiano3));

	}
        else
                {
	pass1 = tabamplitude[positiontab] + int(tabamplitude[positiontab] * 0.01 * quelpiano4);
	pass2 = int(tabdurer[positiontab] + (tabdurer[positiontab] * 0.01 * quelpiano5));
	}

	pass1 += pass3;
	pass2 += (int)(pass2 *0.01*pass4);

	if(pass1<16)
	pass1=16;

	if(pass2<3)
	pass2=3;

	if(pass1 >239)
	pass1=239;

	if(pass2>250)
	pass2=250;

        fprintf(fichierjo,  "%c%c",    (char)(pass1), (char)(pass2));

}//fin boucle for
	pass3 +=quelpiano7;
	pass4 +=quelpiano8;
}//fin boucle varit
  for(int varit = 0; varit<quelpiano6-1; varit++)
   {
	pass3 -=quelpiano7;
	pass4 -=quelpiano8;
  for(int positiontab = 0; positiontab<38; positiontab++)
   {



        if(positiontab%2)
                {
	pass1 = tabamplitude[positiontab] - int(tabamplitude[positiontab] * 0.01 * quelpiano2);
	pass2 = int(tabdurer[positiontab] + (tabdurer[positiontab]* 0.01 * quelpiano3));

	}
        else
                {
	pass1 = tabamplitude[positiontab] + int(tabamplitude[positiontab] * 0.01 * quelpiano4);
	pass2 = int(tabdurer[positiontab] + (tabdurer[positiontab] * 0.01 * quelpiano5));
	}

	pass1 += pass3;
	pass2 += (int)(pass2 *0.01*pass4);

	if(pass1<16)
	pass1=16;

	if(pass2<3)
	pass2=3;

	if(pass1 >239)
	pass1=239;

	if(pass2>250)
	pass2=250;

        fprintf(fichierjo,  "%c%c",    (char)(pass1), (char)(pass2));

}//fin boucle for

}//fin boucle varit
}//




// fin  multiplie
   }
 
  fclose(fichierjo);

       }

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

Nous remarquons qu'il y a 2 techniques de variations, une est pour changer les voyelles en suivant les voyelles de même nature de forme, l'autre pour des voix masculines aux voix féminines.

Dernière modification par temps (Le 10/02/2015, à 00:32)


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 13/02/2015, à 08:20

temps

Re : Générateur de voyelle

Bonjour,
J'ai modifié hier le générateur de voyelles pour reprendre la technique du générateur de consonnes.
En d'autres mots, j'ai mis tous les tableaux des voyelles dans la même classe AdnForme, pour éviter la répétition du traitement voyelle.
L'application qui génère les sons pèse maintenant un peu plus de 300 ko
SequenBaul

J'ai remarqué que la page de documentation sur ubuntu-fr que j'avais créé sur l'application générale lm3jo qui contenait la base de toutes les techniques ( lmfab pour l'apprentissage, pianobaul le piano virtuel, sequenbaul l'outil pour composer et écouter) a été détruite.
Je vais certainement reprendre la page sur un autre forum équivalent et sur ubuntu-fr.org si j'ai un appel du pied de celui-ci pour au moins expliquer comment manipuler la création des différents sons avec les 16 octets qui pilotent tout

Je travaille actuellement sur l'identification des formes premières (lois premières sur les équilibres de dimensions) pour obtenir des voyelles pesant entre 20 et 200 octets)

Je me suis aperçu que la technique utilisée pour la création des voyelles et consonnes permettait de créer les cas beaucoup plus rapidement et d'une manière  bien plus légère qu'en utilisant les boucles seules.
Je vais ouvrir le deuxième octet coté matière (16 octets) pour commencer les tableaux coté phénomène (AdnForme) de 4, de 5, de 6 ... pour obtenir les effets résultant des équilibres entre les différentes lois des dimensions manipulées.
Pour rappel l'application utilise le fait que plusieurs causes peuvent avoir le même effet, sinon il serait impossible de reproduire tous les sons avec seulement 16 octets.

Cordialement

Dernière modification par temps (Le 14/02/2015, à 11:07)


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

#3 Le 28/02/2015, à 04:36

temps

Re : Générateur de voyelle

Bonjour,
Quelques nouvelles du projet.
L'application utilise la BAUL qui se pilote avec 16 octets
Les 2 premiers octets indique les formes de variations et les 14 octets suivant le support qui va créer comment les variations seront reflétées.
J'ai activé le deuxième octet en utilisant des structures.
Je n'ai pas encore rempli toutes les structure, mais dans celles déjà créées, nous avons déjà toutes les voyelles et toutes les formes de voyelles possibles.
Une des techniques possibles pour jouer sur la forme des voyelles est d'utiliser un modulo et répéter 2 fois chaque forme composant la voyelle ( de corriger un peu la duré en l'augmentant de 10% avec l'octet de réglage durées car la technique rend le son un peu plus aigu)
Les voyelles dans les structure sont des enchaînements de formes contrairment aux voyelles trouvées dans l'octet 2 mis à la valeur 1

Actuellement le septième octet sert à régler les 2 forme de modulo (par rapport au centre ou par rapport à lui-même), je suis entrain d'écrire le code pour qu'il puisse servir aussi au marteau et à la licorne

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