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 22/03/2013, à 21:00

temps

[résolu] Langage C pour la lecture d'un fichier

Bonjour,
Je voudrais créer un lecteur de fichier texte qui pointe vers une bibliothèque audio que j'ai créée pour obtenir de la synthèse vocale.
En format texte, la bibliothèque est ici convertisseur de fichier texte en format audio et je vais bientot ajouter un répertoire compressé qui contient les valeurs en binaire après filtration de l'inutile. En d'autres mots, ma bibliothèque est beaucoup plus légère que ce qui se trouve derrière le lien.

Est-ce que quelqu'un a une idée de comment écrire un code en langage C qui arrive à différencier les syllabes ?

Cordialement

Dernière modification par temps (Le 27/04/2013, à 06:58)


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 22/03/2013, à 21:35

Braun

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Je ne dois pas comprendre car en français on ne peut pas lire un texte sans une analyse sémantique de la phrase.
Je cite les exemples classiques, "les vieux chiens, mais on peut remplacer le s par un t" de Philippe Geluck ou "les poules du couvent couvent"... 
Et si tu veux une analyse sémantique, je ne vois guère que Lisp

Dernière modification par Braun (Le 22/03/2013, à 21:36)

Hors ligne

#3 Le 22/03/2013, à 21:58

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Merci pour la réponse, je pars vraiment d'un iota,
je vais commencer à m'orienter vers une analyse sémantique "Lisp",
comme dab, je posterai les code dans le fil

Après un début de recherche sur l'analyse sémantique, il s'avère que cette information n'est pas vraiment ouverte, et n'est utile que pour le mieux, le top, ce que l'on fait à la fin et qui demande beaucoup de moyen.
Je préfère commencer par le début, la partie ou on produit beaucoup sans trop d'effort et qui donne l'essentiel, car dans une conversation, ce n'est pas une syllabe couverte par un bruit ou mal prononcée qui empêche de comprendre le sens général.
En d'autres mots, avant de chercher le sens de la phrase, il faut en premier que j'arrive à découper les mots en syllabe en langage C. Pour découper en mots, il y a les espaces et la ponctuation.
Donc je peux dire
ouvre ce fichier
va chercher le premier caractère
va chercher le deuxième caractère
compare s'il vont ensemble
si oui va chercher le troisième caractère
si non lit le premier caractère en allant chercher dans la banque audio ce caractère
...


Cordialement

Dernière modification par temps (Le 23/03/2013, à 00:20)


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 23/03/2013, à 10:57

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Je viens d'ajouter quelques sons dans la banque audio en plus il y a des liens entre les sons de base, prenez en exemple le son "b" ajouter une simple durée sur le front descendant et vous obtenez le son "f", c'est la même chose avec le son "s" sauf que le son 'f' est légèrement plus doux.
de plus j'ai pu m’apercevoir en testant que les sons tac ou dac, pouvaient être jouer en ajoutant le son "ta" + le son "c" et en ajoutant le son "da" + le son "c" 
J'ai commencé l'identification de quelques mots, je mettrais en ligne l'application avant la fin du week-end je pense.
j'en suis pas encore à des phrases simples, puisque je découvre encore les lois d'association de base, mais les liens sont loin d'être ce que j'imaginais.
J'ai commencé le code qui ouvre le fichier texte qui identifie la syllabe parmi de bibliothèques de syllabe, et qui va lire le fichier audio correspondant dans la bibliothèque de syllabe (celle que je crée en mode texte donné dans le lien plus haut, on remarquera que j'arrive facilement en mode texte à être 50 fois plus léger que tu wav , alors même que dans ma bibliothèque je suis en binaire bien plus léger, j'ai aussi mis en ligne le convertisseur texte binaire).
J'en suis à fixer les règles de séparation des syllabes,
Je vais mettre en premier si pas de voyelle continuer,
ensuite déterminer les éléments qui arrête une syllabe à coup sur comme l'espace et certaines consonnes.
Il va falloir réfléchir, toute participation est la bienvenue.
Cordialement

Dernière modification par temps (Le 24/03/2013, à 01:34)


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

