Super, plus d'erreur, j'ai qd même eu du mal car je savais pas ce que c'est que "linker" mais là c bon, en plus avec devcpp la lib s'appelle libwinmm.a alors ça perturbe.
Bref maintenant que c'est passé j'ai un nouveau problème:
j'ai recopié le code interessant dans la source de l'enregistreur, en fait, juste la partie sur le tracé de l'oscilloscope, je n'ai pas d'erreur d'ouverture de carte son, tout se compile bien , le fond du scope se trace bien mais là problème quand la capture est lancée (c'est a dire à l'ouverture de la fenêtre pour moi) et bien il se passe .... rien. pas de trace de signal sur le graphe, même en sélectionnant les bons paramêtres d'enregistrement windows.
La fonction qui gère ma fenètre est la suivante:
LRESULT CALLBACK Capturesonproc(HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
if(waveInGetNumDevs() <= 0)
{
MessageBox(NULL, "Il faut un périphérique audio pour capturer le son", "Aucune carte son détectée...", MB_OK);
return 0;
}
// Preparation des formats pour la carte son
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 2; // Stereo
wfx.nSamplesPerSec = 44100; // Frequence d'echantillonnage
wfx.wBitsPerSample = 16; // Dynamique
wfx.nBlockAlign = (wfx.nChannels * wfx.wBitsPerSample) / 8; // C'est MSDN qui l'a dit
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; // Ca aussi
// Ouverture de la carte son
if(waveInOpen(&hwi, 0, &wfx, (DWORD)hwnd, 0, CALLBACK_WINDOW)!= MMSYSERR_NOERROR)
{
MessageBox(hwnd, "Problème a l'ouverture de la carte son", "Erreur", MB_OK);
return 0;
}
case MM_WIM_OPEN:
// Demarrage de la carte son
waveInStart(hwi);
return 0;
case MM_WIM_DATA:
// On incremente la ProgressBar s'il y a des donnees
// On copie dans un buffer temporaire pour la representation graphique
CopyMemory(BufferTmp, ((PWAVEHDR)lParam)->lpData, ((PWAVEHDR)lParam)->dwBytesRecorded);
InvalidateRect(hwnd, &rect, TRUE);
waveInAddBuffer(hwi, ((PWAVEHDR)lParam), sizeof(WAVEHDR));
return 0;
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
HPEN hp; // Scope
HBRUSH hb; // Fond du scope
LOGBRUSH lb; // Style de la brush
short xScale, yScale, Zero; // Pour les differentes echelles
size_t i = 0, k = 0; // Pour les boucles et les indices
// On met a l'echelle de la fenetre
rect.left = 0;
rect.top = 0;
rect.right = 310;
rect.bottom = 60;
// debut de x pour le dessin
k = rect.left;
// Determination du zero de l'oscillo
Zero = (rect.top + rect.bottom) / 2;
// Determination des echelles
xScale = (TAILLE_BUFFER / 2) / (rect.right - rect.left);
yScale = (32767 / (rect.top - Zero));
// Structure pour la brush
lb.lbStyle = BS_SOLID;
lb.lbColor = 0x00000000;
// On recupere le DC de la fenetre
hdc = BeginPaint(hwnd, &ps);
// Creation de PEN et de BRUSH
hp = CreatePen(PS_SOLID, 1, 0x0000FF00);
hb = CreateBrushIndirect(&lb);
// On les selectionne
SelectObject(hdc, hp);
SelectObject(hdc, hb);
// On dessine le fond du scope
Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
// On pose le premier point
MoveToEx(hdc, k++, Zero - (BufferTmp[0]/yScale), NULL);
for(i=1; i<(TAILLE_BUFFER / 2); i+=xScale)
{
// On dessine les echantillons
LineTo(hdc, k++, Zero - (BufferTmp[i]/yScale));
}
// On suprime les objets
DeleteObject(hb);
DeleteObject(hp);
// Fin du dessin
EndPaint(hwnd, &ps);
return 0;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_BUTTON_CLOSESOUND:
DestroyWindow(Soundwindow);
}
default:
/* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
Voilà merci
