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 :

Detecter et generer un signal sonore


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut Detecter et generer un signal sonore
    je voudrais une fonction pour generer un signal sonore a une cetaine frequence comme le Windows.sleep de la FAQ mais sur les HP et une fonction pour recuperer cette frequence sur une entree ligne merci beaucoup et a bientot

  2. #2
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    personne n'a d'idée??
    svp

  3. #3
    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
    Il doit bien y avoir ces composants TToneGen et TMidiGen, ici :

    http://www.alan-warriner.co.uk/ , dans la rubrique Software...
    Bidouilleuse Delphi

  4. #4
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    merci waskol mais je viens de le telecharger et de regarder la demo je pense que ce composant est bien mais trop evolu il n'y a pas juste une fonctionpour envoyer du 1000 ou 400 hz

  5. #5
    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 Re: Detecter et generer un signal sonore
    Citation Envoyé par jmjmjm
    Windows.sleep
    Tu veux dire Windows.Beep(Ton,durée:cardinal) certainement ?

    Oui, pour faire la même faire sur une carte son, c'est l'enfer sous Windows
    Bidouilleuse Delphi

  6. #6
    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
    J'ai trouvé un truc, là :
    http://www.swissdelphicenter.ch/torr...de.php?id=1324

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    uses
      MMSystem;
     
    type
      TVolumeLevel = 0..127;
     
    procedure MakeSound(Frequency{Hz}, Duration{mSec}: Integer; Volume: TVolumeLevel);
      {writes tone to memory and plays it}
    var
      WaveFormatEx: TWaveFormatEx;
      MS: TMemoryStream;
      i, TempInt, DataCount, RiffCount: integer;
      SoundValue: byte;
      w: double; // omega ( 2 * pi * frequency)
    const
      Mono: Word = $0001;
      SampleRate: Integer = 11025; // 8000, 11025, 22050, or 44100
      RiffId: string = 'RIFF';
      WaveId: string = 'WAVE';
      FmtId: string = 'fmt ';
      DataId: string = 'data';
    begin
      if Frequency > (0.6 * SampleRate) then
      begin
        ShowMessage(Format('Sample rate of %d is too Low to play a tone of %dHz',
          [SampleRate, Frequency]));
        Exit;
      end;
      with WaveFormatEx do
      begin
        wFormatTag := WAVE_FORMAT_PCM;
        nChannels := Mono;
        nSamplesPerSec := SampleRate;
        wBitsPerSample := $0008;
        nBlockAlign := (nChannels * wBitsPerSample) div 8;
        nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
        cbSize := 0;
      end;
      MS := TMemoryStream.Create;
      with MS do
      begin
        {Calculate length of sound data and of file data}
        DataCount := (Duration * SampleRate) div 1000; // sound data
        RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
          SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // file data
        {write out the wave header}
        Write(RiffId[1], 4); // 'RIFF'
        Write(RiffCount, SizeOf(DWORD)); // file data size
        Write(WaveId[1], Length(WaveId)); // 'WAVE'
        Write(FmtId[1], Length(FmtId)); // 'fmt '
        TempInt := SizeOf(TWaveFormatEx);
        Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size
        Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatEx record
        Write(DataId[1], Length(DataId)); // 'data'
        Write(DataCount, SizeOf(DWORD)); // sound data size
        {calculate and write out the tone signal} // now the data values
        w := 2 * Pi * Frequency; // omega
        for i := 0 to DataCount - 1 do
        begin
          SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate)); // wt = w * i / SampleRate
          Write(SoundValue, SizeOf(Byte));
        end;
        {now play the sound}
        sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
        MS.Free;
      end;
    end;
    // How to call the function:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      MakeSound(1200, 1000, 60);
    end;
    C'est vraiment n'importe quoi de devoir faire toute cette gymnastique pour sortir un bête son sous Windows.
    Bidouilleuse Delphi

  7. #7
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci waskol un peu long comme tu dis mais c'est niquel par contre tu sais comment faire l'inverse !! c'est a dire recup la frequence d'un signal qui entre sur la carte son !!

  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 : 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
    Ben, heu... (toussements) non
    Bidouilleuse Delphi

  9. #9
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Pour la petite explication, tu connais la SSTV ??
    c'est l'envoie d'image par ondes radio le principe est d'envoyer une BF 300-3400 et de la recevoir demodulé de l'autre coté
    Et donc je cherche a faire un semblant de SSTV

  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 : 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
    Je vois !

    Pourquoi ne pas s'inspirer des utilitaires de conversion K7 audio-->Wav (et vice-versa), qui accompagnent certains émulateurs de vieux micros et qui sont openSource ?

    Par exemple, tu va trouver ton bonheur ici par exemple : http://oric.free.fr/emulator.html, dans la partie Tools tu trouvera la TapeTools collection (avec code sources en c).

    Il doit y avoir la même chose pour les formats K7 Amstrad CPC464 et Spectrum avec le format de fichier .TZX

    Après, la procédure est la suivante
    1) Création d'un fichier K7, c'est à dire : en-tête de K7+données
    2) transformation en fichier WAV
    3) Jouer le son WAV
    ....
    ....transmission par les airs
    ....
    4) réception du son et enregistrement du fichier Wav
    5) décodage WAV2TAP (Wav vers format de K7)
    6) récupération des données

    L'avantage de passer par là, c'est que le traitement du signal est déjà maché...

    Normalement et honnetement, celà devrait être jouable...
    En tout cas, c'est ce que je ferais
    Bidouilleuse Delphi

  11. #11
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Je ne vois pas comment recupere la frequence du signal avec ca ?
    Personne n'a d'autre idée??

  12. #12
    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
    En fait, avec cette technique de "K7 audio" virtuelle, tu n'as pas besoin de générer ni de détecter des fréquences !

    Franchement je pense qu'essayer de faire comme ça vaut le coup.

    Le décodage du fichier Wav en K7 devrait te redonner un fichier binaire identique à celui que tu as envoyé.
    Bidouilleuse Delphi

  13. #13
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Je crois que l'on ne sait pas tres bien compris pour la récéption je me reexplique le principe est de recevoir un signal sur l'entree ligne et de l'analysé.
    L'analyse consiste a recuperer la frequence du signal pas la frequence d'echantillonage mais la frequence joué en effet si le signal BF est du 400hz je veux que la fonction me retourne 400 en gros je signal varie dans la bande passante de la parole soit 300-3000Hz. Est ce que j'ai été plus clair ??
    Pour des precisions SSTV

  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
    Bah oui, j'ai parfaitement compris.
    Il faut que tu comprennes que ton "interface SSTV" (le modem), c'est la partie qui encode les données en WAV et vice-versa.

    En fait j'ai l'impression que tu veux mélanger à la fois réception (emission) et décodage (encodage), bref dès que tu as reçu une fréquence, la décoder de suite . Pour en faire quoi ? Ce ne sont pas les fréquences prises individuellement qui ont un sens ("Le point est vert"), mais une séquence complète (Un point vert+1 bleu+1 rouge+ etc=une image).

    Donc, je pense qu'il faut que tu scinde ton problème en deux, et qui pourront sans doute se combiner ensuite.

    1) tu réceptionnes le signal (création d'un fichier WAV lors de la réception du son par le micro ou l'entrée ligne (c'est kif-kif))--> voir comment fonctionne la méthode record du TMediaPlayer

    2) tu transformes ce fichier WAV, qui représente une séquence de fréquences, en fichier binaire --> code c++ de WavToTap, qui converti les fréquences en valeurs numériques.

    Le principe de fonctionnement des K7 audio des vieux Micro-ordinateurs 8 bits (commodore 64, CPC464, ZX spectrum, Oric, etc...) n'est ni plus ni moins le même que celui de la SSTV, qui n'a donc ABSOLUMENT RIEN inventé de ce coté là.
    Pour t'en convaincre : as tu déjà écouté une K7 audio sur laquelle on a enregistré un programme ???
    Je peux t'assurer que l'on parle bien de la hauteur de la note jouée (fréquence du signal) et non de la fréquence d'échantillonnage (qui est la vitesse à laquelle seront transmise les données.

    Si je me trompe, n'hésites pas à me rectifier.
    Bidouilleuse Delphi

  15. #15
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    [dans la bande passante de la parole soit 300-3000Hz. Est ce que j'ai été plus clair ??

    Attends dans un son, tu as sa hauteur donc effectivement sa fréquence mais aussi son intensité (amplitude des vibrations) et son timbre qui dépend de la forme de la vibration.
    et c'est le timbre qui permet à l'oreille de différencier des sons complexes de même hauteur.
    alors ton bip à fréquence donnée est loin de restituer quelque chose d'intelligible !!!

  16. #16
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Ok waskol je pense que je vais regarder ta fonction mais cela ne change rien a mon probleme il faut que je detecte les frequence en temps reel et non en lisant un enregistrement car il faut que je dise a mon prog de commencer l'enregistrement a la frequence de syncro et terminer l'enregistrement a cette meme frequence donc je dois quand meme pouvoir "lire" ma frequence en temps reel

  17. #17
    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
    Mais non !

    Il faut que tu dise à ton programme de commencer l'enregistrement non pas à la fréquence de synchro (qui te sert d'amorce blanche) mais à la fin d'un silence, puis d'arrèter l'enregistrement lorsque'un nouveau silence commence.

    A partir de là, il va falloir que tu détermine un "seuil" de niveau sonore en deça duquel tout ce qui sera reçu du micro sera un silence.

    Je pense que ça va ête la partie la plus "coton" a développer.
    Bidouilleuse Delphi

  18. #18
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Je ne peux pas jouer avec les silence car si la liaison n'est pas terrible a chaque silence mon prog va planter je veux me servir des protocoles deja existant pour que le prog sois compatible avec ceux existant et donc je dois jouer avec la frequence de synchro de 1200Hz et non avec les silences

  19. #19
    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
    ha oui, là effectivement ça change tout...

    En tout cas, ton problème aura eu le mérite de d'être TRES intéressant et original.

    Je te souhaite bon courage et te prie de recevoir tout mes voeux de succès.
    Bidouilleuse Delphi

  20. #20
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    lol

Discussions similaires

  1. [LabView 8.2] Signal sonore propre
    Par Klougoubaro dans le forum LabVIEW
    Réponses: 8
    Dernier message: 18/02/2008, 20h53
  2. [LabView 8] Transformer chaîne en signal sonore
    Par chris83160 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 05/02/2008, 13h27
  3. [C#, .net 3.5] detecter reseau wifi et signal
    Par warenbe dans le forum Framework .NET
    Réponses: 5
    Dernier message: 31/01/2008, 16h41
  4. Inversion temporelle d'un signal sonore
    Par Asshiah dans le forum Signal
    Réponses: 4
    Dernier message: 14/01/2007, 10h52
  5. Signal sonore sur la carte son
    Par woow dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 22/11/2005, 13h25

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