#5 Le 30/03/2013, à 23:23

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Voici quelques nouvelles du projet. Je pense que vouloir travailler directement sur les syllabes est trop ambitieux, je garde ça pour une future amélioration.
J'ai encore agrandi la banque audio en format joa(format texte facilement modifiable) , il y a un lien pour le convertir en point jo.
J'ai ajouter une forme d'écriture en escalier de manière à diminuer 2/5 du poids des fichiers jo
et j'ai un peu avancé sur le lecteur tous formats en .jo, l'identification du nombre d'octets par front se fait dans l'entête, il ne me reste qu'à transférer les codes des autres formes d'écriture et de récupérer les améliorations que j'ai un peu dispersé partout.
J'ai presque fini le comparateur de mot qui va permettre de lire automatiquement un texte (en fait je mets en mémoire le dernier mot lu, je le cherche dans la bibliothèque audio, et je lance sa lecture puis je passe au mot suivant.
Tout retour de test ou d'information constructive est le bienvenue.
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 11/04/2013, à 19:16

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Après une recherche d'info, sur un autre fil, et quelques test pour arrêter un format "jo", voici ou j'en suis. Je dois ajuster la première fonction, c'est un premier jet pour marqué l'idée de controle. Je continue en même temps à créer la bibliothèque que je place sur mon site, mais chaque utilisateur linux peut modifier à sa voix, ou en mode texte, les codes sont en ligne.
ici
et ici

      
      
/**pour*compiler*le*fichier*lire_texte.c***faire***/
/**gcc lire_texte.c -o lire_texte -Wall***/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/***fonction*controle*motlu*existe*dans*bibliotheque***/
/***j'envoie des pointeurs dans les fonctions, sinon sa marche pas, je sais pas pourquoi***/

int fonctioncontrole(int *verifi, char * controleur) {  /**1acco**/

	char controleur3[30];
	char controleur1 [30] ;
	char controleur2 [30] ;
	sprintf(controleur1, "%s%s", controleur, "\n");
FILE* controle = NULL;

controle = fopen("biblio.txt", "r");

if (controle != NULL)
{ /**2acco**/
while(fgets(controleur3,30,controle))
{  /***3acco***/
	sprintf(controleur2, "%s", controleur3);
int voir;
voir = strcmp(controleur1,controleur2);
if(voir == 0)
{ *verifi = 1;}

} /**fin*3acco***/
} /**fin*2acco***/

return *verifi;
} /**fin*1acco***/

/**fin*fonction*controle*motlu*existe*dans*bibliotheque***/

/********fonction**poidsmax******/
/**variante***int fonctionpoidsmax(int argc, char ** argv , int poidsmax) {****/
int fonctionpoidsmax(int argc, char *argv[],int poidsmax) {
     char kitai;
	int combien, poids;
combien = 0;
poids = 1;
poidsmax = 1;
 /*j ouvre mon fichier & lire*/
  FILE* jojo = NULL;
  jojo = fopen(argv[1], "r"); 
  if(jojo == NULL){
    exit(1);
  } 
while ((kitai = fgetc(jojo)) != EOF  )
        {
	poids++;
         if (poidsmax < poids)
         {  poidsmax = poids;}
         if ((kitai == ' ') || (kitai == ',' ) || (kitai == '.') || (kitai  ==  '?' ) || (kitai  ==  '!' ))
         {  combien++;
		poids = 1;}

        } 
        fclose(jojo); 
return poidsmax ;
} 
/******fin*fonction*poidsmax********/




void fonctionmotlujoawav (char * mot) {  
	int melangeCetCpp1;
       melangeCetCpp1 = system((char *)mot);
	if (melangeCetCpp1 == EOF)
return ;
}  



