Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/02/2013, 19h49   #1
[ZiP]
Membre confirmé
 
Homme
Inscription : octobre 2006
Messages : 807
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 807
Points : 248
Points : 248
Par défaut Problème avec waveInOpen : WAVERR_BADFORMAT ?

Bonjour,

Je souhaite utiliser l'API waveInOpen. Cependant, lorsque j'exécute mon code, il me dit que ma structure audio est incorrecte :

Citation:
WAVERR_BADFORMAT => Attempted to open with an unsupported waveform-audio format.
Voici mon code :

Code :
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
 
unit umain;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  mmsystem;
 
type
 
  { TMain }
 
  TMain = class(TForm)
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Main: TMain;
 
implementation
 
{$R *.lfm}
 
{ TMain }
 
procedure TMain.Button1Click(Sender: TObject);
var
    phwi : LPHWAVEIN;
    pwfx : WAVEFORMATEX;
    res : MMRESULT;
begin
    // Paramètres d'un en-tête de fichier WAV au format PCM : 44100Hz, 8 bits, mono
    with pwfx do
    begin
      wFormatTag := WAVE_FORMAT_PCM;
      nChannels := 1;
      nSamplesPerSec := 44100;
      nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
      nBlockAlign := (nChannels * wBitsPerSample) div 8;
      wBitsPerSample := 8;
      cbSize := 0;
    end;
 
    res := waveInOpen(@phwi, WAVE_MAPPER, @pwfx, Main.Handle, 0, CALLBACK_WINDOW);
 
    if  res = MMSYSERR_NOERROR then
    begin
 
    end
    else
    begin
        case res of
            MMSYSERR_ALLOCATED: ShowMessage('Specified resource is already allocated.');
            MMSYSERR_BADDEVICEID: ShowMessage('Specified device identifier is out of range.');
            MMSYSERR_NODRIVER: ShowMessage('No device driver is present.');
            MMSYSERR_NOMEM: ShowMessage('Unable to allocate or lock memory.');
            WAVERR_BADFORMAT: ShowMessage('Attempted to open with an unsupported waveform-audio format.');
            else ShowMessage('Unknow error.');
        end;
    end;
end;
 
end.
J'ai pourtant respecté les explications données ici :
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Avez-vous une idée de mon erreur ?

Merci,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 21h41   #2
Jipété
Membre Expert
 
Inscription : juillet 2006
Messages : 1 947
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : juillet 2006
Messages : 1 947
Points : 2 197
Points : 2 197
Bonsoir,

Pas trop d'idée, là, comme ça, mais juste une suggestion : si j'étais face à ce problème, j'essayerais de simplifier, histoire de voir si ça change quelque chose.
Et puisque tu forces nChannels à 1, ta structure pourrait devenir :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
    with pwfx do
    begin
      wFormatTag := WAVE_FORMAT_PCM;
      nChannels := 1;
      nSamplesPerSec := 44100;
      // nAvgBytesPerSec := nSamplesPerSec * nBlockAlign; // nBlockAlign = 1, voir dessous, donc
      nAvgBytesPerSec := 44100;
      //nBlockAlign := (nChannels * wBitsPerSample) div 8; // = (1 * 8) div 8, donc 1
      nBlockAlign := 1
      wBitsPerSample := 8;
      cbSize := 0;
    end;
Juste pour savoir si tu as encore l'erreur.
__________________
Après avoir posté, relisez-vous ! Et en cas d'erreur, de faute d'orthographe ou d'oubli, il existe un bouton « Éditer », à 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
Jipété est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/02/2013, 21h44   #3
[ZiP]
Membre confirmé
 
Homme
Inscription : octobre 2006
Messages : 807
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 807
Points : 248
Points : 248
Bonsoir,

Je viens de trouver mon erreur !

Code :
1
2
3
4
5
6
7
8
9
10
11
 
    with pwfx do
    begin
      wFormatTag := WAVE_FORMAT_PCM;
      nChannels := 1;
      nSamplesPerSec := 44100;
      wBitsPerSample := 8;
      nBlockAlign := (nChannels * wBitsPerSample) div 8;
      nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
      cbSize := 0;
    end;
J'effectuais des calculs avec une variables de structure non renseignée, j'ai donc changé l'ordre et ça fonctionne.

Merci,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 22h54   #4
Jipété
Membre Expert
 
Inscription : juillet 2006
Messages : 1 947
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : juillet 2006
Messages : 1 947
Points : 2 197
Points : 2 197
Citation:
Envoyé par [ZiP] Voir le message
(...) J'effectuais des calculs avec une variables de structure non renseignée, j'ai donc changé l'ordre et ça fonctionne.

Merci,
ZiP
C'est à ça que je pensais un peu, mais j'osais pas le dire, pensant que le compilo aurait compris,
Bien joué,
__________________
Après avoir posté, relisez-vous ! Et en cas d'erreur, de faute d'orthographe ou d'oubli, il existe un bouton « Éditer », à 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
Jipété est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h39.


 
 
 
 
Partenaires

Hébergement Web