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 31/03/2013, à 18:26

temps

[résolu] variable dans systeme en langage C

Bonjour je voudrais mettre une variable dans système en langage C, mais je n'y arrive pas est-ce que quelqu'un peu m'aider ?
Voici le code que j'ai essayé en premier

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

fonctionmotlujoawav (argc,argv) {  
return 0 ;
}     


    int main(argc,argv) {  
      
	char motlu[80] ;
	int melangeCetCpp;
      
        FILE *f = fopen("textealire.txt", "r");  
      
        fscanf ( f, "%s", motlu);  
	fonctionmotlujoawav(argc, argv);  
        melangeCetCpp = system("xdg-open ('motlu').wav");
	if (melangeCetCpp == EOF)
        fclose(f);  
      
        return 0 ;
      
    }    

j'obtiens une erreur

Syntax error: word unexpected (expecting ")")

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


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 31/03/2013, à 21:05

Haleth

Re : [résolu] variable dans systeme en langage C

fonctionmotlujoawav (argc,argv) {  
return 0 ;
}     

C'est pas du C.

EDIT: au temps pour moi, c'est juste du C ignoble ..

Dernière modification par Haleth (Le 31/03/2013, à 21:18)


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 31/03/2013, à 21:15

Korak

Re : [résolu] variable dans systeme en langage C

Bonjour,

Comment compiles-tu ton code source en C?

Personnellement, j'utilise la commande:

gcc -o test test.c -Wall

Où test.c est mon fichier source en C et test est le fichier exécutable résultant de la compilation.

Donne le retour complet de la compilation.

J'ai essayé de compiler ton code avec la commande donnée ci-dessus et ça donne:

be@CompalFL90:~/Programmes et exercices en C$ gcc -o test test.c -Wall
test.c:5:1: attention : return type defaults to ‘int’ [-Wreturn-type]
be@CompalFL90:~/Programmes et exercices en C$

Et quand je lance le fichier compilé:

be@CompalFL90:~/Programmes et exercices en C$ ./test
Erreur de segmentation (core dumped)
be@CompalFL90:~/Programmes et exercices en C$

Bref, un drôle de truc.

Dernière modification par Korak (Le 31/03/2013, à 21:21)


OS: Ubuntu 24.04 64 bits + Windows 11 64 bits en dualboot (BIOS UEFI, Secure Boot activé et table de partitions GPT)
PC portable HP 17-CP0308NF   Processeur: AMD Ryzen 7 5700U avec carte graphique AMD Lucienne intégrée au processeur.   Mémoire vive: 16 Go RAM
Quand vous ne trouvez pas la solution à un problème, cherchez des pistes menant à la solution !

Hors ligne

#4 Le 31/03/2013, à 21:55

telliam

Re : [résolu] variable dans systeme en langage C

Il faut que tu contruises la chaine de caractères que tu vas passer a system() avec des sprintf.
Sinon attention avec ton scanf si tu rentres une chaine de caractères supérieur a 80 caractères tu vas faire un débordement de tableaux.


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

Hors ligne

#5 Le 01/04/2013, à 02:49

temps

Re : [résolu] variable dans systeme en langage C

Merci pour la réponse telliam, je vais regarder de ce coté

Pour répondre à Korak

C'est normal, il faut savoir qu'en C si on appelle un fichier qui n'existe pas sans mettre les protections, nous obtenons la réponse indiquée.
Le but ici est de créer une application réservée sous linux qui va permettre de créer à chacun son propre système de synthèse vocale ou d'utiliser un de ceux offert par un autre tux.

L'objectif de la première étape est de :
ouvrir en lecture un fichier.txt
faire une boucle de lecture sur chaque mot,
demander de convertir en wav le fichier audio correspondant se trouvant dans la bibliothèque au format jo
utiliser la fonction system pour lire le wav
et d'effacer le wav du mot joué.

La simplicité aurait été de mettre dans la bibliothèque le nom de fichier audio au format jo, sans extension (c'est ce que j'avais fait dans ma première version)
j'ai déja placé sur mon site les modéliseur, les convertisseurs des 10 formats jo possibles et je suis entrain de créer un lecteur compatible tous formats jo, mais mais la curiosité est ainsi, que j'ai pensé pour la compréhension de l'application que chacun puisse voir en ouvrant la bibliothèque que les fichiers contenus sont sous ce format.

Puisque la conversion retourne un fichier nommé joris.wav, je n'ai pas le problème avec le lecteur de wav, mais je vais avoir le problème avec le lecteur qui convertit le fichier audio au format jo en wav, voici le code actuel qui ne fonctionne pas

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