int main(int argc, char *argv[]) {
      

	int poidsmax = 80;
	char motlu[poidsmax] ;
	char * extension = ".jo";
	char * action = "./lecteur ";
	int melangeCetCpp;
	char mot [30] ;
      fonctionpoidsmax(argc, argv, poidsmax);
  /*j ouvre mon fichier & lire*/
  FILE* jojo = NULL;
  jojo = fopen(argv[1], "r"); 
  if(jojo == NULL){
    exit(1);
  } 
      



        fscanf ( jojo, "%s", motlu);  

/*****envoie**fonction***controle**bib**/
	int  verifi = 2;
	char controleur [30] ;
	sprintf(controleur, "%s", motlu);

	 fonctioncontrole(&verifi, controleur);  
  if(verifi == 2){
printf("%s\n","Ce mot n'est pas dans la bibliotheque");
 /**   exit(1);**/
  } 
else
{
/****fin**controle**bib***/


	sprintf(mot, "%s%s%s", action, motlu, extension);
	fonctionmotlujoawav(mot);  
        melangeCetCpp = system("xdg-open joris.wav");
	if (melangeCetCpp == EOF);
}
        fclose(jojo);  
      
        return 0 ;
      
    }  

Cordialement

Dernière modification par temps (Le 15/04/2013, à 03:05)


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

#7 Le 15/04/2013, à 22:57

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Je continue d'avancer dans l'analyse d'un fichier pour pouvoir le lire à l'aide du synthétiseur vocal au format jo. J'ai une erreur de dépassement de tableau à corriger 
Si quelqu'un veut venir travailler sur cette partie du projet, qui peut être utilisé avec tous les formats audio, il est le bienvenue.

*** stack smashing detected ***: ./lire_texte terminated
Abandon (core dumped)

Mais voici le code qui prépare la séparation des mots en lettre ou après trie en syllabes

      
      
/**pour*compiler*le*fichier*lire_texte.c***faire***/
/**gcc lire_texte.c -o lire_texte -Wall***/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int  fonctionmotcomposer(int *verifi, char * controleur) {  /**1acco**/





return *verifi;
} /**fin*1acco***/

/***fonction*controle*motlu*existe*dans*bibliotheque***/
/***j'envoie des pointeurs dans les fonctions, sinon sa marche pas, je sais pas pourquoi***/

int fonctioncontrole(int *verifi, char * controleur) {  /**1acco**/

	char controleur3[30];
	char controleur1 [30] ;
	char controleur2 [30] ;
/*	sprintf(controleur1, "%s", controleur);*/
	sprintf(controleur1, "%s%s", controleur, "\n");
FILE* controle = NULL;

controle = fopen("biblio.txt", "r");

if (controle != NULL)
{ /**2acco**/

while (fscanf(controle, "%s", controleur3) != EOF) 
{  /***3acco***/
	sprintf(controleur2, "%s%s", controleur3,"\0");
printf("%s\n",controleur1);
printf("%s\n",controleur2);
int voir;
voir = strcmp(controleur1,controleur2);
if(voir == 0)
{ *verifi = 1;}

} /**fin*3acco***/
} /**fin*2acco***/
printf("%d\n",*verifi);
return *verifi;
} /**fin*1acco***/

/**fin*fonction*controle*motlu*existe*dans*bibliotheque***/

/********fonction**poidsmax******/
/**variante***int fonctionpoidsmax(int argc, char ** argv , int poidsmax) {****/
int fonctionpoidsmax(int argc, char *argv[],int poidsmax) {
     char kitai;
	int combien, poids;
combien = 0;
poids = 1;
poidsmax = 1;
 /*j ouvre mon fichier & lire*/
  FILE* jojo = NULL;
  jojo = fopen(argv[1], "r"); 
  if(jojo == NULL){
    exit(1);
  } 
while ((kitai = fgetc(jojo)) != EOF  )
        {
	poids++;
         if (poidsmax < poids)
         {  poidsmax = poids;}
         if ((kitai == ' ') || (kitai == ',' ) || (kitai == '.') || (kitai  ==  '?' ) || (kitai  ==  '!' ))
         {  combien++;
		poids = 1;}

        } 
        fclose(jojo); 
return poidsmax ;
} 
/******fin*fonction*poidsmax********/




void fonctionmotlujoawav (char * mot) {  
	int melangeCetCpp1;
       melangeCetCpp1 = system((char *)mot);
	if (melangeCetCpp1 == EOF)
return ;
}  



