【小程序】PCM音频录制播放小工具

VS2010工程源码下载链接: https://pan.baidu.com/s/1Vf6FOISDXDjORyLcQqCErw

PCMwindows系统录音后得到的纯音频数据,需要添加头部说明信息才能被播放器使用。 尝试实现控制台小程序: 1.录制音频并保存为wav格式文件 2.播放wav音频文件

Feature

  • 程序使用效果
  • 音频数据结构:PCMWAV
  • Windows音频采集/播放 API
  • 简单工厂方法封装
  • 调试过程中遇到的问题

程序使用效果

控制台界面

【小程序】PCM音频录制播放小工具

        当前只实现了12两个功能,即录音、播放。

        录音时间限定为3秒。

        3分离出双声道音频文件的左声道、右声道部分待后续开发。

录制得到的wav文件

【小程序】PCM音频录制播放小工具

        录制时间目前固定成3秒。

        生成的wav文件存放在同级目录下。

播放wav文件

【小程序】PCM音频录制播放小工具

        目前只支持播放工具自身录制的wav文件,因为不同wav文件的头部信息可能有差异,带额外描述信息的复杂wav文件暂不支持。

 

音频数据结构:PCM、WAV

PCM数据结构

【小程序】PCM音频录制播放小工具

        小工具使用“8位单声道”PCM文件,降低实现难度。

wav数据结构

【小程序】PCM音频录制播放小工具

【小程序】PCM音频录制播放小工具

【小程序】PCM音频录制播放小工具

        wav头标准位44字节,还可以在末尾添加额外的描述信息,用来描述复杂的wav文件。

        小工具只支持44字节头部的标准wav文件,降低实现难度。

 

Windows音频采集/播放 API

音频采集API

API名称

功能

waveInOpen

打开录音设备

waveInPrepareHeader

为录音设备准备一个缓冲区

waveInAddBuffer

为录音设备准备一个缓冲区

waveInPrepareHeader

向录音设备发送一个输入缓冲区

waveInStart

启动录音

waveInStop

停止录音

waveInReset

重置录音设备

音频播放API

API名称

功能

waveOutOpen

打开音频播放设备

waveOutPrepareHeader

为音频播放设备准备一个缓冲区

waveOutWrite

音频播放

 

简单工厂方法封装

UML类视图

【小程序】PCM音频录制播放小工具

关键代码

  1. //操作工厂类:用于解耦PCM数据处理的各操作,便于后期扩展及维护修改
  2. class OperationFactory
  3. {
  4. public:
  5.     static Operation* createOperate(int operate)
  6.     {
  7.         Operation *oper = NULL;
  8.  
  9.         switch (operate)
  10.         {
  11.         case 1:
  12.             oper = new OperationRec(); //录音
  13.             break;
  14.         case 2:
  15.             oper = new OperationPlay(); //播放
  16.             break;
  17.         default:
  18.             break;
  19.         }
  20.         return oper;
  21.     }
  22. };

简单工厂模式下,好处如下:

1.节省空间:录音、播放操作只在运行时分配空间。
 

2.可扩展:如果想增加对PCM音频数据的操作,如音量增强、噪音消除,只需改动工厂类,并且新增对应操作的类即可,不许改变原有操作类。

 

调试过程中遇到的问题

1.使用CFile类读写文件,需要在项目->属性中添加MFC相关库 2.API入参类型匹配错误,需仔细查看API入参类型描述

 

参考资料

1.波形音频(WAVE)底层接口的学习与使用

https://blog.****.net/gongluck93/article/details/53096013

2.简单录、放音并保存为wav文件程序

https://blog.****.net/benny5609/article/details/1915135?utm_source=blogxgwz3

3.多媒体基础知识之PCM数据

https://www.cnblogs.com/CoderTian/p/6657844.html

4.WAV文件格式详解

https://blog.****.net/imxiangzi/article/details/80265978