開発環境 |
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