【录音小程序实用】这篇文章主要介绍了如何使用EVC(Embedded Visual C++)在Windows CE环境下实现录音功能,并将录音数据保存为WAV格式的文件。以下是关键知识点的详细说明:
1. **WAVEIN API**: WAVEIN是Windows API中用于音频输入的部分,它允许程序从声卡或其他音频输入设备收集声音数据。EVC通过调用这些API来实现录音功能。
2. **缓冲区管理**: 为了确保连续的录音效果,程序需要分配两个输入缓冲区(pBuffer1和pBuffer2),这样当一个缓冲区正在被设备填充时,另一个可以用于数据处理。缓冲区大小为16KB,可以根据实际需求调整。
3. **WAVEFORMATEX结构体**: 这个结构体定义了录音的音频格式,包括声道数、采样率、采样位宽等。例如,文中设置了单声道(nChannels=1),采样率为11025Hz(nSamplesPerSec),采样位宽为8位(wBitsPerSample)。其他参数如nBlockAlign和nAvgBytesPerSec根据声道数和采样位宽计算得出。
4. **waveInOpen函数**: 使用这个函数打开音频输入设备,参数包括设备句柄(hWaveIn)、映射器(WAVE_MAPPER,通常代表默认设备)、WAVEFORMATEX结构体以及回调函数等。如果函数返回错误,表示无法打开录音设备。
5. **声音文件头初始化**: 在录音开始前,需要为每个输入缓冲区创建一个PWAVEHDR结构体,用来存储缓冲区地址、长度等信息。通过`waveInPrepareHeader`函数将缓冲区信息与输入设备关联,然后使用`waveInAddBuffer`将缓冲区添加到设备的缓冲区队列。
6. **录音流程控制**: 开始录音通常涉及调用`waveInStart`函数,结束时使用`waveInStop`。当缓冲区填满时,回调函数会被触发,以便处理录音数据。程序可能需要循环处理缓冲区,直到录音结束。
7. **回调函数**: `CALLBACK_WINDOW`表示回调类型为窗口消息,这意味着当录音事件发生时,系统会发送一个消息到指定窗口(在这里是当前程序的窗口句柄`this->m_hWnd`)。
8. **文件保存**: 一旦录音完成,数据会被保存到WAV文件中。这通常涉及到创建WAV文件头,写入WAVEFORMATEX信息,然后将录音缓冲区的数据追加到文件中。
9. **资源释放**: 录音结束后,需要释放分配的内存(例如,释放pBuffer1和pBuffer2)并关闭输入设备(使用`waveInClose`)。
总的来说,录音小程序的核心是利用Windows API中的音频输入功能,结合适当的缓冲区管理和回调机制,实现实时录音并保存为标准的音频文件格式。这个过程涉及多个步骤,包括设备打开、参数设置、数据收集以及文件处理。在开发过程中,开发者需要注意处理各种可能出现的错误情况,确保录音的稳定性和质量。