Réponse acceptée !
1 - Ton WAVE_MAPPED dans le code précédent n'a rien à faire ici !! c'est un flag pour l'ouverture du périphérique, flag à utiliser dans fdwOpen c'est à dire dans le dernier élément.
2 - On récupère les erreurs histoire de savoir ce qui ne va pas (J'ai mis tous les défauts même si ceux ci ne peuvent pas tous être générés par cette fonction). Dans ce cas tu verras que l'erreur correspond à un format WAVE invalide, ce qui est normal vu que tu lui passes une structure vide.
procedure TForm1.Button2Click(Sender: TObject);
var
waveF : TWAVEFORMATEX;
hWO : HWAVEOUT;
Result : integer ;
begin
FillChar(waveF, SizeOf(waveF), 0);
Result := waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, CALLBACK_NULL) ;
case Result of
MMSYSERR_NOERROR : showmessage('ok ');
MMSYSERR_ERROR : showmessage('unspecified error ');
MMSYSERR_BADDEVICEID : showmessage('device ID out of range ');
MMSYSERR_NOTENABLED : showmessage('driver failed enable ');
MMSYSERR_ALLOCATED : showmessage('device already allocated ');
MMSYSERR_INVALHANDLE : showmessage('device handle is invalid ');
MMSYSERR_NODRIVER : showmessage('no device driver present ');
MMSYSERR_NOMEM : showmessage('memory allocation error ');
MMSYSERR_NOTSUPPORTED : showmessage('function isn''t supported ');
MMSYSERR_BADERRNUM : showmessage('error value out of range ');
MMSYSERR_INVALFLAG : showmessage('invalid flag passed ');
MMSYSERR_INVALPARAM : showmessage('invalid parameter passed ');
MMSYSERR_HANDLEBUSY : showmessage('handle being used simultaneously on another thread (eg callback) ');
MMSYSERR_INVALIDALIAS : showmessage('specified alias not found ');
MMSYSERR_BADDB : showmessage('bad registry database ');
MMSYSERR_KEYNOTFOUND : showmessage('registry key not found ');
MMSYSERR_READERROR : showmessage('registry read error ');
MMSYSERR_WRITEERROR : showmessage('registry write error ');
MMSYSERR_DELETEERROR : showmessage('registry delete error ');
MMSYSERR_VALNOTFOUND : showmessage('registry value not found ');
MMSYSERR_NODRIVERCB : showmessage('driver does not call DriverCallback ');
WAVERR_BADFORMAT : showmessage('unsupported wave format ');
WAVERR_STILLPLAYING : showmessage('still something playing ');
WAVERR_UNPREPARED : showmessage('header not prepared ');
WAVERR_SYNC : showmessage('device is synchronous ');
else showmessage('Error n°' + inttostr(Result) + ' (' + SysErrorMessage(GetLastError) + ')' );
end ;
end;
3 - Réessayes le code ci-dessus avec le code suivant placé juste avant le WaveOutOpen :
with waveF do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := 1;
nSamplesPerSec := 8000;
nAvgBytesPerSec := 16000;
nBlockAlign := 2;
wBitsPerSample := 16;
cbSize := 0;
end ;
Cordialement.
"L'imagination est plus importante que le savoir." Albert Einstein