開発環境 Microsoft Visual Studio Express 2013 for Windows Desktop
実行環境 Microsoft Windows 8.1 (64bit)
プロジェクトの種類 Visual C++/Win32 プロジェクト
プロジェクト名 mcirec
アプリケーションの種類 Windows アプリケーション
追加のオプション 空のプロジェクト、SDLチェック

参考

mcirec.cpp
#pragma comment(lib, "winmm")
 
#include <Windows.h>
#include <string>
#include "resource.h"
 
using namespace std;
 
#define IDT_TIMER1 1
 
// 外部変数
HWND hButton;
BOOL rec;
MCIDEVICEID mciId;
 
// 関数プロトタイプ宣言
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnOK(HWND hDlg);
void SetRec(BOOL b);
void OpenRec(HWND hDlg);
void CloseRec(HWND hDlg);
 
//==============================================================================
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
{
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
	return 0;
}
 
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg) {
	case WM_TIMER:
		{
			TCHAR stat[256];
			mciSendString(L"status Rec position", stat, _countof(stat), NULL);
			SetDlgItemText(hDlg, IDC_STATUS, stat);
		}
		break;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			OnOK(hDlg);
			break;
		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
			break;
		}
		break;
	case WM_INITDIALOG:
		hButton = GetDlgItem(hDlg, IDOK);
		SetDlgItemText(hDlg, IDC_EDIT, L"sample.wav");
		SetRec(FALSE);
		break;
	case WM_CLOSE:
		EndDialog(hDlg, 0);
		break;
	case WM_DESTROY:
		if (rec) {
			CloseRec(hDlg);
		}
		break;
	default:
		return FALSE;
	}
	return TRUE;
}
 
void OnOK(HWND hDlg)
{
	if (rec) {
		CloseRec(hDlg);
		SetRec(FALSE);
	}
	else {
		OpenRec(hDlg);
		SetRec(TRUE);
	}
}
 
void SetRec(BOOL b)
{
	SetWindowText(hButton, b ? L"■停止" : L"●録音");
	rec = b;
}
 
void OpenRec(HWND hDlg)
{
	wstring set1 = L"channels 1 samplespersec 8000 bytespersec 8000 alignment 1 bitspersample 8";
	mciSendString(L"open new type waveaudio alias Rec", NULL, 0, NULL);
	mciSendString((wstring(L"set Rec ") + set1).c_str(), NULL, 0, NULL);
	mciSendString(L"record Rec", NULL, 0, NULL);
 
	SetTimer(hDlg, IDT_TIMER1, 100, NULL);
/*
	MCI_OPEN_PARMS mciOpen;
	mciOpen.lpstrElementName = TEXT("");
	mciOpen.lpstrDeviceType = LPCTSTR(MCI_DEVTYPE_WAVEFORM_AUDIO);
	mciSendCommand(0, MCI_OPEN,
	MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
	mciId = mciOpen.wDeviceID;
 
	MCI_WAVE_SET_PARMS mciWave;
	mciWave.nChannels = 1;
	mciWave.wBitsPerSample = 8;
	mciWave.nSamplesPerSec = 8000;
	mciSendCommand(mciId, MCI_SET,
	MCI_WAVE_SET_CHANNELS | MCI_WAVE_SET_BITSPERSAMPLE | MCI_WAVE_SET_SAMPLESPERSEC,
	(DWORD)&mciWave);
 
	mciSendCommand(mciId, MCI_RECORD, 0, 0);
*/
}
 
void CloseRec(HWND hDlg)
{
	KillTimer(hDlg, IDT_TIMER1);
 
	TCHAR fileName[MAX_PATH];
	GetDlgItemText(hDlg, IDC_EDIT, fileName, _countof(fileName));
 
	mciSendString(L"stop Rec", NULL, 0, NULL);
	mciSendString((wstring(L"save Rec ") + fileName).c_str(), NULL, 0, NULL);
	mciSendString(L"close Rec", NULL, 0, NULL);
/*
	mciSendCommand(mciId, MCI_STOP, MCI_WAIT, 0);
 
	MCI_SAVE_PARMS mciSave;
	mciSave.lpfilename = fileName;
	mciSendCommand(mciId, MCI_SAVE, MCI_WAIT | MCI_SAVE_FILE, (DWORD)&mciSave);
 
	mciSendCommand(mciId, MCI_CLOSE, 0, 0);
*/
}
 

resource.h
#define IDD_MAIN	100
 
#define IDC_STATIC	-1
#define IDC_EDIT	1000
#define IDC_STATUS	1001
 

mcirec.rc
// resource script
#include <windows.h>
#include "resource.h"
 
IDD_MAIN DIALOGEX 100, 100, 160, 100
STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION "mcirec"
FONT 9, "MS Pゴシック"
BEGIN
	LTEXT		"ファイル名:",IDC_STATIC,10,10,50,15
	EDITTEXT	IDC_EDIT,60,10,90,15,ES_AUTOHSCROLL
	LTEXT		"", IDC_STATUS, 60, 30, 90, 15
	DEFPUSHBUTTON	"OK", IDOK, 50, 50, 60, 20
END
 
最終更新:2014年09月25日 20:13