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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013025955/article/details/85220386

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

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

Feature

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

程序使用效果

控制台界面

https://img-blog.csdnimg.cn/20181223090955366

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

        录音时间限定为3秒。

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

录制得到的wav文件

https://img-blog.csdnimg.cn/20181223090955469

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

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

播放wav文件

https://img-blog.csdnimg.cn/20181223090955589

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

 

音频数据结构:PCM、WAV

PCM数据结构

https://img-blog.csdnimg.cn/20181223090955606

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

wav数据结构

https://img-blog.csdnimg.cn/20181223090955695

https://img-blog.csdnimg.cn/20181223090955765

https://img-blog.csdnimg.cn/20181223090955782

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

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

 

Windows音频采集/播放 API

音频采集API

API名称

功能

waveInOpen

打开录音设备

waveInPrepareHeader

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

waveInAddBuffer

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

waveInPrepareHeader

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

waveInStart

启动录音

waveInStop

停止录音

waveInReset

重置录音设备

音频播放API

API名称

功能

waveOutOpen

打开音频播放设备

waveOutPrepareHeader

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

waveOutWrite

音频播放

 

简单工厂方法封装

UML类视图

https://img-blog.csdnimg.cn/20181223090955868

关键代码

  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.csdn.net/gongluck93/article/details/53096013

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

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

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

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

4.WAV文件格式详解

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

 

猜你喜欢

转载自blog.csdn.net/u013025955/article/details/85220386