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/05/2013, à 18:10

temps

[résolu] attendre le retour d'une fonction en langage C

Bonjour,
j'ai un code qui ne fonctionne que quand je l'applique à des petits fichiers. Je pense que le problème est due à la vitesse d’exécution.
Pour corriger j'ai placé dans la boucle qui appelle la fonction

while (((qui= fgetc(jojo)) != EOF) &&  (saitfait == 1))/* qui vient chercher tout ce qui bouge*/

dans laquelle j'appelle une fonction qui retourne la valeur saitfait = 1 quand elle à fini,

saitfait = fonctionidentification(argc,argv,quicou);

je pense qu'une fois la boucle lancée elle ne tient pas compte du changement de la valeur de "saitfait".
Est-ce que quelqu'un a une idée pour que la boucle se mettre en pause en attendant que la condition soit satisfaite ?
genre équivalent wait en bash ?
Cordialement

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


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/05/2013, à 19:27

la-dread

Re : [résolu] attendre le retour d'une fonction en langage C

Bonjour,

temps a écrit :

Pour corriger j'ai placé dans la boucle qui appelle la fonction

while (((qui= fgetc(jojo)) != EOF) &&  (saitfait == 1))/* qui vient chercher tout ce qui bouge*/

dans laquelle j'appelle une fonction qui retourne la valeur saitfait = 1 quand elle à fini,

si j'ai bien compris, tu veux arêter ta boucle lorsque satisfait vaut 1.
Dans ce cas ton while ne s'exécute jamais :
J'imagine que tu l'initialise à 0 (ou quelque chose différent de 1) avant ta boucle. Ce qui fait que la deuxième condition de ton test (satisfait == 1) n'est pas satisfaite dès la première itération et tu ne passe jamais dans ta boucle.

Il faudrait simplement que tu change cette condition en (satisfait != 1 ).
Corrige moi si j'ai mal interprété ton problème.

Sinon :

temps a écrit :

je pense qu'une fois la boucle lancée elle ne tient pas compte du changement de la valeur de "saitfait".

un petit printf devrait te donner la réponse à ta question

et :

temps a écrit :

Est-ce que quelqu'un a une idée pour que la boucle se mettre en pause en attendant que la condition soit satisfaite ?
genre équivalent wait en bash ?

