IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Connexion entre MATLAB et Lazarus


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Par défaut Connexion entre MATLAB et Lazarus
    Bonjour à tous,

    dans le cadre d'un programme de traitement audio, je dois extraire les données de fichiers wav sous forme de fichiers texte. Pour cela j'utilise Matlab avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [y, Fs] = wavread('piano.wav')
    Mono = (y(:,1)+y(:,2))/2;
    Mono=resample(Mono,2500,44100)
    save('piano.txt','Mono','-ASCII')
    Jusqu'à présent j'avais constitué une bibliothèque de fichiers texte, que je traitais ensuite sous Lazarus. J'aimerais cependant maintenant pouvoir exécuter le programme à partir de n'importe quel fichier wav, sans toutefois avoir à lancer Matlab indépendamment avant. J'ai donc trouvé le code suivant qui devrait me permettre de lancer le traitement Matlab directement à partir de Lazarus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
     
    var nf:string;   MatApp:variant;
    begin
    MatApp:=CreateOleObject('matlab.application');
    MatApp.visible:=1;
    nf:='FilenameEdit1.text';
    MatApp.Execute('[y, Fs] = wavread(nf) Mono = (y(:,1)+y(:,2))/2; Mono=resample(Mono,2500,44100) save(''piano.txt'',''Mono'',''-ASCII'') ');
     
    end;
    Cependant, en testant rien ne se passe, et l'historique de Matlab affiche seulement une ligne de commentaire (%-- 11/05/2012 22:20 --%) sans aucune ligne de commande.

    Si quelqu'un pouvait m'aider à trouver mon erreur
    Merci d'avance!

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 937
    Billets dans le blog
    6
    Par défaut
    une piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nf:='FilenameEdit1.text';
    MatApp.Execute('[y, Fs] = wavread(' + nf + ') Mono = (y(:,1)+y(:,2))/2; Mono=resample(Mono,2500,44100) save(''piano.txt'',''Mono'',''-ASCII'') ');
    tu avais inclu le nom de la variable en dur dans la chaîne (mais ce n'est pê qu'une erreur de recopie
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Par défaut
    Merci pour ta réponse

    Le problème ne semble cependant pas provenir de là car j'avais déjà essayé dans utiliser la variable nf (en mettant directement le nom d'un wav du dossier courant de Matlab) et cela ne marchait pas non plus..

    Pour ce qui est des simple quote incluses dans celles de MatApp, j'en ai mis deux de suite pour qu'il les prenne en compte, est-ce bien la bonne méthode ?

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 937
    Billets dans le blog
    6
    Par défaut
    ce peut être aussi un pb de lignes qui doivent être séparées par des #10#13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tsl:=TStringList.Create;
     
    tsl.Add( [y, Fs] = wavread(''piano.wav'') ); // ou tsl.Add( QuotedStr( [y, Fs] = wavread('piano.wav') );
    tsl.Add( Mono = (y(:,1)+y(:,2))/2; );
    tsl.Add( Mono=resample(Mono,2500,44100) );
    tsl.Add( save(''piano.txt'',''Mono'',''-ASCII'') ); 
     
    MatApp.Execute( tsl.Text );
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Par défaut
    Ça ne marche pas non plus. En laissant MatApp.visible à 1 la fenêtre Matlab Command Window apparaît mais aucune commande n'est faite, et en mettant à 0 rien ne se passe..

    On est bien d'accord, je dois déclarer la variable MatApp:variant au début du programme ?
    J'ai aussi essayé en mettant des double quote pour les expressions à l'intérieur même des String mais ce n'est pas mieux.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Normalement, il y a plus simple.

    Enregistre ton code dans une fonction sous MATLAB dans un fichier myfun.m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function myfun(nf)
     
    [y, Fs] = wavread(nf)
    Mono = (y(:,1)+y(:,2))/2;
    Mono = resample(Mono,2500,44100)
     
    nf = strrep(nf,'.wav','.txt');
     
    save(nf,'Mono','-ASCII')
    Tu peux ensuite, en te plaçant dans le dossier contenant myfun.m, lancer à partir d'une ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matlab -r "myfun('FilenameEdit1.text')"
    Il ne te reste plus qu'à écrire et faire exécuter automatiquement cette commande sous Lazarus.

    Tu peux ajouter la fonction quit à la fin de la fonction pour fermer automatiquement MATLAB.

    Tu peux aussi accélérer le chargement de MATLAB en utilisant l’argument -nodesktop (voire -nojvm) en plus de l’argument -r

    Plus d'information dans la documentation de MATLAB : Startup Options

Discussions similaires

  1. Connexion entre MATLAB et un automate
    Par Amaury63 dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/05/2013, 13h15
  2. Connexion entre MATLAB et OpenCV
    Par Limam12 dans le forum OpenCV
    Réponses: 3
    Dernier message: 22/10/2012, 13h50
  3. Problème de connexion entre MATLAB et PostgreSQL
    Par si_a7med dans le forum MATLAB
    Réponses: 1
    Dernier message: 01/04/2011, 16h01
  4. connexion entre matlab et visual studio.net
    Par imene_t1 dans le forum C#
    Réponses: 1
    Dernier message: 30/09/2007, 23h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo