//创建存储文件
CFileException fileException;
CFile g_srcFileSound;
CString SoundPath1 = "D:\\SountTest";
CString g_SoundPath = SoundPath1 + "\\sound.wav";
if (!PathIsDirectory(SoundPath1))
bool is = CreateDirectory(SoundPath1, 0);//不存在则创建
if (!g_srcFileSound.Open(g_SoundPath, CFile::modeReadWrite | CFile::modeCreate, &fileException))
{
AfxMessageBox("声音数据创建失败");
}
else {
WAVEFORMATEX waveform;
waveform.wFormatTag = WAVE_FORMAT_PCM;//声音格式为PCM
waveform.nSamplesPerSec = 16000;//采样率,16000次/秒
waveform.wBitsPerSample = 16;//采样比特,16/次
waveform.nChannels = 1;//采样声道数,1声道
waveform.nAvgBytesPerSec = 16000;//每秒的数据率,就是每秒能采集多少字节的数据
waveform.nBlockAlign = 2;//一个块的大小,采样bit的字节数乘以声道数
waveform.cbSize = 0;//一般为0
g_isSound = true;
DWORD m_WaveHeaderSize = 38;
DWORD m_WaveFormatSize = 18;
g_srcFileSound.SeekToBegin();
g_srcFileSound.Write("RIFF", 4);
unsigned int Sec = (sizeof SHORT + m_WaveHeaderSize);
g_srcFileSound.Write(&Sec, sizeof(Sec));
g_srcFileSound.Write("WAVE", 4);
g_srcFileSound.Write("fmt ", 4);
g_srcFileSound.Write(&m_WaveFormatSize, sizeof(m_WaveFormatSize));
g_srcFileSound.Write(&waveform.wFormatTag, sizeof(waveform.wFormatTag));
g_srcFileSound.Write(&waveform.nChannels, sizeof(waveform.nChannels));
g_srcFileSound.Write(&waveform.nSamplesPerSec, sizeof(waveform.nSamplesPerSec));
g_srcFileSound.Write(&waveform.nAvgBytesPerSec, sizeof(waveform.nAvgBytesPerSec));
g_srcFileSound.Write(&waveform.nBlockAlign, sizeof(waveform.nBlockAlign));
g_srcFileSound.Write(&waveform.wBitsPerSample, sizeof(waveform.wBitsPerSample));
g_srcFileSound.Write(&waveform.cbSize, sizeof(waveform.cbSize));
g_srcFileSound.Write("data", 4);
}
}
写入
short soundData[DECT_HEIGHT];//数据
if (g_isSound) {
if (g_srcFileSound.m_hFile != CFile::hFileNull)//zzy 231228
{
g_srcFileSound.Write(soundData, sizeof(soundData));
}
}
关闭
if (g_isSound) {
if (g_srcFileSound.m_hFile != CFile::hFileNull)
{
g_srcFileSound.Close();
g_isSound = false;
//g_srcFileSound.m_hFile = CFile::hFileNull;
}