Неполучается снять звук с микрофона

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 18 Jul 2010.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Делаю так(весь листинг):
    Code:
    HINSTANCE hInst;								
    TCHAR szTitle[MAX_LOADSTRING];					
    TCHAR szWindowClass[MAX_LOADSTRING];			
    
    ATOM				MyRegisterClass(HINSTANCE hInstance);
    BOOL				InitInstance(HINSTANCE, int);
    LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);
    HANDLE file;
    HWAVEIN in;
    char *buf;
    WAVEHDR wd;
    long bufsz;
    __int64 filePosition=0;
    int recordseconds=0;
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    	UNREFERENCED_PARAMETER(hPrevInstance);
    	UNREFERENCED_PARAMETER(lpCmdLine);
    	MSG msg;
    	HACCEL hAccelTable;
    	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    	LoadString(hInstance, IDC_WAVE2, szWindowClass, MAX_LOADSTRING);
    	MyRegisterClass(hInstance);
    	if (!InitInstance (hInstance, nCmdShow))
    	{
    		return FALSE;
    	}
    
    	hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WAVE2));
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    
    	return (int) msg.wParam;
    }
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    	WNDCLASSEX wcex;
    
    	wcex.cbSize = sizeof(WNDCLASSEX);
    
    	wcex.style			= CS_HREDRAW | CS_VREDRAW;
    	wcex.lpfnWndProc	= WndProc;
    	wcex.cbClsExtra		= 0;
    	wcex.cbWndExtra		= 0;
    	wcex.hInstance		= hInstance;
    	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WAVE2));
    	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
    	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
    	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_WAVE2);
    	wcex.lpszClassName	= szWindowClass;
    	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    	return RegisterClassEx(&wcex);
    }
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
    
       hInst = hInstance;
    
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
       SetWindowPos(hWnd,HWND_TOP,100,100,300,150,SWP_SHOWWINDOW);
       return TRUE;
    }
    	
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	int wmId, wmEvent;
    	PAINTSTRUCT ps;
    	HDC hdc;
    	DWORD wb;
    	char timert[1024]="";
    	switch (message)
    	{
    	case WM_COMMAND:
    		{
    		wmId    = LOWORD(wParam);
    		wmEvent = HIWORD(wParam);
    			if(LOWORD(wParam)==200)
    				{
    					waveInClose(in);
    					CloseHandle(file);
    					recordseconds=0;
    				}
    				if(LOWORD(wParam)==201)
    				{
    					   WAVEFORMATEX wf;
    						ZeroMemory(&wf,sizeof(WAVEFORMATEX));
    						wf.cbSize=0;
    						wf.wFormatTag=WAVE_FORMAT_PCM;
    						wf.wBitsPerSample=16;
    						wf.nSamplesPerSec=16000L;
    						wf.nChannels=1;
    						wf.nBlockAlign=2;
    						wf.nAvgBytesPerSec=wf.nSamplesPerSec*wf.nBlockAlign;
    						waveInOpen(&in,WAVE_MAPPER,&wf,(DWORD)hWnd,0L, CALLBACK_WINDOW);
    						bufsz=wf.nBlockAlign*wf.nSamplesPerSec;
    						buf=new char[bufsz];
    						wd.dwBufferLength=bufsz;
    						wd.lpData=buf;
    						waveInPrepareHeader(in,&wd,sizeof(WAVEHDR));
    						waveInAddBuffer(in,&wd,sizeof(WAVEHDR));
    						waveInStart(in);
    						file=CreateFileA("rec.wav",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    				}
    		}break;
    		case WM_CREATE:
    			{
    				CreateWindow("button",TEXT("Stop"),WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON ,25,50,70,30,hWnd,(HMENU)200,hInst,NULL);
    				CreateWindow("button",TEXT("Start"),WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON ,200,50,70,30,hWnd,(HMENU)201,hInst,NULL);
    			}break;
    		case MM_WIM_DATA:
    				{
    					char er[1024];
    					MMRESULT result=0;
    					waveInUnprepareHeader(in, &wd, sizeof(WAVEHDR));
    					SetFilePointer(file,filePosition,NULL,FILE_BEGIN);
    					filePosition=filePosition+bufsz;
    					WriteFile(file,buf,bufsz,&wb,0);
    					memset(buf,NULL,bufsz);
    					wd.lpData=buf;
    					waveInPrepareHeader(in,&wd,sizeof(WAVEHDR));
    					waveInAddBuffer(in,&wd,sizeof(WAVEHDR));
    					result=waveInStart(in);
    					if(result!=MMSYSERR_NOERROR)
    					{
    						waveInGetErrorText(result,er,1024);
    						MessageBox(hWnd,er,"",MB_OK);
    					}
    					recordseconds++;
    					wsprintf(timert,"ВРЕМЯ ЗАПИСИ:%d",recordseconds);
    					//MessageBox(0,timert,"",MB_OK);
    				}break;
    		case WM_NCCREATE:
            {
                LPCREATESTRUCT lpcp=(LPCREATESTRUCT)lParam;
    			lpcp->style &= (~WS_MAXIMIZEBOX );
    			lpcp->style &= (~WS_SIZEBOX );
                SetWindowLong(hWnd, GWL_STYLE, lpcp->style);
                return true;
            }
            break;
    	case WM_PAINT:
    		hdc = BeginPaint(hWnd, &ps);
    		RECT timeIndic;
    		timeIndic.bottom=50;
    		timeIndic.left=260;
    		timeIndic.right=40;
    		timeIndic.top=20;
    		DrawText(hdc,timert,1024,&timeIndic,DT_CENTER);
    		EndPaint(hWnd, &ps);
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	return 0;
    }
    
    Проблема в том что не один плеер неможет возпроизвести получившийся файл.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну возьми мой micspy и там в исходниках глянешь как и что сделано. У меня писал в mp3 сразу
     
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Мне уже подсказали что формат wav немного не тот каким я его себе представлял.