Welcome

首页 / 软件开发 / C++ / 波形捕捉:(9)写入到WAV文件

波形捕捉:(9)写入到WAV文件2011-06-02 cnblogs stg609译WAV文件为资源交换文件格式(RIFF),包括若干数量的命名块,其中包含头 信息(如声音采样格式)或数据(如样本本身)。Win 32 API提供了打开关闭 FIFF文件、查找块等函数。这些函数的名字都以“mmio”开头。

DirectSound API 不包括写入WAV文件的方法。但是 DXUTsound.cpp 文 件实现了一个 CWaveFile 类,这个类具有以下管理捕捉文件的方 法:

·Open 方法。打开一个文件并且写入头部块。

·Write 方法。将数据从缓冲区写入到数据块中并且提高写指针 。

·Close 方法。将数据块的大小写入到头部并且关闭文件。

写入到一个WAV文件的第一步是调用 CWaveFile::Open 方法。这样会创 建一个文件并且写WAV格式块。参数为文件名,一个指向初始化后的 WAVEFORMATEX 结构体的指针和 WAVEFILE_WRITE 标志。这个方法返回一个 HRESULT。

下面的代码为写入打开了一个WAV文件:

Code

CWaveFile g_pWaveFile;
WAVEFORMATEX wfxInput;

ZeroMemory( &wfxInput, sizeof(wfxInput));
wfxInput.wFormatTag = WAVE_FORMAT_PCM;
wfxInput.nSamplesPerSec = 22050
wfxInput.wBitsPerSample = 8;
wfxInput.nChannels = 1;
wfxInput.nBlockAlign =
wfxInput.nChannels * (wfxInput.wBitsPerSample / 8);
wfxInput.nAvgBytesPerSec =
wfxInput.nBlockAlign * wfxInput.nSamplesPerSec;

g_pWaveFile = new CWaveFile;
if (FAILED(g_pWaveFile->Open("mywave.wav", &wfxInput,WAVEFILE_WRITE)))
{
g_pWaveFile->Close();
}