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

Composants VCL Delphi Discussion :

Note de musique [Archives]


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Peu importe l'unité, trouve en une qui fonctionne sous Win98 et qui mixe les fréquences!
    Puis remplace les 2 fonctions avec celles de ZLPortIO, comme ceci:

    - OutPort par la procédure WritePortb,
    - InPort par la procédure ReadPortb

    Compris? Demande-moi si ça ne fonctionne pas comme tu veux,
    ou si tu ne trouves pas l'unité ZLPortIO!
    Allé, bon courage, à+

  2. #2
    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
    Pour info:

    procedure OutPort(PortAddr: word; Databyte: byte); assembler; stdcall
    c'est la même chose que Port[add]:=X;

    function InPort(PortAddr:word): byte; assembler; stdcall;
    c'est la même chose que X:=Port[add];

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    OK, c bon, j'ai compris.
    Mon code :
    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
    procedure Sound(Hz : Word); 
    var TmpW : Word; 
    begin 
      portwriteb($43,182);
      TmpW :=portreadb($61);
      portwriteb($61,TmpW or 3);
      portwriteb($42,lo(1193180 div hz));
      portwriteb($42, hi(1193180 div hz));
    end; 
     
    procedure NoSound; 
    var TmpW : Word; 
    begin 
      portwriteb($43,182);
      TmpW := portreadb ($61); 
      portwriteb($61,TmpW and 3);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Sound(5000);
    Sleep(1000);
    NoSound();
    end;
    --> Acun son

  4. #4
    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
    Bon, par étape!

    Oui, il faut que tu paramètres l'initialisation de ZLPortIO, avec la commande suivante dans Boutton1Click, juste avant Sound...

    zliosetiopm(True); ou False, je sais plus...

    Bref, avant d'utiliser PortReadB et PortWriteB, tu dois lancer cette commande!

    Essaye! à+


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    Apparament, ce n'est pas ça :
    // if you need the best perfomance for your IO operations
    // call zliosetiopm(TRUE). This allow your application
    // to use asm command IN,OUT directly in your code.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    C'est la boolean ZLIOStarted qui permet de savoir si le driver s'est correctement lancé.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    Ca yest ca marche sans aucun code en +.
    C'est juste que je n'avais pas mis zlportio.sys dans mon réperoire...
    En fait, le driver se lance automatiquement avec la partie initialization

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    Arf, comme je le redoutais dans mes posts précédents, il est impossible de jouer 2 sons à la fois

    Par exemple si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sound(1000);
    Sound(5000);
    Sleep(1000);
    NoSound;
    Je n'entends que le 5000 Hz

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sound(5000);
    Sound(1000);
    Sleep(1000);
    NoSound;
    Je n'entends que le 1000 Hz


  9. #9
    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
    Evidemment!

    Citation Envoyé par sub0
    Peu importe l'unité, trouve en une qui fonctionne sous Win98 et qui mixe les fréquences!
    Puis remplace les 2 fonctions avec celles de ZLPortIO...
    Il faut d'abord que tu trouves une unité qui le fasse!
    C'est une fonction du genre:

    MixSound(Freq1,Freq2:Word);

    Je sais que ça existe, je l'ai vu, alors cherche!
    Va voir dans le forum Pascal pour commencer, et puis les swags Pascal aussi!
    Bon courage! à+

  10. #10
    Membre à l'essai

    Inscrit en
    Mars 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 7
    Par défaut
    Ou sinon, génère toi-même en temps réel ton son composé de plusieurs fréquences, et envoie-le à un périphérique MM. Exemple :

    www.phuphus.com/frequences.zip

    (bouton 1 pour jouer le son, bouton 2 pour faire planter... Désolé, pas eu le temps de corriger le bug du bouton 2).

    J'en ai mis 4, et je n'ai pas inclus de contrôle de volume (pas très dur à faire, c'est juste un coef multiplicateur entre 0 et 1 pour chaque sinus). Si jamais tu veux faire taire une fréquence, mets-la à 0 Hz.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    sub0, tu te rappelles pas où tu as trouvé le code car là je trouves rien de mon côté


  12. #12
    Membre à l'essai

    Inscrit en
    Mars 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 7
    Par défaut
    Euh... BenC, tu as lu mon précédent message ? Je t'ai donné une solution avec contrôle temps réel de la fréquence...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    Oui j'ai lu et même regardé ton source. Merci beaucoup de ton aide.
    Mais je préfères rester sur la première solution, pour deux raisons :
    • - Je comprends pas très bien comment marche ton code et je sais pas trop comment l'adapter (enfin ca c'est pas une bonne excuse, car en y passant du temps, on peut tout faire, mais bon... )
      - Le son est bizarre, il est trop clair et pas assez puissant (enfin je sais pas trop comment dire...)
      J'ai aussi essayé de faire varier le volume, mais 1 * les sinus me semble le max et c'est pas très fort.

    Enfin, merci quand même. Si j'ai le temps et si je trouves pas la fct dont parlait sub0, je me rabatterais sur le tien

    Merci bcp!

  14. #14
    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
    Salut!

    ben c'était à l'occasion de mes recherches sur comment mixer le son (un sample), que j'ai trouvé cette unité, et plein d'autres, comme comment faire sortir un sample par le speaker du PC! Alors là aussi, ya moyen de sortir ce que tu veux, si tu transformes, ou plutôt tu fabriques le sample avec les fréquences que tu veux, puis tu le sort par le speaker! Enfin, ça peut-être une bonne solution si on ne retrouve cette unité, mais celui-là est un programme pour Dos (TP), alors je crains que tu ne puisses pas l'adapter avec Delphi. Là, je viens de rentrer chez moi, je vais voir si je remets la main dessus... à+

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    OK, merci bcp

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    Voilà, j'ai essayé ton code phuphus, mais j'ai quelques problèmes :
    • Je n'arrive pas à contôler le volume. Même en multipliant les sinus, ca ne fait pas un son audible et correct.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Buffer[i] := round( ( Sin(2*Pi*frequence[1]*(i + compteur*size)/44100) + Sin(2*Pi*frequence[2]*(i + compteur*size)/44100) + Sin(2*Pi*frequence[3]*(i + compteur*size)/44100) + Sin(2*Pi*frequence[4]*(i + compteur*size)/44100) )*8000 ) ;
      --> Là les sinus sont multipliés par 8000. Si je mets 4000, j'ententds plus rien, et à 15 000 ca fait un son qui "frise" , mais pas vraiment plus fort...

      Comme tu l'avais dis dans ton post précédent, lorsque l'on arrête les sons ou que l'on ferme l'appli, ca plante


    Bon, j'attends encore un peu si sub0 trouve son unité sinon, je verrais.

    Merci à vous deux de votre aide précieuse

  17. #17
    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
    Je n'ai pas retrouvé pour l'instant, je continuerai à chercher demain.
    Je te tiens au courant, à+

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    OK. Merci de ton soutien et de ton suivi

  19. #19
    Membre à l'essai

    Inscrit en
    Mars 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 7
    Par défaut
    Essaye avec cette nouvelle version :

    www.phuphus.com/frequences.zip

    En fait, ici le son est généré en 16 bits. Ce qui veut dire que chaque échantillon envoyé à la carte son doit avoir une valeur comprise entre -32768 et +32767. D'où la multiplication par 8000 : j'additionne 4 sinus, chacun compris entre -1 et 1. Donc au pire, j'ai un signal qui varie entre -4 et +4, que je multiplie par 8000 pour avoir une variation entre -32000 et +32000. Si jamais on va au delà, ça sature (c'est cela le son qui "frise").

    Dans la nouvelle version, la somme de sinus est multipliée par 32767, mais chaque sinus est pondéré par un volume. Donc si tu as 4 sinus actifs, la somme de tous les volumes ne doit pas dépasser 100% si tu veux éviter la saturation (en pratique, les max et les min ne sont quasiment jamais synchros, donc tu pourras aller au delà de 100%. De toutes façons, à l'oreille, la saturation s'entend tout de suite). Cela te laisse la liberté de pousser une fréquence à fond si les 3 autres sont à 0. Dans tous les cas, tes problèmes de volume sont étonnants, compte-tenu qu'un sinus, même entre -8000 et +8000, s'entend très bien en sortie de carte-son. Pousse un peu le volume de tes enceintes !

    J'ai aussi corrigé le bug du bouton "arrêter" et de la fermeture de l'application. Ce n'est pas très rigoureux (je mets la lecture en pause au lieu de la stopper), car il faudrait passer par la commande 'WaveOutReset' pour tout arrêter. Mais comme je ne teste pas l'état 'joué' des buffers dans ma procédure gérant les messages de la carte son, la commande Reset n'arrête pas la lecture. Il y a donc encore 2-3 petite choses à améliorer, mais cette version est fonctionnelle et ne bugge pas chez moi.

  20. #20
    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
    Waouw!

    Moi je dis, qu'à la place d'un beep, c'est beaucoups plus joli! J'ai une source pour jouer un wav avec le HP du PC (pas testée), donc, il suffirait de rebalancer le son sur le HP... Mais non, sérieusement, faire de la ziq avec le HP du PC, c'était ya 20 ans! Aujourd'hui, on utilise la carte son, qui est maintenant présente sur tous les PC! Benc, si tu tiens vraiement à utiliser le petit speaker, il faudrait te justifier car je ne comprendrais pas pourquoi tu t'acharnerais à utiliser cette m.... Autrement, je peux toujours continuer mes recherches, tiens moi au courant de ta décision stp!

    Phuphus, c'est de la FM (modulation de fréquences), je dois avoir quelques sources intérressantes si tu veux développer ce projet, comme par exemple changer la forme de la période pour obtenir des sons variés... Mais bon, j'imagine que tu as sûrement plus d'idées que moi sur ce sujet! En tous les cas, c'est pas la doc qui me manque, à+

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Generer note de musique
    Par dridk dans le forum API graphiques
    Réponses: 1
    Dernier message: 12/06/2009, 02h49
  2. Réponses: 15
    Dernier message: 12/01/2008, 22h26
  3. Clé de sol ou note de musique
    Par firiel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 16/11/2007, 11h09
  4. Notes de musique en C++
    Par druid dans le forum C++
    Réponses: 26
    Dernier message: 18/12/2006, 14h45
  5. Fichier Midi : récupérer les notes de musique
    Par zardi dans le forum Multimédia
    Réponses: 2
    Dernier message: 20/12/2005, 02h38

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