waveInOpen と co を使用して .wave ファイルにサウンドを録音しようとしています (こちらを参照) 。
これがバッファに記録する私のコードで、うまくいくようです:
#include <Windows.h>
#include <MMSystem.h>
#include <iostream>
using namespace std;
int main(){
HWAVEIN microHandle;
WAVEHDR waveHeader;
const int NUMPTS = 22050 * 10; // 10 seconds
int sampleRate = 22050;
short int waveIn[NUMPTS]; // 'short int' is a 16-bit type; I request 16-bit samples below
// for 8-bit capture, you'd use 'unsigned char' or 'BYTE' 8-bit types
MMRESULT result = 0;
WAVEFORMATEX format;
format.wFormatTag=WAVE_FORMAT_PCM; // simple, uncompressed format
format.wBitsPerSample=8; // 16 for high quality, 8 for telephone-grade
format.nChannels=1; // 1=mono, 2=stereo
format.nSamplesPerSec=sampleRate; // 22050
format.nAvgBytesPerSec=format.nSamplesPerSec*format.nChannels*format.wBitsPerSample/8;
// = nSamplesPerSec * n.Channels * wBitsPerSample/8
format.nBlockAlign=format.nChannels*format.wBitsPerSample/8;
// = n.Channels * wBitsPerSample/8
format.cbSize=0;
result = waveInOpen(µHandle, WAVE_MAPPER, &format, 0L, 0L, WAVE_FORMAT_DIRECT);
if (result)
{
cout << "Fail step 1" << endl;
cout << result << endl;
Sleep(10000);
return 0;
}
// Set up and prepare header for input
waveHeader.lpData = (LPSTR)waveIn;
waveHeader.dwBufferLength = NUMPTS*2;
waveHeader.dwBytesRecorded=0;
waveHeader.dwUser = 0L;
waveHeader.dwFlags = 0L;
waveHeader.dwLoops = 0L;
waveInPrepareHeader(microHandle, &waveHeader, sizeof(WAVEHDR));
// Insert a wave input buffer
result = waveInAddBuffer(microHandle, &waveHeader, sizeof(WAVEHDR));
if (result)
{
cout << "Fail step 2" << endl;
cout << result << endl;
Sleep(10000);
return 0;
}
result = waveInStart(microHandle);
if (result)
{
cout << "Fail step 3" << endl;
cout << result << endl;
Sleep(10000);
return 0;
}
// Wait until finished recording
do {} while (waveInUnprepareHeader(microHandle, &waveHeader, sizeof(WAVEHDR))==WAVERR_STILLPLAYING);
waveInClose(microHandle);
return 0;
}
しかし、ディスクに保存する方法についての機能や説明は見つかりませんでした
WAVEFORMATEX 構造体を保存する必要がありますか? または、wave ファイルのヘッダーに追加するものは他にありますか?
唯一のことは、Windows ライブラリのみを使用する必要があることです。他のライブラリをインストールする必要はありません。
ありがとうございました :)