MFC C++ 存储wav文件

//创建存储文件

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;
			}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值