Bonjour,

Je suis en train d'essayer de programmer un petit logiciel qui capture le son du microphone pour ensuite l'enregistrer en fichier WAV.

Pour ça, j'utiliser un petit tutoriel ( ainsi que les documentations ): Tutoriel ( la c'est la partie 3, donc enregistrement, mais il y a les autres bien entendu )

La seule différence est que je n'utilise pas de classes pour faire mon code... Mais jusque là tout avais fonctionner.

J'ai donc ce code:
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
78
79
80
81
82
83
84
 
#include <windows.h>
#include <mmsystem.h>
 
BEGIN_MESSAGE_MAP()
   ON_MESSAGE(MM_WIM_DATA, OnMyMessage)
END_MESSAGE_MAP()
 
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
 
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(wParam);
	UNREFERENCED_PARAMETER(lParam);
	return 0;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
	switch(Message) {
		case WM_DESTROY: {
			PostQuitMessage(0);
			break;
		}
		default:
			return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc;
	HWND hwnd;
	MSG msg;
	memset(&wc, 0, sizeof(wc));
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc;
	wc.hInstance	 = hInstance;
	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);	
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION);
	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION);
	if(!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}
	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "WindowClass", "Microphone Recorder", WS_VISIBLE | WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		640,
		480,
		NULL, NULL, hInstance, NULL);
	if(hwnd == NULL) {
		MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}
	WAVEFORMATEX WaveFormat;
	HWAVEIN WaveHandle;
	WAVEHDR WaveHeader;
	WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
	WaveFormat.nChannels = 1;
	WaveFormat.nSamplesPerSec = 22050;
	WaveFormat.wBitsPerSample = 8;
	WaveFormat.nAvgBytesPerSec = 22050;
	WaveFormat.nBlockAlign = 1;
	WaveFormat.cbSize = 0;
	int Res = waveInOpen(&WaveHandle, WAVE_MAPPER, &WaveFormat, 0, 0, WAVE_FORMAT_QUERY);
	if (Res == WAVERR_BADFORMAT) return 1;
	Res = waveInOpen(&WaveHandle, WAVE_MAPPER, &WaveFormat, MAKELONG(hwnd, 0), 0, CALLBACK_WINDOW);
	char* WaveData;
	int BufferSize;
	BufferSize = 10 * 22050;
	WaveData = new char[BufferSize];
	WaveHeader.dwBufferLength = BufferSize;
	WaveHeader.dwFlags = 0;
	WaveHeader.lpData = WaveData;
	Res = waveInPrepareHeader(WaveHandle, &WaveHeader, sizeof(WAVEHDR));
	Res = waveInAddBuffer(WaveHandle, &WaveHeader, sizeof(WAVEHDR));
	while(GetMessage(&msg, NULL, 0, 0) > 0) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
Et la partie qui pose problème est celle-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
BEGIN_MESSAGE_MAP()
   ON_MESSAGE(MM_WIM_DATA, OnMyMessage)
END_MESSAGE_MAP()
Dans le tutoriel à la place de "ON_MESSAGE", on devrais avoir "MESSAGE_HANDLER", mais ni l'un ni l'autre ne fonctionne... J'ai donc regarder la documentation et j'ai mis "ON_MESSAGE" mais ça ne fonctionne pas non plus. ( Documentation ) Si vous regardez bien, j'ai même essayer de mettre le code de la documentation directement pour essayer...

Le code d'erreur que j'obtient dans tout les cas est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
[Error] excepted constructor, destructor, or type conversion before 'ON_MESSAGE'
Quelqu'un aurais-t-il une idée ??

( N.B: Une précision importante, j'utiliser Dev-C++, je sais que ce n'est pas un logiciel mis à jour, mais je ne peut utiliser que ça à cause de mon ordinateur... )

Merci,

EyesGammer