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

  1. #1
    Membre régulier 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
    Points : 73
    Points
    73
    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 régulier 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
    Points : 73
    Points
    73
    Par défaut
    Personne ne sait comment ?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    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
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    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 éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    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
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    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
    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).
    De retour parmis vous après 10 ans!!

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Très joli, Sub0 ! Et + 1 !
    On en apprend tous les jours, ici !
    Et je me garde ce zip dans un coin (ça peut servir), merci
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    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
    Cette démo est surtout destinée à être utilisée dans un petit jeu pour faire des bruitages... Mais bon, on peut l'améliorer pour en faire un programme de musique par exemple.

    Tu trouveras d'autres sources dans cette page :
    http://sub0.developpez.com/
    De retour parmis vous après 10 ans!!

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut jp

    Ah, on reconnait bien là les bidouilleurs !


    Sinon, multiplexage, t'es sûr que tu confonds pas avec mixage ?
    Oui oui multiplexage, idem le principe des télécoms.

    Heureusement que Sub0 arrive à temps avant que la bagarre éclate

    Bravo à merci à lui encore du code à piocher pour mieux apprendre !

  10. #10
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Juste pour ajouter un mot, et Je pense que Sub0 a du faire un ptit bout de chemin dans le monde des player de mod

    Les sons sont des ondes, et que la résultante est la moyenne des de ondes.

    Donc octet par octet des samples (ondes) (ou autre choses que octets si la précision de l'intensité est plus que du 8bits), additionner et diviser par 2.
    (sans parler de toutes les triturations que l'on fait sur une onde l'étirer pour les grave, aug. le vol, effet vibrato etc...)

    C'était les principes des player de modules (mod, s3m...) DOS fut un temps qui ne travaillaient que comme ca.

    Et c'etait plus de l'analyse d'onde que du bidouillage pour mixer 2 ou plusieurs samples ensemble pour avoir le son résultat final

    Le bidouillage était au niveau des optimisations à fournir, pour effectuer le calcul le plus rapidement possible sur les pov vieille machine comme des P66
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  11. #11
    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
    Effectivement. J'avais codé un mixeur de samples en temps réel avec TurboPascal7 en me basant sur cette méthode. Pour le mixage en 16bits, il faut "désassigner" le sample, mixer (faire la moyenne), puis remettre le sample au bon format. La démo suivante effectue cette fonction : http://sub0.developpez.com/FormatWAV/Make16ST_16MO.htm
    De retour parmis vous après 10 ans!!

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Moi je dis qu'une chose : bravo les gars !

    (mdr avec tes icônes, J-P !)

    Chapeau bas,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre régulier 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
    Points : 73
    Points
    73
    Par défaut
    Merci a Sub0 ca marche impec.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    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
    Bidouilleuse Delphi

  15. #15
    Membre régulier 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
    Points : 73
    Points
    73
    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.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    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
    Bidouilleuse Delphi

  17. #17
    Membre régulier 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
    Points : 73
    Points
    73
    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

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yop !

    Ton "son qui marche pas", effectivement, génère une erreur "Lecture au-delà de la fin du fichier" au lancement du prog de Waskol.
    Je l'ai donc ouvert avec un logiciel d'édition de sons (Goldwave, pour ne pas le nommer), ai fait "Resample..." sans changer les valeurs, l'ai enregistré et là c'est tout bon.

    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Membre régulier 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
    Points : 73
    Points
    73
    Par défaut
    Effectivement en faisant Resample ca marche, mais pourquoi ca je sais pas.
    Mille merci a Jipété et aussi a waskol pour le code, je commencais à désespérer.

  20. #20
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    je dis ca tout a fait au hasard, mais on sait jamais.

    Est-qu'il ne peut pas y avoir une probleme de sample avec des valeurs dont les valeurs sont soit signées, soient non signées ? (2 normes différentes).
    Juste qu'a une époque (lointaine certe), j'étais tombé sur ce problème...

    et dans ce cas, le prog est prévu pour prendre qu'une seule norme soit signé, soit non signé... ?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

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

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