int main(int argc, char *argv[]) {
      
	int ou = 0;
	int poidsmax = 80;
	char motlu[poidsmax] ;
	char * extension = ".jo";
	char * action = "./lecteur ";
	int melangeCetCpp;
	char mot [30] ;
	char qui;
      fonctionpoidsmax(argc, argv, poidsmax);
  /*j ouvre mon fichier & lire*/
  FILE* jojo = NULL;
  jojo = fopen(argv[1], "r"); 
  if(jojo == NULL){
    exit(1);
  } 
      
while ( ( qui = fgetc( jojo ) ) != EOF )
        
        {




  if (qui != ' ')
{
motlu[ou] = qui;
ou++;
}

else
{
ou = 0;


/*****envoie**fonction***controle**bib**/
	int  verifi = 2;
	char controleur [30] ;
	sprintf(controleur, "%s", motlu);

	 fonctioncontrole(&verifi, controleur);  
  if(verifi == 2){
	 fonctionmotcomposer(&verifi, controleur);
  if(verifi == 3){
printf("%s\n","Ce mot n'est pas dans la bibliotheque");
 /**   exit(1);**/
		}
  } 
else
{
/****fin**controle**bib***/


	sprintf(mot, "%s%s%s", action, motlu, extension);
	fonctionmotlujoawav(mot);  
        melangeCetCpp = system("xdg-open joris.wav");
	if (melangeCetCpp == EOF);
}
} /***fin du else du ou != de ' '***/
        }  /*while (qui != EOF);*jusqua la fin du texte*/
        fclose(jojo);  
      
        return 0 ;
      
    }  

Dernière modification par temps (Le 18/04/2013, à 11:43)


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 19/04/2013, à 21:21

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Quelques nouvelles du projet.
En premier le synthétiseur va travailler en lisant lettre par lettre et puis analyser si il peut la prononcer seul ou si elle fait partie d'un son composé en exemple le son "ou".

Les problèmes rencontrés actuellement sont en premier que la lecture du fichier texte est beaucoup plus rapide que celle du lecteur audio, d'ou il faut que j'arrive à synchroniser la lecture du fichier texte avec un témoin de fin du lecteur audio, ou faire un tampon pour gérer, mais je ne sais pas encore comment récupérer l'info de fin du lecteur audio.
En deuxième quand j'utilise la fonction system("xdg-open joris.wav"); avec vlc, chaque lecture d'une nouvelle lettre ouvre un nouveau vlc, je ne sais pas comment refermer vlc après chaque lecture, ou au moins ne pas en ouvrir un nouveau. En plus je crois que cette fonction ne marche plus avec le lecteur audio natif d'ubuntu.
Je ne sais pas si je ne vais pas faire comme au début il y a trois ans et intégrer mon propre lecteur audio pour éviter ces problèmes. En attendant, je vais faire une pause sur le projet et travailler sur les sons de bases de la bibliothèque, surtout les consonnes qui sont assez simples mais nombreuses.
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

#9 Le 20/04/2013, à 10:20

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Pour le projet, je vais utiliser la librairie sox, que je placerai plus tard directement dans le répertoire du projet. En attendant celle-ci se trouve déja sur mon ubuntu.
Ainsi quand je place à la fin du convertisseur du format jo à wav, la ligne system("play joris.wav");  à la place de system("xdg-open joris.wav"); , le système fonctionne très bien car c'est sox qui prend la main et est prévue pour fonctionner en ligne de commande.

joris.wav:

 File Size: 80.0k     Bit Rate: 706k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit   
Samplerate: 44100Hz      
Replaygain: off         
  Duration: 00:00:00.91  

In:100%  00:00:00.91 [00:00:00.00] Out:40.0k [      |      ] Hd:1.8 Clip:0    
Done.

En fait, avant j'avais deux applications, une pour convertir du jo en wav et une pour lire le fichier texte, ce que je fait c'est que je mets ces deux fonctions dans la même application pour avoir le retour de lecture audio, et j'utilise sox en ligne de commande pour lire l'audio. En d'autres mots, maintenant ça marche, je n'ai plus qu'à continuer à créer la bibliothèque de base au format jo, et ensuite compresser tout ça pour créer un lien de téléchargement. Tout apport de fichier en ".jo" 2 octets (1 pour l'amplitude et un pour la durée) est le bienvenue.

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