int fonctionmotlujoawav (argc,argv,mot) {  
	int melangeCetCpp1;
       melangeCetCpp1 = system((char *)mot);
	if (melangeCetCpp1 == EOF)
return 0 ;
}     


    int main(argc,argv) {  
      
	char motlu[80] ;
	char extension[4] = {".jo"};
	char action[11] = {"./lecteur "};
	int melangeCetCpp;
	char mot [84] ;
      
        FILE *f = fopen("textealire.txt", "r");  
      
        fscanf ( f, "%s", motlu);  

	sprintf(mot, "%s%s%s", action, motlu, extension);
	fonctionmotlujoawav(argc, argv, mot);  
        melangeCetCpp = system("xdg-open joris.wav");

	if (melangeCetCpp == EOF)
        fclose(f);  
      
        return 0 ;
      
    }  

Cordialement

Dernière modification par temps (Le 01/04/2013, à 16:59)


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 01/04/2013, à 08:20

temps

Re : [résolu] variable dans systeme en langage C

De manière à éviter les erreurs, je vais ajouter plusieurs fonctions avant le main,
en premier un compteur de mot  par ligne qui en même temps calculera la taille maximale du tableau
en deuxième un contrôleur qui vérifiera si le mot existe bien dans la bibliothèque audio
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

#7 Le 01/04/2013, à 22:22

Melrock

Re : [résolu] variable dans systeme en langage C

int fonctionmotlujoawav (argc,argv,mot) {  
	int melangeCetCpp1;
       melangeCetCpp1 = system((char *)mot);
	if (melangeCetCpp1 == EOF)
return 0 ;
}

