Запись звука в файл
Всем доброго времени суток! Пытаюсь реализовать функции записи звука с микрофона, его вывода и записи в файл.Пользуюсь "winmm.lib" Первые 2 функции уже есть, застрял, соответственно, на последней. Можно ли написать данную функцию с помощью CreateFileA()?
Имеющиеся функции:
const int NUMPTS = 44100 * 2 * 5; // 5 seconds
int sampleRate = 44100;
short int waveIn[NUMPTS];
void Record(WAVEFORMATEX *MFX)
{
WAVEFORMATEX pFormat;
pFormat.wFormatTag = WAVE_FORMAT_PCM;
pFormat.nChannels = 2;
pFormat.wBitsPerSample = 16;
pFormat.nSamplesPerSec = sampleRate;
pFormat.nAvgBytesPerSec = sampleRate * pFormat.nChannels * pFormat.wBitsPerSample / 8;
pFormat.nBlockAlign = pFormat.nChannels * pFormat.wBitsPerSample / 8;
pFormat.cbSize = 0;
HWAVEIN hWaveIn;
WAVEHDR waveInHdr;
waveInOpen(&hWaveIn, WAVE_MAPPER, &pFormat, 0L, 0L, WAVE_FORMAT_DIRECT);
waveInHdr.lpData = (LPSTR)waveIn;
waveInHdr.dwBufferLength = NUMPTS * 2;
waveInHdr.dwBytesRecorded = 0;
waveInHdr.dwUser = 0L;
waveInHdr.dwFlags = 0L;
waveInHdr.dwLoops = 0L;
waveInPrepareHeader(hWaveIn, &waveInHdr, sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn, &waveInHdr, sizeof(WAVEHDR));
waveInStart(hWaveIn);
// Wait until finished recording
do {} while (waveInUnprepareHeader(hWaveIn, &waveInHdr, sizeof(WAVEHDR)) == WAVERR_STILLPLAYING);
waveInClose(hWaveIn);
(*MFX) = pFormat;
}
void ListenRec(WAVEFORMATEX pFormat)
{
HWAVEOUT hWaveOut;
WAVEHDR WaveOutHdr;
waveOutOpen(&hWaveOut, WAVE_MAPPER, &pFormat, 0L, 0L, WAVE_FORMAT_DIRECT);
WaveOutHdr.lpData = (LPSTR)waveIn;
WaveOutHdr.dwBufferLength = NUMPTS * 2;
WaveOutHdr.dwBytesRecorded = 0;
WaveOutHdr.dwUser = 0L;
WaveOutHdr.dwFlags = 0L;
WaveOutHdr.dwLoops = 1L;
waveOutPrepareHeader(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR));
waveOutSetVolume(hWaveOut, 0xFFFFFFFF);
waveOutWrite(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR));
waveOutClose(hWaveOut);
system("pause");
}
Приветствуется любая критика!
Ответы (1 шт):
Автор решения: Lunar_
→ Ссылка
CreateFile - открывает доступ к файлу, это по сути расширенный аналог std::ofstream .Open из С++. А записать данные из буфера в файл можно с помощью WriteFile().