#10 Le 23/04/2013, à 07:03

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Peu après mon dernier poste, j'ai ajouté un tampon comme annoncé plus haut. Ce tampon sert à concaténer les lettres des mots avant lecture audio, ll permet aussi d'avoir une plus grande fluidité de lecture car une des lois audio de l'effet mémoire fait que les ondes d''une consonne ont besoin de celles d'une voyelle pour pouvoir être entendue, c'est un peu comme un catalyseur, il ne sert qu'au démarrage de la réaction, ce qui va donner l'effet à la voyelle qui suit. Et bien le fait d'avoir créer un tampon par mot lu permet d'avoir une plus grande harmonie entre ces poids insignifiant de consomme qui vont donner un sens à ces mastodontes de voyelles.
Actuellement l'application est donc composée de quatre fonctions, une pour le play par sox,  une qui convertie le format jo en un format compatible aux cartes son du moment, un fichier de traitement des lettres et de la zone tampon, et le main. Il ne me restera qu'à ajouter une cinquième fonction pour le cas des lettres associées genre oi" ou "ph", je pense utiliser un fonction de trie par swicht en utilisant un tampon provisoire dans le tampon des mots.
La page du code est toujours ici http://letime.net/vocale
La librairie sox est une dépendance en attendant que je l'intègre, j'essaierai toutefois avant les RMLL d'avoir la carte audio linux elle est presque finie, une histoire de réglage et de temps.
Pour revenir sur les consonnes, il y en a qui n'existent pas vraiment. Elles sont plutot une manière de démarrer les ondes de la voyelle. J'avais indiqué sur le forum qu'il suffisait d'ajouter un léger espace au milieu du son d'une voyelle pour obtenir le son "T" (j'avais ajouter en indication que plusieurs causes peuvent avoir le même effet) , voici pourquoi, quand nous démarrons très brusquement les formes d'onde d'une voyelle nous obtenons le claquement du son "T", ainsi pour produire un son "T" il faut modifier la manière de démarrer la voyelle qui suit. Toujours avec cette même propriété, les sons "B" "D" "P" vont se décliner en fonction de la brusquesse du démarrage des ondes de la voyelle, ces consonnes ne fonctionnent pas du tout comme le son "C" qui lui est un claquement indépendant, qu'il suffit d'ajouter et qui se décompose facilement par "C"+ autre voyelle.
Ceci se traduit pour le synthetiseur vocal au format jo, qu'il faut considérer le son "TA" comme un son composé, pour le produire il y a plusieurs techniques, soit mettre directement dans la bibliothèque un son "TA" soit tout simplement modifier le début du son "A" en enlevant les premières formes d'onde pour qu'il démarre brusquement produisant par la même le son "TA", ou encore ...
Je pense que ce qui serait le plus simple c'est de créer une bibliothèque de voyelle adaptée, ainsi la lecture de la lettre "T" ne serait qu'une fonction qui enlève les premières ondes à la voyelle de manière à créer le son "T" en démarrant sur un front brusquement
Cordialement

Dernière modification par temps (Le 23/04/2013, à 08:50)


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

#11 Le 25/04/2013, à 01:50

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Je pourrai avoir un synthétiseur fonctionnel au format dès maintenant, mais ça ne m’intéresse pas, car pour cela il faudrait que j'imite chaque syllabe possible et ce n'est pas dans une démarche humaine, ou encore de la modélisation. Comme je l'ai montré sur un autre fil à l'aide d'un tableau, certaines consonne ne sont en fait qu'une manière particulière de commencer les ondes d'une voyelle (une traduction d'une forme d'équilibre entre les cinq dimensions principales intervenant dans les ondes audio). Mon intention est de mettre en mémoire une valeur particulière à chaque fois qu'on rencontre une de ces consonnes, puis de concaténer les son de la voyelle qui suit et ensuite d'aller vérifier la valeur en mémoire et selon la valeur rencontrée, utiliser sed pour aller modifier la voyelle pour qu'elle produise le son consonne/voyelle désiré.

