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 :

[Lazarus] Ressource wav


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut [Lazarus] Ressource wav
    Bonjours à tous !

    Pour lire une ressource bitmap ajoutée à mon programme grâce à lazres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    initialization
     {$I Bitmap.lrs}
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var LBitmap: Graphics.TBitmap;
    begin
      LBitmap:=TBitmap.Create;
      LBitmap.LoadFromLazarusResource('NomDuBitmapDansLaRessource')
      {et utilisation avec: }
      BitBlt(LDCDest, LBitmap.Width, LBitmap.Height, LBitmap.Width, LBitmap.Height, LDCSrc, 0, 0, MERGEPAINT and SRCCOPY);
      LBitmap.Free;
    end;


    Le problème est de lire un WAV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    initialization
     {$I Cursor.lrs}
    end.
     
    var LCursor: String;
    begin
      LCursor:=LazarusResources.Find('Cursor').Value;
      {Ligne compilée et exécutée sans problème}
    end;
    mais comment utiliser cette ligne pour l'intégrer apr exemple à:
    Screen.Cursors[1]:=
    Afin d'afficher ce curseur?

  2. #2
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    Quel est le rapport entre un wav (fichier son), un curseur (fichier image) et la variable que tu utilises : Lcursor de type string... ????

    Beaucoup d'incohérence dans ton post !!!!

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut
    Merci Clandestino pour ta réaction.
    Je donnais comme 1° exemple une méthode pour lire des données de type bitmap à partir d'une ressource Lasarus.
    (Je donnais cet exemple pour montrer que les descendants de TGraphic possèdent la méthode d'accès aux ressources lazarus.)
    Pour accéder à une ressource d'un autre type, je n'ai rien trouvé d'autre que ce 2° exemple à partir d'une chaine.
    La seule méthode, que je connaisse, capable d'accéder à une ressource d'un type quelconque..
    Mais je vois bien que je suis dans l'erreur ou que je ne sais pas comment m'en servir...
    Je cherche donc à accéder aux données de type wav de ma ressource lazarus.
    Et je ne sais pas comment faire.
    J'espère avoir été plus clair.
    Merci.

  4. #4
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    Nous parlons donc d'utiliser du son dans un programme compilé par Lazarus...

    Voici la methode classique sous windows...

    1) Ajoute la reférence à l'unité windows dans les uses de ton programme
    2) A l'aide d'un compilateur de ressources (reshacker, drcc32.exe, minipascal...) compile le fichier son.rc suivant :
    Ceci te crée le fichier son.RES que tu intégres dans ton code en ajoutant la ligne
    avant le mot clef interface
    Ici '0.wav' est le nom de mon fichier audio

    voilà pour intégrer ta ressource dans ton executable...

    3) comment lire un son sous windows :

    tu peux declarer la fonction Playsound en rajoutant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function playsound(lpszName : Pansichar; hModule : Integer; dwFlags : Integer):Boolean;
        stdcall;external 'winmm.dll' name 'PlaySound';
    juste après le mot clef implémentation.

    Tu auras besoin des constantes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
    SND_ASYNC   = 0;
    SND_MEMORY  = 4;
    La lecture du son à l'aide de playsound peut-etre faite ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure tada;
    Var NomRes  : PChar = 'ding'; //le nom de la resource dans mon fichier res
        p       : Pointer;
        h       : Handle;
    begin
      Try
        H := LoadResource(hInstance, FindResource(hInstance, NomRes, 'WAV'));
        P := LockResource(H);
        playSound(p, 0, SND_ASYNC Or SND_MEMORY);
      Finally
        UnLockResource(H);
      End;
    end;
    Il ne te reste plus qu'à appeler ta procedure pour un évènement quelconque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     tada;
    end;

    ********************************************************

    Voici la methode propre à Lazarus :

    1) crée un fichier lrs à l'aide de lazres contenant ton fichier '0.wav'2) insère cette ligne dans ton code juste avant le end final
    3) sous windows, si tu compte lire ton son declare les constantes et la fonction playsound comme au dessus
    4) Tu peux lire ton son ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure ding;
    var
      s : Ansistring ;
    begin
      S:=LazarusResources.Find('0').Value;
      // ici '0' est le nom de ma resource
      // ce nom est issu de la compilation avec lazres
      //C:\lazarus\tools>lazres.exe son.lrs 0.wav
      //0.wav ResourceName='0' Type='WAV'
      playsound(@S[1], 0, SND_ASYNC Or SND_MEMORY);
    end;
    5) Appelle ding d'ou tu veux...

    Bonne programmation
    Clandestino

  5. #5
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut
    Bonjours !
    Alors un grand MERCI pour ton effort clandetino !
    C'est exactement ce que je souhaitais savoir!
    Je connaissais la 1° méthode pour utiliser les ressources *.res
    mais un petit rappel sur le forum ne fait pas de mal..
    La fonction que j'utilisais étais bien la bonne, c'est juste que je ne savais m'en servir.
    Donc je peu conclure grâce à tes deux exmples clairs et concis:
    En utilisant la méthode d'accès aux ressources propre à lazarus (*.lsr)
    on utilise l'adresse de la chaine retour de la fonction LazarusResources.Find pour accéder à chaque élément de la ressource.

    MERCI !

  6. #6
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    L'inconvenient de la methode 2 est qu'on utilise une ansistring pour stocker la ressource... On a donc une limite en taille, ce qui pour du son peut être un problème...

    Pour de petits 'ploc' ou 'ding', celà devrait tout de meme faire l'affaire...

    L'avantage c'est que la methode est valable pour acceder à la ressource quelles que soit l'OS choisi... Par contre lire un wav simplement sous linux sans utiliser une librairie spécifique sort du cadre de mes connaissances.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Ressource *.lsr et fichier *.cur
    Par matever01 dans le forum Lazarus
    Réponses: 7
    Dernier message: 03/06/2016, 11h32
  2. [Lazarus] Lire une ressource texte
    Par koolkris dans le forum Lazarus
    Réponses: 4
    Dernier message: 21/10/2007, 12h52
  3. [Lazarus 0.9.18] Ressources : comment faire avec des images ?
    Par poilagratter dans le forum Lazarus
    Réponses: 3
    Dernier message: 16/08/2007, 08h10
  4. [Lazarus] Lire une ressource lrs
    Par JoseF dans le forum Lazarus
    Réponses: 2
    Dernier message: 20/06/2007, 21h37
  5. [Lazarus] Lire les enregistrements d'une ressource
    Par JoseF dans le forum Lazarus
    Réponses: 3
    Dernier message: 20/10/2006, 19h34

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