regardes du côté de sleep (#include <unistd.h>). Mais je ne vois pas pourquoi mettre en pause ton processus pourra régler ton problème.

++

Hors ligne

#3 Le 22/05/2013, à 22:19

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Merci pour la réponse, la valeur a 2 positions possibles la première nommée 1 qui dit que la boucle peut agir la deuxième nomme 2 qui dit d'attendre

int fonctionidentification(int argc, char *argv[], int quicou)
{  /**acco 1**/
	
	saitfait = 2;

Je suis entrain de travailler sur les objets manipulés car eux aussi influences la sortie, ensuite je testerai afin d'y voir plus claire.
J'avais déja pensé à sleep mais je gardais ça qu'en dernière ressource.

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

#4 Le 23/05/2013, à 12:26

telliam

Re : [résolu] attendre le retour d'une fonction en langage C

déclare le en volatile, mais bon c'est pas tres propre


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

Hors ligne

#5 Le 23/05/2013, à 17:51

la-dread

Re : [résolu] attendre le retour d'une fonction en langage C

Salut,

je vois pas trop ce que tu veux attendre (processus concurrent, quelque chose du genre ?) mais bon.

est ce que rajouter dans ton premier while un petit :

while ( satisfait == 2 )
{
    satisfait = fonctionidentification ( argc, argv, quicou );
}

qui peut aussi s'écrire (tu peux aussi intégrer cette écriture dans ta première boucle) :

while ( fonctionidentification ( argc, argv, quicou ) == 2 )
{
}

ne suffirait pas dans ce cas ? En faisant ça lorsqu'on te dit d'attendre tu n'attends pas réellement mais tu testes en continu si il faut reprendre la boucle.
Ça évite le recours à sleep() et tu reprends la main pour continuer ta boucle plus vite, par contre tu bouffes du CPU en continu juste pour un test...
Je sais pas si ça peux t'aider.

Hors ligne

#6 Le 23/05/2013, à 19:25

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Merci pour la réponse.

je vois pas trop ce que tu veux attendre

La fonction main lit un caractère et l'envoie dans une fonction
la fonction qui reçoit le caractère traite l'information avec des switch qui sont parfois bouclés à l'aide d'un goto
et en plus cette fonction doit parfois aller ouvrir plusieurs fichiers pour aller les concatner dans un fichier tampon avant de renvoyer saitfait à 1.
Voila pourquoi je pense que mon problème provient que du fait que la fonction va beaucou moins vite que le main.

Actuellement je suis entrain de faire le tutoriel qui explique le son de la lettre "B", dès que j'ai fini, je test les solutions proposées.
Je me vois déja pouvoir proposer avec mon asso Montpel'libre dans les hôpitaux des raspberry à ceux qui ont une perte de voix.
Actuellement bibliothèque et application runit, tout doit peser dans les 300 Ko, j'ai bien écris 300 kilo octets un synthétiseur vocal complet.

dsl mon clavier hs joue parfois des tours
Cordialement

Dernière modification par temps (Le 23/05/2013, à 19:31)


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 23/05/2013, à 20:05

la-dread

Re : [résolu] attendre le retour d'une fonction en langage C

temps a écrit :

la fonction qui reçoit le caractère traite l'information avec des switch qui sont parfois bouclés à l'aide d'un goto

Je ne veux pas être trop catégorique dans ce que je vais dire, mais les goto sont quand même selon moi à éviter (il est plus que rare que l'on soit obligé ou qu'on ait une excellente raison d'en utiliser un).
C'est personnel comme conseil mais la majorité des développeurs en C seront de mon avis.

temps a écrit :

Voila pourquoi je pense que mon problème provient que du fait que la fonction va beaucou moins vite que le main.

Ta fonction ne peut pas aller plus vite que le main. Le C est un langage procédural qui exécute les instructions une à une et il ne passe pas à l'instruction suivante tant que la précédente n'est pas terminée. Ce qui veut dire que dans le code :

int main ( int argc, char* argv[] )
{
    foo1();
    foo2();
    
    return 0;
}

foo2 ne peut pas s'exécuter tant que foo1 n'est pas terminée et le main ne pourra se terminer qu'après que foo2 se soit terminée aussi puisque le return est placé après.
Je ne vois donc pas ton problème d'attente en fait.

Hors ligne

#8 Le 23/05/2013, à 21:49

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Bonsoir,
Je testerai demain car j'ai pas fini l'ajustage des équilibres sur les sons de la bibliothèque, je pensais qu'en jouant sur les temps et les effets mémoires, je pouvais facilement adapter les mêmes voyelles aux consonnes ayant besoin de voyelles à démarrage doux (comme le B) et les consonnes ayant besoin d'un démarrage dur (grand front) comme le T (le son T est un espace vide juste devant un front montant très haut).

Je suis même à me demander si je ne vais pas devoir créer deux types pour chaque voyelle 'un pour les consonnes à voyelles douces et un pour les consonnes à voyelles dures, ce n'est que dix fichiers en plus, des reprises légèrement modifies, la bibliothèque ne pèsera pas plus. Et de plus comme il est prévu plus tard de ne plus rien copier mais d'écrire directement dans le fichier tampon à l'aide des lois sans rien concaténer, pour plus tard, cela ne changera rien. Le léger surplus ne durera que le temps qu'il reste une trace d'imitation en allant chercher un son de base déjà écrit.

Si nous tenons compte que nous modélisons 3 paramètres qui manipulent 5 facteurs importants avec seulement deux paramètres, qui en plus dans la nature mixe consonne-directrice/voyelle (donc plus lourd et de moins bonne qualité, si ce fait rend facile la reconnaissance vocale, car avec l'inertie naturelle de la voix ou des instrument de musique il est facile d'identifier la force et ensuite de regarder si il y a un mix en début et quel mix, pour la modlisation ce n'est que des fronts inutiles comme des parasites) la fin de la consonne avec presque un tiers du début de la voyelle , nous pouvons penser que ce n'est qu'un détail d'étape pour accéder plus tard à la séparation totale de toute forme d'imitation, pour ne garder que les système mathématiques réelles représentant au plus facile les lois physiques observées.

En d'autres mots, je reprendrai et testerai ce week-end si ce n'est pas ma manière d'appeler les fonctions qui crée que la technique ne supporte pas les textes long, mais ne supporte actuellement que des phrases.
Cordialement

Dernière modification par temps (Le 23/05/2013, à 22:45)


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 24/05/2013, à 06:46

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Bonjour,
Je reviens plus tot sur le problème car je pense avoir la solution en jouant sur la loi des amplitude les temps et les effets mémoires, c'est juste que j'avais négligée la loi des méta-amplitudes. Il faut que je teste ce week-end

En réponse à la-dread

j'ai une boucle

	while (((qui= fgetc(jojo)) != EOF) &&  (saitfait == 1))/* qui vient chercher tout ce qui bouge*/

qui lit un texte caractère par caractère.
Dans cette boucle, j'ai une fonction

saitfait = fonctionidentification(argc,argv,quicou);

qui concatène un fichier son selon le caractère et qui lance une nouvelle fonction

fonctionconvertisseur(argc,argv);/*je lance la lecture*audio du fichier tampon.jo*/

dès que nous avons un point ou un espace.
Cette fonction convertit mon format audio à la technologie des carte audio actuelle et ensuite lance la lecture audio à l'aide d'une nouvelle fonction

int fonctionlecteur()
{
	ausuivant = system("play joris.wav");
	return ausuivant;
}

Ceci tait ma première technique, mais la lecture du fichier texte tait trop rapide par rapport à la lecture audio. Sinon cette technique marchait très bien sur de court texte.

J'ai donc modifié et ai placé le lancement de la lecture audio en fin du fichier main une fois que le fichier texte était entièrement lu et que le fichier tampon contenait tout le texte à lire de manière à ce que les nouveau son lu par le main n'écrase pas des son avant qu'ils ne soient joués par le lecteur audio.
Et je m’aperçois ou pense qu'il est possible que je perde certaine lettres, mais comme je n'ai pas encore fini d'ajuster les équilibre de la bibliothèque audio je ne peux encore rien affirmer.

En fait parler de séquentiel en langage C, ne peut se faire qu'en parlant des limites d'utilisation, car dès que nous sous traitons il ait facile de faire autre chose que du séquentiel en C, en appelant une fonction c'est le retour de la fonction qui est regardé et non pas la fin de ce qui se passe derrière la fonction.
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 24/05/2013, à 08:12

telliam

Re : [résolu] attendre le retour d'une fonction en langage C

Autre possibilité, tu as pas lu la documentation de la fonction system() et tu as juste un bug.
Si tu vx faire une lib. L'appel a system n'est pas une bonne idée et pas très sécurisé.tu devrais plutôt utiliser une fonction C d'une lib audio qui sait lire un fichier.


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

Hors ligne

#11 Le 25/05/2013, à 10:27

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Bonjour,
j'ai trouvé la solution pour obtenir que les consonnes puissent être compatible avec les voyelles, il faut prendre le son faible cristallin de la voyelle, en fin j'ai testé sur le son "i" ça marche. Je suis donc allé testé le code et effectivement, il y a bien une erreur dans le code car j'ai le son de lettres non appelés qui apparaît.
Au sujet de la bibliothèque audio, j'ai prévue que l'application fonctionne avec "sox" mais je l'intégrerai dans l'application qu'à la fin pour l'instant c'est considéré que comme dépendance. Je pense que sox est un bon choix, j'ai passé presque un an à faire des test sur les bibliothèque audio avant de me rendre compte que c'était la technologie des cartes audio du moment qui était incohérente. ( D'ou ma création de la carte audio linux bas prix haute qualité qui évitera le convertisseur et évitera dépenses d'énergies inutiles ; il ne me manque que l'argent pour pouvoir la diffuser, en attendant pour faire avec l'existant c'est sox.)

De souvenir quand j'avais testé, il doit rester des traces des codes que j'avais mis en ligne, en concurrence largement au dessus, il y avait openAl et sox, mais comme les autres intervenants du projet avaient tous choisit sox, j'ai suivit. Je ne pense pas que le problème vienne de la, mais c'est une bonne idée que je vais suivre d'aller voir les codes retour entre sox et system.

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 25/05/2013, à 18:14

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Bonjour,
Je poste en résolu, le code fonctionne.
Pour faire le bilan du retour d’expérience.
Sox ne renvoie rien ; inutile de faire ( à part le code "0" dans ausuivant pour dire que tout va bien).

ausuivant = system("play joris.wav >sox-dit.txt");

si nous voulons l'avoir en sous main, "multi-tache c'est

ausuivant = system("play joris.wav &");

en bash le & lance la fonction en tache de fond et donc le retour devient la réponse que la commande a bien été lancé.
Sinon c'est effectivement du séquentiel, et donc je suis revenu à mon premier code qui lit mot à mot, j'ai cru que non, car il y avait des erreurs de code et en plus je n'avais pas fait attention que dans ma bibliothèque de sons, certains ne se mariaient pas.
Pour finir le synthétiseur vocal, il faut que j'identifie encore quelques sons, "el, ..." et que je les introduisent dans le code et que j'affine les sons dans la bibliothèque.
Si j'avais du temps, je pense qu'en moins de 20 heures, ça pourrait être fait, car en fait tous ces sons humains sont liés sur le même concept et il est facile de passé du U au I ou du A au O ... il suffit de savoir utiliser un tableur comme celui de open office ensuite d'utiliser mon convertisseur pour avoir son son de base. Mais le temps est une denrée rare, je pense pouvoir donner le projet à l'asso dans environ un mois (projet sur R Py).

Il faudrait aussi que je trouve un prof de français du secondaire pour établir les normes des fonctions dérivées de la langue française, et aussi les nombreux cas que j'ai certainement oublié.
Actuellement j'ai mis les valeurs "actif" au hasard, il serait bien quelles soient construites d'une manière logique du genre les valeurs de telle lettre dans telle série, ou encore les dérivées de second ordre dans telle srie ainsi rien qu'en regardant  la valeur de "actif" on saurait de quelle lettre et en quelle position.

Cordialement

Dernière modification par temps (Le 25/05/2013, à 18:44)


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 25/05/2013, à 22:50

telliam

Re : [résolu] attendre le retour d'une fonction en langage C

C dingue comme je capte que dalle a ce que tu écris.
Au fait tu confonds multi tache et multiprocesseurs. Et si tu mets un & dans un appel system, c'est forcément asynchrone .


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

Hors ligne

#14 Le 26/05/2013, à 10:03

nicolas66

Re : [résolu] attendre le retour d'une fonction en langage C

J'ajouterai que c'est limite pédant comme propos ...


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#15 Le 26/05/2013, à 10:45

telliam

Re : [résolu] attendre le retour d'une fonction en langage C

Rhooooo. Tu dis ça parce que tu as pas compris ;-)


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

Hors ligne

#16 Le 26/05/2013, à 13:39

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Bonjour,
pédant : 4 synonymes.
Synonymes byzantin, cuistre, doctoral, suffisant.

Le premier me plait bien, car la ville entière était entièrement climatisée, il y a presque 2000 ans et possédait pas mal de savoirs qui sont aujourd'hui plus ou moins perdus.
Le second, importe peu car si je suis le contenant, est-ce que cela veut dire que le contenue ne vaut rien ? Ne serait-ce que ce fil qui a apporté une solution au problème rencontré sur les retours de fonction en C ? De plus est que l'utilisateur de la future application devra donner des biens ou pourra profiter d'une technique construite à partir d'ici sans rien devoir en croyance ou en soumissions, est-ce qu'offrir sans rien demander n'est plus un aspect du libre?
Le troisième serte pas, je joue avec les ides et les symboles en reprenant le savoir des bâtisseurs qui m'a été transmis, le terme ne semble pas correspondre.
La quatrième j'en doute, car comment nommer quelqu'un de curieux qui n'arrive même pas à croire en lui-même, je ne suis qu'un homme, mais pas moins. Et du fait que je suis comme Laplace, je n'arrive pas à croire qu'il puisse exister un titre ou un sachant en science d'ou en informatique aussi.

Le sujet du fil était le retour des fonctions en C, je l'applique sur du concret en cherchant à mettre en équilibre deux systèmes mathématiques (celui de la langue française et ses drivées par rapport aux lettres, et celui des forces de fronts acoustiques), j'ai cité l'application pour mieux expliquer mon approche et les problèmes rencontrés, je ne possède rien, je ne sais rien, sinon que ceux qui prétendent savoir en ce domaine nous trompent.
Cordialement

Dernière modification par temps (Le 26/05/2013, à 13:39)


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

#17 Le 26/05/2013, à 13:57

nicolas66

Re : [résolu] attendre le retour d'une fonction en langage C

telliam a écrit :

Rhooooo. Tu dis ça parce que tu as pas compris ;-)

Hum, on va dire ça smile


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#18 Le 26/05/2013, à 19:49

telliam

Re : [résolu] attendre le retour d'une fonction en langage C

Sauf que ton problème n'a rien a voir avec un PB de retour de fonction. Tu utilises un appel système qui n'a jamais garantie une exécution synchrone.
2 ème point la langue francaise n'a jamais été et ne pourra jamais être qualifié de système mathématique.

Autre point : ce qui se conçoit bien, s'énonce clairement.... Et toi tu dois avoir un sacré PB de conception dans ton projet.

Dernier point : personnellement je me fout de ton projet, j'ai beau essayé de m'y intéresser j'y arrive pas. En plus ton charabia pseudo scientifique n'aide pas a la compréhension et chatatouille un peu trop mes connaissances scientifiques.

Alors si tu as un problème C énonce le clairement et ne nous saoule pas avec le pseudo vernis scientifique que tu as l'air de vouloir te donner.

Surtout avec le code que tu nous montres. Qui est très loin d'être exploitable et d'être optimisé : pour être plus clair si un mec de mon équipe me sortait un code pareil et autant bourré de bugs, il ne finirait même pas le mois.



Et pour finir qd qq'un t'aide tu dis merci

Dernière modification par telliam (Le 26/05/2013, à 20:23)


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

Hors ligne

#19 Le 26/05/2013, à 21:17

temps

Re : [résolu] attendre le retour d'une fonction en langage C

Bonsoir,

telliam a écrit :

Sauf que ton problème n'a rien a voir avec un PB de retour de fonction.

Oui et non, ça dépend des infos, si j'étais seul en C peut-être.

Pour le reste c'est un avis personnel et donc non constructif,
Je pourrai répondre que j'ai mes équipes et laisse chacun pouvoir s'exprimer avec respect comme il l'entend, et je trouve même choquant qu'on puisse considérer ne pas se sentir responsable des personnes qu'on encadre. Que la richesse est dans nos diversités. Que chaque fois que nous identifions une technique de modélisation par définition c'est un système mathématique ... bien que cela dépends d'un minimum de culture et de définition ouverte (voir Michel Serres qui le dit bien mieux que moi).

Dernier point : personnellement je me fout de ton projet,

C'est pas important, pour moi le fil n'était qu'une recherche d'informations pour résoudre un problème, je n'ai indiqué ma perception que pour montrer ma bonne foi et essayer de mieux décrire. Le fil concernait vraiment un retour de fonction dont j'étais incertain, je suis incapable de croire qu'un homme puisse se sentir supérieur à un autre alors de la à le juger, ou lui enlever de quoi survivre, avec comme arguments  des connaissances de coder selon les normes et les croyances d'un tel ou d'un tel !!!!
Il y a quelques années quand je faisait les O.S. de clef USB bootable dédié je faisait tout ce qu'il était dit, ne pas faire pour obtenir le bon fonctionnement, alors je suis comme attiré quand je vois "ne pas modifier'

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

#20 Le 26/05/2013, à 21:31

telliam

Re : [résolu] attendre le retour d'une fonction en langage C

Non le PB c'est que tu lis pas les docs ou les specs. Et que tu justifies un code foireux par une différence de culture. Il y a plusieurs façon de coder, sur ce point je suis d'accord mais on ne peut justifier un manque de rigueur. Concernant l'encadrement d'équipe, je conseille ceux qui se donne la peine d'écouter...


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

Hors ligne