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

C++Builder Discussion :

Lecture d'un fichier Son avec une Fréquence précise


Sujet :

C++Builder

Vue hybride

kurul1 Lecture d'un fichier Son avec... 23/06/2023, 11h03
DjmSoftware Salut la dll wimmdll est... 23/06/2023, 21h23
DjmSoftware Salut un petit exemple créé... 24/06/2023, 20h57
kurul1 Je vais essayé ta solution.... 18/09/2023, 14h09
kurul1 Je reviens après avoir testé.... 27/09/2023, 15h58
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Lecture d'un fichier Son avec une Fréquence précise
    Bonjour à tous

    Je dois dans un de mes programmes lire un son qui a une fréquence et une durée précise (réglable).

    J'ai d'abord opté pour la fonction BEEP à laquelle je passe la fréquence et la Durée.
    Mon problème c'est que le son ne se déclenchait pas à l'instant ou je le lance mais avec une certaine latence qui n'est malheureusement pas la même à chaque fois. Je dois lancer un son et envoyer un signal à une carte d'E/S National Instrument pour déclencher un autre appareil en même temps donc la latence me pause problème.

    Ma deuxième solution à été de générer un fichier waw à la fréquence que je voulais. Pour la durée, je ne peux pas avec le bou de code que j'ai, généré une durée en dessous de 1 seconde. J'ai utilisé l'objet MediaPlayer pour lire le son et l'arrêter quand j’atteins le temps voulu. (même souci de latence).

    Ma troisième solution a été de générer un fichier waw plus long et de le lancer en avance avec un volume à 0 (paramètre de MediaPlayer) et de passer le volume à 1 quand je veux lire le son. Problème, pas de son lu car le volume reste à 0.

    Ma quatrième solution aurait été d'utiliser PlaySond (API) mais il est en 32 bits, or je développe en 64 bits et je ne peux pas repasser en 32Bits à cause de la Carte d'E/S qui ne répond plus lorsque je suis en 32Bits.

    Quelqu'un aurait-il une solution à me proposer pour que je n'ai pas de latence ?

    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    la dll wimmdll est compatible 32 et 64 bits
    donc le code suivant
    // je te laisse traduire de Delphi en c++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure PlaySoundFile(FileName: string);
    begin
     if FileExists(FileName)
     then PlaySound(pchar(FileName), 0, SND_ASYNC or SND_FILENAME);  
     
     { Flags are:
        SND_SYNC  =0 = Start playing, and wait for the sound to finish
        SND_ASYNC =1 = Start playing, and don't wait to return
        SND_LOOP  =8 = Keep looping the sound until another sound is played  }
    end;
    devrait fonctionner sous les environnements 32 et 64 Bits

    infos sup ici:https://learn.microsoft.com/en-us/wi...sound-function

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    un petit exemple créé en 64 Bits
    j'affiche dans une barre de status le temps entre l'appel de la fonction et la sortie
    sur ma becanne de plus de 10 ans le temps est de 3 ms.
    le paramètre SND_ASYNC est important car on travaille en mode asymchrone

    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
     
    #include <vcl.h>
    #pragma hdrstop
    #include"MMSystem.h"
    #include"Main.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm140 *Form140;
    //---------------------------------------------------------------------------
    __fastcall TForm140::TForm140(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm140::Button1Click(TObject *Sender)
    {
    	  TDateTime Start =Now();
    	  PlaySoundA("SYSTEMSTART", 0, SND_ASYNC);
    	  TDateTime Stop =Now();
    	  StatusBar1->Panels->operator[](1)->Text=FormatDateTime(L"hh:mm:ss.zzz",Stop-Start);    // 3 ms sur ma vieille machine
    }
    //---------------------------------------------------------------------------
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Je vais essayé ta solution. merci beaucoup

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Je reviens après avoir testé.

    J'ai sensiblement diminué mon temps de latence avec ta solution. ce temps est moins aléatoire qu'avec le MediaPlayer mais il reste à 60ms. par temps de latence j'entends le temps entre l'envoi de la commande de son et le moment ou le son commence à se jouer effectivement. Cela ne reste pas assez réduit pour moi quand je dois lancer dans le même temps un autre évènement qui dois être synchronisé.

    Je ne vois pas comment faire pour arriver à lancer un son en instantané ou quasiment en instantané car il y a toujours une latence mais il me faudrait qu'elle soit le plus réduite possible (de l'odre de 2 à 3 ms) et je craint que cela ne soit pas possible.

    Si vous avez une solution je suis preneur.

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    Ce temps de latence est il toujours le même ?
    Pour rappel Windows n’est pas un système en temps réel
    Ce que tu appel temps de latence dépend de la charge de ta machine.
    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/02/2013, 16h21
  2. Réponses: 2
    Dernier message: 14/01/2013, 15h53
  3. Réponses: 4
    Dernier message: 24/05/2010, 13h06
  4. Fichier Wav avec une fréquence donnée
    Par azimut2 dans le forum Windows
    Réponses: 0
    Dernier message: 23/11/2009, 05h19
  5. Réponses: 2
    Dernier message: 01/05/2007, 18h50

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