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

Delphi Discussion :

MCISendString: un probleme


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut MCISendString: un probleme
    J'essaie de me servrid e cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     MCISendString(PChar('play ' + edit1.text), nil, 0, 0);
    mais ca ne marche pas.
    Je me sers d'un ficheir midi.
    Quelqu'un peu m'aider ?

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    C'est quoi MCISendString ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    une fonction de bas niveau, je test des codes souces d'ailleurs mais ils ne semble pas foncitonner, meme avec mmsystem dans la declaration.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Pour lire des fichiers midi il faut t'orienter vers des librairies spécialisées.
    Playsound ou mcisendstring ne gérent pas le format .mid.
    Par contre pour du .wav cela fonctionne très bien.


    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    ben mon but final est de connaitre la durée d'un ficheir midi.
    Je me sert de mediaplayer, mais je constate des bugs sur cette fonction, de meme que windows media player affiche parfois des durée fantaisiste.
    Je suis en train de voir avec l'activex de WindowsMediaPlayer1 mais j'ignore si j'ai legalement le droit de distribuer un logiciel fait avec cet activeX.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Sinon ici
    tu as dll FMod + les fichiers de conversion .pas et des exemples d'utilisation en Delphi.
    FMode gère le mdi.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    hmm merci j'y jeterais un coup d'oeil.
    pourtant j'ai trouvé des exemples sur le web ou l'on se sert de mmsystem pour lire des midis.
    Enfin merci quand meme.

  8. #8
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Je suis désolé Fabrice mais MciSendString gère les fichiers Midi

    Essaies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      mciSendString('Open ' + MidiFile + ' Type Sequencer alias Fichier',Nil,0,0);
      mciSendString ('play Fichier', Nil, 0, 0);
    Tu seras convaincu

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     MidiFile:=edit1.text;
    mciSendString(pchar('Open ' + MidiFile + ' Type Sequencer alias Fichier'),Nil,0,0);
      mciSendString ('play Fichier', Nil, 0, 0);
    devrait marcher mais ne marche pas.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Je suis désolé Fabrice mais MciSendString gère les fichiers Midi
    Effectivement, c'est vrai. Comme quoi, il faut toujours vérifier ce qu'on lit à droite à gauche sur les sites ou forums.

    Sinon voici la fonction qui va bien pour jouer un fichier .mid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMCICommand('play ' + OpenDialog1.FileName);

    J'ai testé, ça fonctionne.

    --

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    pourrais tu defginir la fonction: SendMCICommand stp ?

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Ah oui pardon


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure SendMCICommand(Cmd: string);
    var
      RetVal: Integer;
      ErrMsg: array[0..254] of char;
    begin
      RetVal := mciSendString(PChar(Cmd), nil, 0, 0);
      if RetVal <> 0 then
      begin
        {get message for returned value}
        mciGetErrorString(RetVal, ErrMsg, 255);
        MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
      end;
    end;

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Le code utile est celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mciSendString(PChar('play ' + OpenDialog1.FileName), nil, 0, 0);


    Non on ne tourne pas en rond(voir ton 1er post) puisque ce code fonctionne parfaitement.
    (testé avec mon fichier Mozart.mid

    N'oublies pas le Tag

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    non le probleme c'est que ca marche toujours pas.
    au pire je vais faire une sauvegarde du message, et vous pourrez le mettre en delestage.

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    non laisses le post.
    raffraichis le de temps en temps.

    La premiere fois cela ne fonctionnait pas chez moi puis la derniere version postée a fonctionné qui en fait est la même que la première.
    J'ai essayé un wave qui marchait
    Apres le .mid est passé sans pb.

    Maintenant, si j'ai le temps je vais étudier un peu cette api et le traitement sonore.


    @+

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    est ce que par le plus pur des hasard il faut initialiser quelque chose ?

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Dans le panneau de config, icone son&multimédia verifies si le controleur son pour le peripherique midi fonctionne correctement, si tu as bien un peripherique par defaut pour le midi et si le volume n'est pas muet.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Par défaut
    en fait je peux bien lire les fichiers midi sur mon ordi. (avec winamp par ex)
    donc le probleme est ailleurs.

  19. #19
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    C'est dans «Open» que le nom de fichier doit être renseigné.
    Essaie donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      mciSendString('Open ' + OpenDialog1.FileName + ' Type Sequencer alias Fichier',Nil,0,0);
      mciSendString ('play Fichier', Nil, 0, 0);
    Et assure toi bien que OpenDialog1.FileName contient le nom du fichier avec son chemin complet

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Bonjour

    Tu poses 2 boutons, une gauge, un timer et un statusbar.
    Le statusBar affiche la durée du fichier midi, la gauge affiche la progression du morceau.
    Un bouton joue le morceau, l'autre l'interrompt.

    Parfois il faut 5 secondes d'attente avant d'entendre le morceau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Gauges, StdCtrls, ExtCtrls, ComCtrls, MMSystem;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Gauge1: TGauge;
        Timer1: TTimer;
        OpenDialog1: TOpenDialog;
        StatusBar1: TStatusBar;
        procedure Timer1Timer(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        Duree: String;
      protected
        function ExtractFileName(aFilename:String; WithExt: Boolean):String;
        function SecondesToJHMS(Time: Double): String;
      public
        procedure PlayMidi();
        procedure StopMidi();
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function TForm1.ExtractFileName(aFilename:String; WithExt: Boolean):String;
    var i: Integer;
    begin
      aFileName := SysUtils.ExtractFileName(aFileName);
      if WithExt then Result := aFileName
      else
      begin
        Result := '';
        i :=0;
        while (aFileName[i] <> '.') do
        begin
         Result := Result + aFileName[i];
         Inc(i);
        end;
        Result := Trim(Result);
      end;
    end;
     
    function TForm1.SecondesToJHMS(Time: Double): String;
    var
      base,
      res,
      r: integer;
      SL: TStringList;
      I: integer;
      Num: Integer;
    begin
      Result := '';
      base := 60;
      Num := Trunc(Time);
      if num <= 0 then Result := '00';
      SL := TStringList.Create;
      While(Num>0) do
      begin
        res := Num div base;
        r := Num mod base;
        Num := res;
        SL.Add(IntToStr(r));
      end;
      for I := SL.Count -1 DownTo 0 do
      begin
        if (I = 0) then  Result := Result + Format('%.2u',[trunc( StrToInt(SL[I]) )])
        else
          Result := Result + Format('%.2u',[trunc( StrToInt(SL[I]) )]) +':';
      end;
      SL.Free;
    end;
     
     
    procedure  TForm1.PlayMidi();
    var
     TotalTime: array[0..128] of char;
     filename: String;
     
    begin
     if form1.Opendialog1.Execute then
     begin
       filename := form1.opendialog1.filename;
       MCISendString(PChar('close song'), nil, 0, 0);
       MCISendString(PChar('open ' + filename + ' alias song'),nil , 0, 0);
       MCISendString(PChar('set song time format ms'), 0, 0, 0);
       MCISendString(PChar('status song length'), TotalTime, 128, 0);
       MCISendString(PChar('play song'),nil, 0, 0);
     
       Gauge1.Progress := 0;
       Gauge1.MaxValue := strtoint(TotalTime);
       Timer1.Enabled := true;
     
       Duree := TrimRight(String(TotalTime));
       StatusBar1.Panels[0].Text := ExtractFileName(filename, False) + ' '
        + SecondesToJHMS(strtofloat(Duree) /1000);
       StatusBar1.Panels[1].Text := SecondesToJHMS(strtofloat(Duree) /1000);
     end;
    end;
     
    procedure  TForm1.StopMidi();
    begin
      Timer1.Enabled := false;
      MCISendString(PChar('stop song'), nil, 0, 0);
    end;
     
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      TimePos: array[0..128] of char;
    begin
      with Gauge1 do
      begin
        if progress < MaxValue then
        begin
          MCISendString(PChar('set song time format milliseconds'), nil, 0, 0);
          MCISendString(PChar('STATUS SONG POSITION'), TimePos, 128, 0);
          Gauge1.Progress := StrToInt(TimePos);
          StatusBar1.Panels[1].Text := SecondesToJHMS(strtofloat(Duree) /1000 );
          Duree := FloatToStr(strtofloat(Duree) - Timer1.Interval);
        end else Timer1.Enabled := False;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      StopMidi();
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       PlayMidi();
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Timer1.Interval := 1000;
    end;
     
    end.
    @+ et bon développement.

    Penses au tag

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problem avec mciSendString ?
    Par tozen dans le forum Qt
    Réponses: 3
    Dernier message: 01/05/2009, 01h34
  2. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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