使用mciSendCommand实现录音

来源:互联网 发布:手机 视频剪辑 软件 编辑:程序博客网 时间:2024/04/28 21:42
#include <windows.h>#include <tchar.h>#pragma comment(lib,"Winmm.lib")#define ID_RECORD 101#define ID_STOP   102#define ID_PLAY   103HINSTANCE hInst;LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,                     LPSTR     lpCmdLine, int       nCmdShow){ MSG msg; WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= (WNDPROC)WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon (NULL, IDI_APPLICATION);wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName= NULL;wcex.lpszClassName= TEXT("WinApp");wcex.hIconSm= LoadIcon (NULL, IDI_APPLICATION);RegisterClassEx(&wcex);    HWND hWnd;    hInst = hInstance;     hWnd = CreateWindow(TEXT("WinApp"), TEXT("Record"), WS_OVERLAPPEDWINDOW,      400,300, 300, 100, NULL, NULL, hInstance, NULL);   if (!hWnd)   {      return FALSE;   }   ShowWindow(hWnd, nCmdShow);   UpdateWindow(hWnd);while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return (int)msg.wParam;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){static TCHAR      szFileName[] = TEXT ("record.wav") ;    static WORD       wDeviceID ;    DWORD             dwError ;    MCI_GENERIC_PARMS mciGeneric ;    MCI_OPEN_PARMS    mciOpen ;    MCI_PLAY_PARMS    mciPlay ;    MCI_RECORD_PARMS  mciRecord ;    MCI_SAVE_PARMS    mciSave ;PAINTSTRUCT ps;switch (message) {case WM_COMMAND:switch(LOWORD(wParam)){ case ID_RECORD: DeleteFile (szFileName) ;                                // Open waveform audio                 mciOpen.dwCallback       = 0 ;                 mciOpen.wDeviceID        = 0 ;                 mciOpen.lpstrDeviceType  = TEXT ("waveaudio") ;                 mciOpen.lpstrElementName = TEXT ("") ;                  mciOpen.lpstrAlias       = NULL ;                                dwError = mciSendCommand (0, MCI_OPEN,  MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD_PTR) &mciOpen) ;  if (dwError != 0) { return TRUE ; }  wDeviceID = mciOpen.wDeviceID ;                                // Begin recording mciRecord.dwCallback =(DWORD_PTR)hWnd ;                 mciRecord.dwFrom     = 0 ;                 mciRecord.dwTo       = 0 ;                                mciSendCommand (wDeviceID, MCI_RECORD, MCI_NOTIFY,(DWORD_PTR) &mciRecord) ; break; case ID_STOP: mciGeneric.dwCallback = 0 ;                                mciSendCommand (wDeviceID, MCI_STOP, MCI_WAIT,(DWORD_PTR) &mciGeneric) ;                                // Save the file mciSave.dwCallback = 0 ;                 mciSave.lpfilename = szFileName ;                                mciSendCommand (wDeviceID, MCI_SAVE, MCI_WAIT | MCI_SAVE_FILE, (DWORD_PTR) &mciSave) ;                                // Close the waveform device                 mciSendCommand (wDeviceID, MCI_CLOSE, MCI_WAIT,                               (DWORD_PTR) &mciGeneric) ; break; case ID_PLAY: mciOpen.dwCallback       = 0 ;                 mciOpen.wDeviceID        = 0 ;                 mciOpen.lpstrDeviceType  = NULL ;                 mciOpen.lpstrElementName = szFileName ;                 mciOpen.lpstrAlias       = NULL ;                                dwError = mciSendCommand (0, MCI_OPEN,MCI_WAIT | MCI_OPEN_ELEMENT,(DWORD_PTR) &mciOpen) ; if (dwError != 0) { return TRUE ; }              wDeviceID = mciOpen.wDeviceID ;                                // Begin playing                              mciPlay.dwCallback = (DWORD_PTR) hWnd ;                 mciPlay.dwFrom     = 0 ;                 mciPlay.dwTo       = 0 ;                                mciSendCommand (wDeviceID, MCI_PLAY, MCI_NOTIFY,(DWORD_PTR) &mciPlay) ; break;}break;case WM_PAINT:BeginPaint (hWnd, &ps);  EndPaint (hWnd, &ps);break;case WM_CLOSE:DestroyWindow(hWnd);break;case WM_DESTROY:PostQuitMessage(0);break;case WM_CREATE:      CreateWindow(                     TEXT("BUTTON"), TEXT("Record"),                    WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,                    10,10,80,40,   hWnd, (HMENU)ID_RECORD,   hInst,    NULL);  CreateWindow(  TEXT("BUTTON"),  TEXT("Stop"),                     WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,                    100,10,80,40,   hWnd, (HMENU)ID_STOP,   hInst,    NULL);   CreateWindow( TEXT("BUTTON"), TEXT("Play"),                    WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,                    190,10,80,40,   hWnd, (HMENU)ID_PLAY,   hInst,    NULL);  break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}

0 0