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

API, COM et SDKs Delphi Discussion :

Jouer deux sons en meme temps


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut Jouer deux sons en meme temps
    Comment jouer deux sons qui sont dans un fichier ressource en meme temp sans passer par un mediaplayer ?

  2. #2
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Personne ne sait comment ?

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    deux sons qui sont dans un fichier ressource
    ça devient deux fichiers distincts, une fois extraits du fichier ressources, il me semble ?
    Auquel cas ça me semble mission impossible : comment veux-tu envoyer 2 fichiers en même temps à une seule carte son, mmmh ?
    --
    jp

  4. #4
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SndPlaySound('C:\zizique.wav', SND_ASYNC);
    Pas possible de placer le second son en thread et de synchroniser les deux ensemble, cela les mixerait-il ?

    En électronique cela se nomme le multiplexage, en informatique, j'en sais rien encore

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Salut J-P !

    Ah, on reconnait bien là les bidouilleurs !
    J'y ai pensé une fraction de nanoseconde, mais ch'suis pas sûr que le pilote de la carte son soit d'accord,
    Maintenant, si quelqu'un a déjà réussi ça, vite vite qu'il colle son code ici, qu'on puisse copier !

    Sinon, multiplexage, t'es sûr que tu confonds pas avec mixage ?
    Car, pour vraiment multiplexer, il faudrait découper chaque fichier en tout 'tits' bouts que les threads (je connais quasiment pas ces bestiaux) enverraient à la carte son, ch'sais pas trop c'que ça pourrait donner...

    Mes 2 cts, en attendant d'autres avis éclairés !
    --
    jp

  6. #6
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Avec DirectSound :
    http://sub0.developpez.com/FormatWAV/mixsound.zip

    Les samples sont mis en mémoire avant la lecture. Il est possible de choisir la fréquence, le panning (balance canal droit gauche), la position de départ (offset), le volume de chaque piste. La démo utilise des samples mono. Pour jouer un sample stéréo, il faut utiliser 2 pistes. Tu trouveras des démos DirectSound pour enregistrer et jouer des samples direct-to-disk avec DirectSound sur le net. Cela permet de pouvoir jouer simultannément autant de sample que l'on veut (limité par la puissance du système).

  7. #7
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Merci a Sub0 ca marche impec.

  8. #8
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Allez, hop, j'ai trouvé un machin qui permet de le faire en DirectX (DirectSound)

    Vous trouverez une unité snd_main.pas à ajouter à votre projet.
    Ensuite l'utilisation est archi-simplissime

    1) Vous initialisez DirectX SND_init(Handle) Handle est le Handle de la fenètre principale de votre application
    2) et chargez les sons avec SND_add qui renvoi un entier qui identifie votre son de manière unique, à garder au chaud pour la suite
    n1:=SND_add('son1.wav');
    n2:=SND_add('son1.wav');
    n3:=SND_add('son1.wav');

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // Sound engine initialization
      if not SND_init(Handle) then
        Halt;
    // Load samples
      Button1.Tag := SND_add('snd1.wav');
      Button2.Tag := SND_add('snd2.wav');
      Button3.Tag := SND_add('snd3.wav');
    end;
    3) pour jouer un son, vous utilisez SND_play en lui indiquant le numéro de votre son, la position du son (X : à gauche ou à droite, Y : devant ou derrière),si vous souhaitez le jouer en boucle ou non
    SND_play(n2);

    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
    procedure TForm1.ButtonClick(Sender: TObject);
    const
      offset = 768;
    var
      X : Single;
    begin
    // Calc X position for sample (not listener)
      if Sender = Button1 then
        X := TrackBar3.Position
      else
        if Sender = Button2 then
          X := TrackBar4.Position
        else
          X := TrackBar5.Position;
    // Play selected sample
      SND_play((Sender as TButton).Tag, X * 128);
    end;
    4) Et pour libérer les ressources, vous terminez par :
    SND_free;

    Le mieu, c'est essayer l'exemple que je vous fourni dans le zip
    Fichiers attachés Fichiers attachés

  9. #9
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    La j'ai un probleme avec le code de waskol. Le programme marche très bien avec les sons fourni ,mais avec mes sons il plante: Lecture au-dela de la fin du fichier. Mais si je lui donne un fichier wav de meilleur qualité, il marche.

  10. #10
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Citation Envoyé par poly128
    La j'ai un probleme avec le code de waskol. Le programme marche très bien avec les sons fourni ,mais avec mes sons il plante: Lecture au-dela de la fin du fichier. Mais si je lui donne un fichier wav de meilleur qualité, il marche.
    C'est marrant (enfin non ), parce que chez moi ça marche avec des sons pourris (11KHz ou 8KHz, mono).

    Par contre, tout mes sons sont au format PCM.

    Sinon, la démo est faite pour des sons de 22KHz, si tu as une impression de lecture trop rapide du son ou trop lente, c'est parce que tes sons ont un taux d'échantillonnage différent : dans ce cas utilises la trackbar du bas pour ajuster la vitesse de lecture de directX pour l'ajuster à ta fréquence d'échantillonnage.

    Mais alors, je ne comprend pas encore le pourquoi du sa plante chez toi, chez moi je n'ai pas réussi à faire planter la démo
    Pourrais-tu poster ici les sons (enfin, un seul peut suffire) qui te posent problème, celà me permettrait d'y voir plus clair. Merci

  11. #11
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Tout les sons de basse qualité ne marche pas. Meme les sons qui ont exactement le meme format que ceux fournie avec l'exemple ne marche pas.

    Son qui marche pas.zip

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

Discussions similaires

  1. [Free Pascal] Jouer deux sons en même temps
    Par Monsieur Griboux dans le forum Free Pascal
    Réponses: 3
    Dernier message: 29/11/2012, 18h43
  2. [Débutant] jouer deux sons wav en meme temps
    Par dcolin dans le forum Signal
    Réponses: 1
    Dernier message: 11/07/2011, 13h18
  3. Jouer plusieurs sons en même temps
    Par Irydion dans le forum FMOD
    Réponses: 0
    Dernier message: 18/11/2008, 19h54
  4. DIRECT MUSIC / JOUER DEUX SONS OU PLUS..
    Par ilimo dans le forum DirectX
    Réponses: 1
    Dernier message: 12/06/2004, 18h24
  5. Lancer deux sons en même temps...
    Par Julien_riquelme dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 03/05/2003, 17h00

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