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

Delphi Discussion :

problème d'un pc a l'autre avec mon interface audio


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    regleur injection plasturgie
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : regleur injection plasturgie

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut problème d'un pc a l'autre avec mon interface audio
    salut a toutes et tous, je m'adresse a vous pour essayer de trouver une solution a mon problème.

    (' bon oui je sais y en a plein sur les site et il y as déjà des prog tout fait ')

    mon edi delphi 7 et système de programmation sous Windows 7
    ai tenté une autre installe sur windows 10 et delphi 7

    résumé de mon programme :

    générateur audio dans la carte son de mon pc portable pour m'apprendre le morse
    un truc simple qui génère un caractère et attend que je clic sur la bonne touche du clavier et me dit bon ou pas bon pour être sur que ai bien appris le bon caractère

    ai fait deux programme diffèrent un avec mmsound et un autre avec windows.beep

    mon problème a résoudre est le suivant:

    si j'utilise mon programme sur le pc de programmation sa fonctionne super bien je peut changer la vitesse la fréquence de mes son
    par contre si utilise mon exécutable sur un autre pc par exemple sous Windows 10 oulala le son entre les caractères émis est très lent et les notes sont déformé ?

    j'ai bien tenté de prendre tout les composants utiliser avec delphi ctl+atl+m pour listé les utiliser et tout mis dans un répertoire avec mon exécutable mais sa ne change rien du tout même en les copiant dans systeme32 et en redéclarant chaque dll regsvr32 blablablabla dll sa change rien du tout que je soit en admin ou pas

    au lieu d'avoir un bip bien nette on entend un truc comme un " pouip" pardon pour expression

    si je fait un simple bip dans un Tbutton windows.beep(750,100), sa fonctionne
    par contre si je fait :
    windows.beep(750,100),
    windows.beep(750,300),
    windows.beep(750,100),
    windows.beep(750,100),

    donc lettre L le bip court font des pouip et les espace entre les caractères son long 750,100) ou 750,500 change bien les espaces entre chaque notes
    ai le même problème avec mmsound
    pouvez vous m'aidé ? avez vous rencontré se type de problème et comment avez vous résolu
    cdlt
    alain

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Beep est une vieille fonction qui remonte à l'époque des speakers sur PC

    elle ne fonctionne en effet pas bien sous Windows 10
    https://stackoverflow.com/questions/...-on-windows-10
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre à l'essai
    Homme Profil pro
    regleur injection plasturgie
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : regleur injection plasturgie

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut windows beep
    bonjours, oui effectivement ce système est un vieux model qui était employer sur les system inferieur, meme en mode de compatibilité win95 par exemple mon interface a le même problème ?
    il faufrais que je puisse trouver des infos pour peut être utiliser directsound avec les dll de Microsoft.DirectX.DirectSound.dll et Microsoft.DirectX.dll mais je n'ai pas réussi a trouver des infos pour utiliser les dll fourni par Microsoft
    cdlt
    alain

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    la fonction Beep() appelait initialement le speaker interne, ensuite elle a été simulée à partir de Windows 7 et manifestement Windows 10 déconne sur cette émulation.

    pour produire un Beep il faudrait simplement générer un WAV dynamiquement et le jouer avec l'API waveOut*

    voici un exemple codé vite fait

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    type
      TWAVBeep = record
      const
        SAMPLERATE = 48000;
      private
        WaveOut: HWAVEOUT;
        Header : TWaveHdr;
        Wave   : array of SmallInt;
        procedure Init;
      public
        procedure Beep(dwFreq, dwDuration: DWORD);
      end;
     
    procedure TWAVBeep.Init;
    var
      WF: TWaveFormatEx;
    begin
      WF.wFormatTag := WAVE_FORMAT_PCM;
      WF.nChannels := 1;
      WF.nSamplesPerSec := SAMPLERATE;
      WF.wBitsPerSample := 16;
      WF.nBlockAlign := (WF.nChannels * WF.wBitsPerSample) div 8;
      WF.nAvgBytesPerSec := WF.nBlockAlign * WF.nSamplesPerSec;
      WF.cbSize := 0;
     
      if WaveOutOpen(@WaveOut, WAVE_MAPPER, @WF, 0, 0, CALLBACK_NULL) <> MMSYSERR_NOERROR then
        RaiseLastOSError;
    end;
     
    procedure TWAVBeep.Beep(dwFreq, dwDuration: DWORD);
    var
      Index: Integer;
      period: Single;
      periodSamples: Integer;
      time: Single;
      proportionOfPeriod: Single;
      value: Single;
    begin
      if Wave = nil then
        Init;
     
      SetLength(Wave, (dwDuration * SAMPLERATE) div 1000);
     
      period := 1 / dwFreq;
      periodSamples := Round(period * SAMPLERATE);
     
      for Index := 0 to Length(Wave) do
      begin
        time := Index / SAMPLERATE;
        proportionOfPeriod := (fmod(time, period))/period;
        if proportionOfPeriod <  0.5 then
          value := -1 + 4 * proportionOfPeriod
        else
          value := +3 - 4 * proportionOfPeriod;
        Wave[Index] := Round(32767 * value);
      end;
     
      FillChar(Header, SizeOf(TWaveHdr), 0);
      Header.dwBufferLength := Length(Wave) * SizeOf(SmallInt);
      Header.lpData := Pointer(Wave);
     
      waveOutPrepareHeader(WaveOut, @Header, SizeOf(TWaveHdr));
      waveOutWrite(WaveOut, @Header, SizeOf(TWaveHdr));
     
      Sleep(dwDuration + 50); // 50ms entre deux sons
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      W: TWAVBeep;
    begin
      W.Beep(750,100);
      W.Beep(750,300);
      W.Beep(750,100);
      W.Beep(750,100);
    end,
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre à l'essai
    Homme Profil pro
    regleur injection plasturgie
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : regleur injection plasturgie

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut
    bonsoirs paul,
    je vient de voir votre bout de code avec wavebeep sa a l'air intéressant et je vais tester avec cette façon de faire moi j'avais essayer avec mmsound et waveout je vais donc tester votre solution je vous confirmerait si sa resoud mon probleme
    merci
    cdlt alain

  6. #6
    Membre à l'essai
    Homme Profil pro
    regleur injection plasturgie
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : regleur injection plasturgie

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut utilisation de votre bout de code
    bonjours Paul,
    j'ai essayer votre bout de code ai du modifier car mon compilateur ne reconnaissait pas grand chose ?
    je suis en Delphi 7
    je n'ai pas eue de meilleur résultat que les deux soft que ai créer un avec mmsound et autre avec Windows beep je retrouve le même symptôme de ralentissement même si j'enlève la ou les fonction sleep(50) si je transfère mon prog sur un autre pc en win10, j'ai également refait un autre ordi portable avec win10 et Delphi 2005 pour essayer mais toujours la même chose Windows 10 ralentie la diffusion audio et cette effet de pouic très désagréable qui se fait, par contre si je fait des beep(450) très long le son semble correct mais la diffusion du morse est d'au temp plus long,
    pourtant ai télécharger un logiciel d'apprentissage morse sur le net et le prog fonctionne correctement bon il ne correspond pas a mon apprentissage mais le programme fonctionne ?
    si vous avez un peut de temp je peut vous transmettre mon ou mes deux sources pour voir si vous trouvez QQ chose, il doit je pence y avoir une erreur dans mon code source ?
    cdlt Alain





    Citation Envoyé par Paul TOTH Voir le message
    la fonction Beep() appelait initialement le speaker interne, ensuite elle a été simulée à partir de Windows 7 et manifestement Windows 10 déconne sur cette émulation.

    pour produire un Beep il faudrait simplement générer un WAV dynamiquement et le jouer avec l'API waveOut*

    voici un exemple codé vite fait

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    type
      TWAVBeep = record
      const
        SAMPLERATE = 48000;
      private
        WaveOut: HWAVEOUT;
        Header : TWaveHdr;
        Wave   : array of SmallInt;
        procedure Init;
      public
        procedure Beep(dwFreq, dwDuration: DWORD);
      end;
     
    procedure TWAVBeep.Init;
    var
      WF: TWaveFormatEx;
    begin
      WF.wFormatTag := WAVE_FORMAT_PCM;
      WF.nChannels := 1;
      WF.nSamplesPerSec := SAMPLERATE;
      WF.wBitsPerSample := 16;
      WF.nBlockAlign := (WF.nChannels * WF.wBitsPerSample) div 8;
      WF.nAvgBytesPerSec := WF.nBlockAlign * WF.nSamplesPerSec;
      WF.cbSize := 0;
     
      if WaveOutOpen(@WaveOut, WAVE_MAPPER, @WF, 0, 0, CALLBACK_NULL) <> MMSYSERR_NOERROR then
        RaiseLastOSError;
    end;
     
    procedure TWAVBeep.Beep(dwFreq, dwDuration: DWORD);
    var
      Index: Integer;
      period: Single;
      periodSamples: Integer;
      time: Single;
      proportionOfPeriod: Single;
      value: Single;
    begin
      if Wave = nil then
        Init;
     
      SetLength(Wave, (dwDuration * SAMPLERATE) div 1000);
     
      period := 1 / dwFreq;
      periodSamples := Round(period * SAMPLERATE);
     
      for Index := 0 to Length(Wave) do
      begin
        time := Index / SAMPLERATE;
        proportionOfPeriod := (fmod(time, period))/period;
        if proportionOfPeriod <  0.5 then
          value := -1 + 4 * proportionOfPeriod
        else
          value := +3 - 4 * proportionOfPeriod;
        Wave[Index] := Round(32767 * value);
      end;
     
      FillChar(Header, SizeOf(TWaveHdr), 0);
      Header.dwBufferLength := Length(Wave) * SizeOf(SmallInt);
      Header.lpData := Pointer(Wave);
     
      waveOutPrepareHeader(WaveOut, @Header, SizeOf(TWaveHdr));
      waveOutWrite(WaveOut, @Header, SizeOf(TWaveHdr));
     
      Sleep(dwDuration + 50); // 50ms entre deux sons
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      W: TWAVBeep;
    begin
      W.Beep(750,100);
      W.Beep(750,300);
      W.Beep(750,100);
      W.Beep(750,100);
    end,

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 665
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par f4dcd Voir le message
    si je fait un simple bip dans un Tbutton windows.beep(750,100), ça fonctionne
    par contre si je fait :
    windows.beep(750,100),
    windows.beep(750,300),
    windows.beep(750,100),
    windows.beep(750,100),
    Il ne manquerait pas un/des silences ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    regleur injection plasturgie
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : regleur injection plasturgie

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut bonjour sergio
    non avec Windows.beep(750,100);
    dans les parenthèse il y as d'abord la fréquence et après la virgule le temp Windows.beep(fréquence, temp);
    cdlt Alain

    Citation Envoyé par SergioMaster Voir le message
    Il ne manquerait pas un/des silences ?

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 665
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Lors des essais que j'ai fait, j'ai ajouté un sleep(100) entre chaque point-tiret c'est nettement plus audible.
    Cela étant mon D7 est sur un poste Vista, je n'ai pas vérifier sur mon poste W10 (qui n'a pas de speaker interne qui plus est !)

  10. #10
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Lors des essais que j'ai fait, j'ai ajouté un sleep(100) entre chaque point-tiret c'est nettement plus audible.
    Cela étant mon D7 est sur un poste Vista, je n'ai pas vérifier sur mon poste W10 (qui n'a pas de speaker interne qui plus est !)
    je n'ai pas testé avec le sleep() mais c'est semble-t-il un pb connu sous Windows 10
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    pour ce qui est du son,
    je suis parti du principe que Windows (peu importe la version) est capable de lire
    un fichier *.wav et d'en restituer le son.
    Peut être ai-je tort je ne sais pas je n'ai pas de Win10 sous la main pour tester.

    Toujours est il que j'ai utilisé le code de Paul TOTH pour générer les deux sons (Trait & point) et les enregistrer au format wav.
    Ces fichiers (très petits) sont embarqués dans les ressources de l'application et chargés dans le OnCreate
    dans deux Pointeurs ce qui permet un accès rapide et simple au sons.

    Morse.zip
    Le code fonctionne de D7 à D10.3 sous Win7
    et accepte tous les caractères & mots
    tout ce qui n'est pas dans l'intervale A..Z (Ex. espace entre 2 mots) provoque une pause
    la vitesse est également réglable.
    Enfin ça devrait suffire à tester sous Win10

    Cordialement,

    @+

Discussions similaires

  1. Problème avec mon interface Swing
    Par aljessy dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 16/01/2013, 11h44
  2. Problème avec mon interface Graphique!
    Par HAXOCIS dans le forum Débuter
    Réponses: 7
    Dernier message: 22/12/2010, 11h09
  3. Réponses: 2
    Dernier message: 19/12/2008, 22h00
  4. énorme problème avec mon interface MFC
    Par cenedra dans le forum MFC
    Réponses: 23
    Dernier message: 17/07/2006, 09h36
  5. énorme problème avec mon interface MFC
    Par cenedra dans le forum C++
    Réponses: 2
    Dernier message: 12/07/2006, 09h54

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