「C言語/C++/mcirec」の編集履歴(バックアップ)一覧はこちら
C言語/C++/mcirec - (2014/09/25 (木) 20:13:29) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
|開発環境|Microsoft Visual Studio Express 2013 for Windows Desktop|
|実行環境|Microsoft Windows 8.1 (64bit)|
|プロジェクトの種類|Visual C++/Win32 プロジェクト|
|プロジェクト名|mcirec|
|アプリケーションの種類|Windows アプリケーション|
|追加のオプション|空のプロジェクト、SDLチェック|
#table_zebra(project, #fff, #eee)
参考
-[[入力デバイスによる録音>http://eternalwindows.jp/winmm/wave/wave04.html]]
mcirec.cpp
#highlight(cpp){{
#pragma comment(lib, "winmm")
#include <Windows.h>
#include <string>
#include "resource.h"
using namespace std;
// 外部変数
HWND hEdit;
HWND hButton;
MCIDEVICEID mciId;
BOOL rec;
// 関数プロトタイプ宣言
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnOK(HWND hDlg);
void SetRec(BOOL b);
void OpenRec();
void CloseRec();
//==============================================================================
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_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
OnOK(hDlg);
break;
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
break;
}
break;
case WM_INITDIALOG:
hEdit = GetDlgItem(hDlg, IDC_EDIT);
hButton = GetDlgItem(hDlg, IDOK);
SetWindowText(hEdit, L"sample.wav");
SetRec(FALSE);
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
case WM_DESTROY:
if (rec) {
CloseRec();
}
break;
default:
return FALSE;
}
return TRUE;
}
void OnOK(HWND hDlg)
{
if (rec) {
CloseRec();
SetRec(FALSE);
}
else {
OpenRec();
SetRec(TRUE);
}
}
void SetRec(BOOL b)
{
SetWindowText(hButton, b ? L"■停止" : L"●録音");
rec = b;
}
void OpenRec()
{
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);
/*
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);
*/
}
void CloseRec()
{
TCHAR fileName[MAX_PATH];
GetWindowText(hEdit, fileName, _countof(fileName));
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);
/*
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);
*/
}
}}
resource.h
#highlight(cpp){{
#define IDD_MAIN 100
#define IDC_STATIC -1
#define IDC_EDIT 1000
}}
mcirec.rc
#highlight(cpp){{
// 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
DEFPUSHBUTTON "OK",IDOK,50,50,60,20
END
}}
|開発環境|Microsoft Visual Studio Express 2013 for Windows Desktop|
|実行環境|Microsoft Windows 8.1 (64bit)|
|プロジェクトの種類|Visual C++/Win32 プロジェクト|
|プロジェクト名|mcirec|
|アプリケーションの種類|Windows アプリケーション|
|追加のオプション|空のプロジェクト、SDLチェック|
#table_zebra(project, #fff, #eee)
参考
-[[入力デバイスによる録音>http://eternalwindows.jp/winmm/wave/wave04.html]]
mcirec.cpp
#highlight(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
#highlight(cpp){{
#define IDD_MAIN 100
#define IDC_STATIC -1
#define IDC_EDIT 1000
#define IDC_STATUS 1001
}}
mcirec.rc
#highlight(cpp){{
// 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
}}