Ta fonction "fonctionmotlumachintruc" (on a pas idée d'imaginer des noms pareil) est mal définie : tu ne donne pas le type des arguments.
Et pourquoi diable passes-tu argc et argv en arguments puisque tu ne t'en sers pas ?
Il faudrait plutôt :

int fonctionmotlujoawav (char * mot) {

et pour l'appel :

fonctionmotlujoawav(mot);  

Plus loin :

	char extension[4] = {".jo"};
	char action[11] = {"./lecteur "};

La syntaxe est incohérente : tu définis des tableaux de caractères que tu l'initialises avec des tableaux de chaînes de caractères contenant chacun une seule chaîne. J'aurais écrit :

	char * extension = ".jo";
	char * action[11] = "./lecteur ";

Et c'est bizarre cette variable "melangeCetCpp" : Ton programme est en C pur, sans la moindre trace de C++ ...
Cordialement smile


Tout problème a sa solution, donc s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#8 Le 02/04/2013, à 16:16

temps

Re : [résolu] variable dans systeme en langage C

Bonjour, Merci pour les réponses qui m'ont été bien utiles.
Je poste en résolu ce fil puisque la solution a été donnée, je continuerai à donner les codes sur le fil que j'ai ouvert concernant la construction d'un synthétiseur vocale customisable. Voici le code qui regroupe les solutions apportées sur le fil.

/*pour utiliser l'application faire dans un terminal
gcc lance.c -o lance
puis placer l'executable avec votre fichier texte et faite
./lance votrefichier texte
*/


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


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


    int main(argc,argv) {  
      
	char motlu[80] ;
	char * extension = ".jo";
	char * action = "./lecteur ";
	int melangeCetCpp;
	char mot [84] ;
      
  /*j ouvre mon fichier & lire*/
  FILE* jojo = NULL;
  jojo = fopen(argv[1], "r"); 
  if(jojo == NULL){
    printf("Ce fichier ne va pas %s\n", argv[1]);
    exit(1);
  } 
      
        fscanf ( jojo, "%s", motlu);  

	sprintf(mot, "%s%s%s", action, motlu, extension);
	fonctionmotlujoawav(mot);  
        melangeCetCpp = system("xdg-open joris.wav");

	if (melangeCetCpp == EOF)
        fclose(f);  
      
        return 0 ;
      
    }  

Pour que le code fonctionne il faut qu'il soit dans le même répertoire que le lecteur qui convertit en wav et aussi les fichiers de la bibliothèque audio au format jo

Dernière modification par temps (Le 02/04/2013, à 19:46)


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

telliam

Re : [résolu] variable dans systeme en langage C

ca aurait été plus simple avec un simple script.


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

Hors ligne

#10 Le 05/04/2013, à 11:57

temps

Re : [résolu] variable dans systeme en langage C

Oui, c'est vrai, si je devais arrêter là.
Mais j'ai déja créé deux nouvelles fonctions que je dois tester,
c'est un peu en pause car je suis entrain d'affiner le format qui va servir à la bibliothèque.
Au début, j'avais pris le format 5 octets par front, ce qui donnait une meilleur qualité que le wav, mais selon pouvait peser presque autant qu'un mp3 même si en général il était 10 fois plus léger.

J'en suis à tester un format "jo" à deux octets par front, un octet pour la durée, et un octet pour la force du front "jo ou encore la valeur qui donne forme de la variation", ça marche bien mais avant de me lancer dans la création de la bibliothèque (beaucoup de travail), j'ai envie d'affiner la possibilité d'utiliser un format à un seul octet par front, en d'autres mots d'utiliser une forme de variation standart à jo à 63% et de jouer sur les durées pour reproduire les lois des sons. Puisque c'est de la modélisation, et que plusieurs causes peuvent avoir le même effets, je vais essayer dans profiter, mais je suis pas sure d'y arriver.

La page à 2 octets par front est ici

La boucle en langage C pour reproduire les lois des sons sera toujours le format audio jo le plus léger en l'état de mes expérimentations.

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

#11 Le 07/04/2013, à 18:03

temps

Re : [résolu] variable dans systeme en langage C

Bonjour,
Après un week-end de test, voici le résultat, c'est possible avec un seul octet par front, mais il m'a fallut une journée pour équilibrer les cinq facteurs des ondes en n'en manipulant qu'un pour obtenir qu'un seul son, le "on". En d'autres mots, beaucoup trop de travail, j'ai donc décidé de construire la bibliothèque avec deux octets par fronts, au plus facile, ce qui remets en cause le format choisit en premier.
Finalement, je vais prendre le premier format que j'ai créé il y a plus de trois ans, à savoir un octet pour la position de l'amplitude et plus l'amplitude sera élevé et plus la force sera importante à jo constant, et un octet pour la valeur de la durée. L'adaptation aux cartes audio actuelles sera toujours en sortie wav 44100 positions par seconde.
La page à 2 octets par front est ici et je vais corriger les codes en conséquence, et au passage reprendre le lecteur qui est une copie d'une version très ancienne sans amélioration.


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 08/04/2013, à 12:36

telliam

Re : [résolu] variable dans systeme en langage C

J'ai regardé vite fait le code, il y a de sérieux risques de plantage.


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

Hors ligne

#13 Le 08/04/2013, à 16:40

temps

Re : [résolu] variable dans systeme en langage C

Pour le lecteur (de jo au wav)
Oui, c'est un vieux code en copier/coller et adapté rapidement.
Il faut y ajouter des if pour éviter les dépassements (255), ou les éventuelles "0" égarés, et aussi enlever la partie des cas impair, en effet il suffit de faire la moitié de la durée (calcul des positions) et puis la durée totale moins la moitié de la durée pour traiter les cas pair et impair en une seule fois. Autrement je ne vois pas comment ça peut planter. De toutes façon, je vais essayer de mettre le bon code ce soir, car je n'ai pas encore eu le temps de mettre le format 01, à deux octets (le premier pour l'amplitude, le deuxième pour la durée avec correction de la force de l'onde à l'aide de l'amplitude).

Pour le lecteur de fichier texte, j'ai pas encore eu le temps d'ajouter les deux fonctions, la première regarde la taille max du tableau par mot lu par ligne, la deuxième controle si le mot existe bien dans la bibliothèque. Idem, je voulais mettre ça en ligne ce week-end mais j'ai travaillé sur mon site internet car je suis passé d'une des premières place à la position 1700 et je n'ai pas encore compris vraiment pourquoi.
Le lecteur de fichier texte il ne faut pas encore l'utiliser, il n'est capable de lire qu'un seul mot et encore si celui-ci se trouve bien dans la bibliothèque.

Il faut faire attention aussi si c'est du 64bits, car en 64 il y a une petite modif à faire sur certains int les mettre en long int ou l'inverse.

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 08/04/2013, à 17:24

telliam

Re : [résolu] variable dans systeme en langage C

sans parler de l'allocation en pile de tableaux.


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

Hors ligne

#15 Le 08/04/2013, à 21:01

temps

Re : [résolu] variable dans systeme en langage C

allocation en pile de tableaux
Qu'est-ce que c'est ?
Sur le premier code en bash que j'avais fait il y a plus de trois ans, j'avais trouvé l'astuce de concaténer, chaque octet placé dans un répertoire, j'avais écris tous les 256 cas avec ghex, je pense que c'est une technique intéressante que j'aurai pu garder .
Ensuite je suis passé en C et j'ai mis mes 256 cas dans un tableau, j'ai jamais eu de problèmes avec depuis presque trois ans et demi, j'ai même utiliser plusieurs techniques avec les tableaux.
Ce qui travaillent avec moi, ont repris la technique des tableaux avec le C++ et qt, sans que cela pose de problème.
Les tableaux me semblent très simple à manipuler, c'est pratique et permet d'obtenir la compatibilité quelque soit la technologie rencontré par mon format.
Le temps de finir de jouer sous 13.04 et je vais écrire les codes. J'arrête sur ce fil, et repasse sur celui que j'ai ouvert pour le synthétiseur.

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

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

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

/********fonction**poidsmax***||  (kitai !='.') || (kitai != '?' ) || (kitai != '!' )***/
int fonctionpoidsmax(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;}

        } 

return poidsmax ;
} 
/******fin*fonction*poidsmax********/




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



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



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

	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 11/04/2013, à 11:49)


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