Запись звука в файл

Всем доброго времени суток! Пытаюсь реализовать функции записи звука с микрофона, его вывода и записи в файл.Пользуюсь "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().

→ Ссылка