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

Langage Delphi Discussion :

fonction PlaySound


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 19
    Points
    19
    Par défaut fonction PlaySound
    Salut à tous,

    Pour jouer un son dans mon programme j'utilise PlaySound de l'unité MMSystem. Mais pendant que le son se joue, mon programme s'arrête, alors que je voudrais que mon son se joue tant qu'une fenêtre est ouverte (et que l'utilisateur puisse intéragir dans cette fenêtre tout en entendant le son).

    Voici la ligne que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlaySound('son.wav', HInstance, SND_ASYNC);
    Peut-être les arguments ne sont pas les mieux adaptés ? Ou existe-t-il une autre méthode qui me donnerait satisfaction ?

    Merci d'avance si vous pouvez m'aider.

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    pourquoi mettre le HInstance alors que tu ne joues pas un son de ressource ?

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Tu peux éventuellement essayer de mettre le sample en mémoire avant de lancer sa lecture :
    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
    Uses MMSystem;
     
    Var sample: String;
     
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      SndPlaySound(Pointer(sample), SND_MEMORY Or SND_NODEFAULT Or SND_ASYNC);
    End;
     
    Initialization
      sample := LoadFile('son.wav');
     
    Finalization
      sample := ''; 
    End.
    Comme l'a dit evarisnea, le paramètre hInstance est inutile puisque ce sample n'est pas (encore) une ressource.
    Si tu souhaites utiliser une ressource, il faut créer un fichier RC contenant ceci :Il faut compiler le fichier RC avec BRCC32.EXE qui se trouve dans le dossier Bin de Delphi.
    Puis, tu intègres cette ressource avec la directive $R :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {$R sample.res}
     
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      PlaySound('sample', hInstance, SND_RESOURCE or SND_SYNC);
    End;
    Tu peux aussi essayer d'utiliser ce sample en mémoire, ça devrait résoudre ton problème :
    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
    Uses Windows, MMSystem;
     
    {$R sample.res}
     
    Var sample: Pointer;
     
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      SndPlaySound(sample, SND_MEMORY Or SND_NODEFAULT Or SND_ASYNC);
    End;
     
    Initialization
      sample := Pointer(FindResource(hInstance, 'sample', 'wave'));
      If (sample <> Nil) Then Begin
        sample := Pointer(LoadResource(hInstance, HRSRC(sample)));
        If (sample <> Nil) Then sample := LockResource(HGLOBAL(sample));
      End;
    End.
    J'ai trouvé ce code sur le net et je ne l'ai pas testé. Perso, je préfère utiliser DirectSound car plus compatible et surtout beaucoups plus de possibilités, comme par exemple pouvoir lancer la lecture de plusieurs samples (mixage), changer la fréquence, le canal ou le volume de chacun, pouvoir lire et enregistrer en simultanné, etc... Tu trouveras des exemples (avec toutes les sources nécessaires) sur ma page :

    http://sub0.developpez.com

    à+
    De retour parmis vous après 10 ans!!

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. fonction PlaySound
    Par star_light dans le forum Windows
    Réponses: 8
    Dernier message: 21/02/2005, 16h03
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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