Je suis d'accord pour le Fs, il ne sert à rien. Mais pour le chemin du fichier j'avais mis ça pour rendre le programme plus universel.. En quoi cela pose-t-il problème ?
Version imprimable
Je suis d'accord pour le Fs, il ne sert à rien. Mais pour le chemin du fichier j'avais mis ça pour rendre le programme plus universel.. En quoi cela pose-t-il problème ?
La fonction CD ne sert à rien puisque tu peux passer le chemin complet (via FULLFILE) dans SAVE
Que fait CreationT ?
S'il doit exploiter le fichier perso.txt et que celui-ci n'est pas créé, restons pragmatiques : il suffit de guetter jusqu'à ce qu'il le soit...
Quand j'évoquais un test d'existence et/ou taille du fichier dans un Timer, c'était ça.
On peut utiliser en Delphi, sous Windows les FindFirstChangeNotification, comme ici : http://www.phidels.com/php/index.php...ip.php3&id=494 ou là : http://nono40.developpez.com/sources/source0017/
Dac, merci pour l'astuce, je ne pensais plus au "cd" ! ;)
Oui c'est ça, CreationT se sert de Perso.txt. Mais je ne vois pas trop comment utiliser ce Timer.. J'a essayé avec un FileExists comme condition d'arrêt placée dans le OnTimer mais ça ne marche pas. Aurais-tu un exemple?
Ton code MATLAB n'est pas très robuste
Comment sont gérés les erreurs MATLAB dans le TProcess ?
Si une erreur survient, comment Lazarus réagit-il ?
Peut être faut-il quelque chose comme ceci :
C'est l'idée de base, il faut l’améliorer.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function CreaFichTexte(nf) if exist(nf,'file')~=7 error('Fichier "%s" inexistant',nf); end try y = wavread(nf); Mono = (y(:,1)+y(:,2))/2; Mono = resample(Mono,2500,44100); save(fullfile('E:\INSA\2A\Info\Projet\Sons','Perso.txt'),'Mono','-ASCII') quit catch error('Erreur dans CreaFichTexte.m') end
Tout dépend de la gestion des erreurs d'un programme externe par Lazarus...
A la rigueur, pas besoin de Timer :
Pour faire plus joli, il n'est pas interdit de déporter le code d'attente dans une fonction WaitForFile(AFileNAme: string): Boolean qui retournera vrai si fichier arrivé et faux si interruption demandée (en cliquant sur un bouton qui mettra une variable globale ArretDemande à True)Code:
1
2
3
4
5
6
7
8 // ici le code d'appel du Processus while not FileExists('perso.txt') do begin Sleep(10); // pour ne pas manger tout le temps CPU Application.ProcessMessages; // au cas où action end; // ici, si besoin, surveillance sur le même principe que sa taille reste fixe CreationT;