Je pourrai même utiliser le même fichier pour plusieurs voyelles comme le U et le I qui son très proche, mais ce serait plus pour le fun que par utilité contrairement à ce que je fais pour les consonnes "qui ne sont que directrice de début".

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

#12 Le 27/04/2013, à 06:56

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Bonjour,
Je poste en résolu car j'ai fini l'application qui permet d'avoir une lecture audio à partir d'un fichier texte.
Il est possible à chacun de créer ses propres intonation soit en modifiant les fichiers audio tampon avec SED soit en modifiant la base en fichier texte joa, j'ai mis les codes de conversion pour pouvoir le faire.
Le code est donné (limité à linux) il est possible de l'améliorer à se convenance en exemple dire que le mot soit lu quand il y a un "." actuellement le mot est lu quans on rencontre un espace dans le texte.
Le but de ce fil était surtout de pouvoir lire en audio un fichier texte et l'objectif est réalisé.
Le tout est toujours ici
Je ferai peut-être plus tard plusieurs versions de synthétiseur vocal mais en premier il faut que j'apprenne à jouer avec SED et ensuite que je joue avec les équilibres des dimensions en manipulant chacune leurs propres lois, et comme il n'existe pas encore d'outils à par ceux que j'ai créé c'est pas évident.
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

#13 Le 28/04/2013, à 16:35

temps

Re : [résolu] Langage C pour la lecture d'un fichier

Je vais reprendre le code d'identification des lettres car actuellement je rencontre un  problème avec les accents.
Si on regarde de plus près je lis le fichier texte en récupérant des int (des symboles construits sur des chiffres)
je manipule ces int pour les transformer en char (des symboles construits sur des lettres, c'est plus lourd)
ensuite j'envoie l'information dans la fonction de traitement pour savoir quel son il faut prononcer,
dès que la fonction récupère les char elle fait en premier une boucle de manière à tout remette en int pour pouvoir gérer les switch d'actions.
Au passage de ces manip, mes accents deviennent des "0" soit des sons "A" dans ma boucle d'identification.

En d'autres mots, je transforme les int que je récupère en char pour ensuite faire un boucle pour les retransformer en int, autant envoyer directement des int dans la fonction de traitement, je vais donc entièrement reprendre le code la semaine prochaine.

Pour répondre aux cas de sémantique cités au début du fil, les sons "n" et " t " n'existe pas en eux même, il ne sont qu'une manière de commencer le son suivant, donc ils ne s'entendent pas quand on les place à la fin d'un verbe "couvent", si c'est un nom et que le son "an" doit être prononcé, il suffit de mettre en mémoire "actif" à chaque fois que nous avons un article "du""le" .. qui fait prononcé "en" "an". Je pense qu'avec quelque règles dans le switch, je dois pouvoir régler ça sans faire de sémantique.

En exemple de l'effet accent :

josi@josi:~/Abadiejoris/1$ ./synthe lit.txt 
la lettre lu est 115
indique-pos 18
la lettre lu est 195
indique-pos 0
la lettre lu est 169
indique-pos 0
la lettre lu est 32
indique-pos 26

joris.wav:

Le son s est 18 dans la boucle case 18 du switch, mais au début c'était déja un int
Le son "é" est 0 dans la boucle qui est normalement le son a, alors qu'il devrait être "28" dans a boucle, il lit 195 et 169 (deux int)
ensuite on retrouve bien l'espace 26 dans la boucle lu 32

En attendant la reprise tout en int, je place un filtre sur 195 et j'utilise d'autres symboles comme $ pour remplacer les accents.

Pour ceux qui reprennent la bibliothèque des sons de base, il faut faire attention que c'est un tout lié par plusieurs systèmes aux lois différentes en équilibre, en exemple si on crée son son "S" assez fort , les voyelles étant créées aussi assez fort donne le bon son "S", mais si on ajoute une voyelle prononcée moins fort, le son "S" devient un son "F"

Un autre exemple si on veut créer un espace sans son, il faut que celui-ci soit composé d'ondes aléatoires changeant de faible amplitude, car si nous reprenons le même front d'onde, nous lui donnons un force qui va être entendue comme un bruit de fond.

Cordialement

Dernière modification par temps (Le 29/04/2013, à 12:09)


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