begin process at 2008 07 25 03:48:57
1 216 054 membres
37 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Sélectionner une carte son [ Mutimédia / Audio ] (Francky23012301)

Sélectionner une carte son le 06/01/2008 17:13:44

Francky23012301
Membre Club
Salut à tous,

Je cherche à sélectionner une carte son parmis plusieurs installées sur le Pc.

J'utilise le test suivant pour sélectionner celle par défaut :

procedure TForm1.Button1Click(Sender: TObject);
 var
 waveF  : TWAVEFORMATEX;
 hWO    : HWAVEOUT;
begin
 FillChar(waveF, SizeOf(waveF), 0);
  If waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0)= MMSYSERR_NOERROR then
  showmessage('oki');
end;


Ps (Pas oublier d'utiliser MMSystem dans les uses)

Manque de bol ca ne fonctionne pas : le message n'apparait pas.

J'ai beau chercher, je ne vois pas ce qui ne colle pas.

Si quelqu'un a une idée

Merci

Re : Sélectionner une carte son le 06/01/2008 17:39:44

cantador
Membre Club

déjà..
WAVE_MAPPED <> WAVE_MAPPER

cantador


Re : Sélectionner une carte son le 06/01/2008 19:43:56

Francky23012301
Membre Club
Merci Cantador : Mais ca beug toujours

Re : Sélectionner une carte son le 06/01/2008 23:15:46

WhiteHippo
Membre Club

Bonsoir

En prenant WAVE_MAPPER tu dis au système de choisir le périphérique le plus approprié. Si tu veux le choisir par toi même il faut utiliser son ID (Si tu as deux cartes, la première doit avoir pour valeur 0 et la seconde 1)

Pour faire les choses proprement, on utilise auxGetNumDevs pour obtenir le nombre de peripheriques disponibles, puis auxGetDevCaps dans une boucle pour obtenir les infos de chacun des peripheriques (savoir lequel est lequel) et enfin un waveOutOpen avec le bon uDeviceID.

Cordialement.


"L'imagination est plus importante que le savoir." Albert Einstein


Re : Sélectionner une carte son le 07/01/2008 08:35:00

Francky23012301
Membre Club
Salut, Je suis d'accord avec toi White Hippo et du reste c'est ce que j'ai fais. Pour le listing no problemo, j'ai bien ma liste de cartes et leur ID. Mais quand je sélectionne la carte son, ca plante : Du reste fait un essais : procedure TForm1.Button1Click(Sender: TObject); var waveF : TWAVEFORMATEX; hWO : HWAVEOUT; begin FillChar(waveF, SizeOf(waveF), 0); If waveOutOpen(@hWO, WAVE_MAPPED, @waveF, 0, 0, 0)= MMSYSERR_NOERROR then showmessage('oki'); end; Tu vera que le show-message n'a pas lien. Et c'est ca que je capte pas : Pourquoi mon WaveOutOpen plante.

Re : Sélectionner une carte son le 07/01/2008 13:27:31

WhiteHippo
Membre Club
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


Re : Sélectionner une carte son le 07/01/2008 15:06:12

Francky23012301
Membre Club
Merci White Hippo Effectivement le problème vient d'ici : with waveF do begin wFormatTag := WAVE_FORMAT_PCM; nChannels := 1; nSamplesPerSec := 8000; nAvgBytesPerSec := 16000; nBlockAlign := 2; wBitsPerSample := 16; cbSize := 0; end ; sans ca plante. Décidémment chez Microsoft, ils feront jamais les choses simplements. L'art de la complexité inutile semble etre cultivé chez eux. Enfin bref probleme résolu : Merci White Hippo

Re : Sélectionner une carte son le 07/01/2008 19:25:31

cantador
Membre Club

Désolé, francky, j'ai cru sur le coup à une erreur de syntaxe mais dans l'API WAVE_MAPPER est bien l'identifiant de la carte.

heureusement WhiteHippo veille au grain..

cantador


Re : Sélectionner une carte son le 07/01/2008 20:29:10

Francky23012301
Membre Club
Il n'y as pas de probleme Cantador : ca arrive à tout le monde



Classé sous : carte, sélectionner, wavef, hwo

Participer à cet échange

Pub



Appels d'offres

Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€
Demande de devis pour ...
Budget : 7 000€

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS