WEB开发网
开发学院软件开发VC 简单录、放音并保存为wav文件程序 阅读

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

 2010-07-15 20:45:11 来源:WEB开发网   
核心提示:引言我是C++的初学者,入门都要靠VCKBASE,简单录、放音并保存为wav文件程序,好在里面有很多适合于初学者的例子,让我少走了很多弯路,采样精度为8或16cbSize:附加格式信息的数据块大小概念2、定义设备头结构WAVEHDR定义了指向波形数据缓冲区的设备头,typedef struct { LPSTR lpDa

引言

我是C++的初学者,入门都要靠VCKBASE,好在里面有很多适合于初学者的例子,让我少走了很多弯路,为了回馈大家,我也把我最近刚完成的一个简单的小程序提供给大家,让那些曾经和我一样徘徊在C++大门之外的人能快些掌握要领,大家不妨看一看。

本文以VC知识库第26期 栾义明 先生的《基于API的录音机程序》为基础的,在此深表感谢!相同之处不再重复,我在此基础上增加了将录音保存为wav文件的格式,便于大家参考。

基本步骤及思想:设定音频采集参数(采样率、声道等),打开音频设备、准备wave数据头和开辟缓存,操作采集的数据并保存为wav文件。设定音频回放参数,打开回放设备、准备wave数据头和写wave数据。另外样本程序需包含#include <mmsystem.h>和#pragma comment(lib,"WINMM.LIB")多媒体支持。

在介绍程序前,需要你对wave文件的格式和相关一些基础概念有所了解,这些均可以在msdn中查找,为方便理解,我们将其整理,如果对这些基础知识已有所了解,可以跳过。

概念1、定义波形数据格式

typedef struct{WORD wFormatTag;
   WORD nChannels;
   DWORD nSamplesPerSec;
   DWORD nAvgBytesPerSec;
   WORD nBlockAlign;
   WORD wBitsPerSample;
   WORD cbSize; } WAVEFORMATEX;

具体参数解释如下:

wFormatTag:波形数据的格式,定义在MMREG.H文件中

nChannels:波形数据的通道数:单声道或立体声

nSamplesPerSec:采样率,对于PCM格式的波形数据,采样率有8.0 kHz,11.025kHz,22.05 kHz,44.1 kHz等

nAvgBytesPerSec:数据率,对于PCM格式的波形数据,数据率等于采样率乘以每样点字节数

nBlockAlign:每个样点字节数

wBitsPerSample:采样精度,对于PCM格式的波形数据,采样精度为8或16

cbSize:附加格式信息的数据块大小

概念2、定义设备头结构

WAVEHDR定义了指向波形数据缓冲区的设备头。

typedef struct { LPSTR lpData;
  DWORD dwBufferLength;
  DWORD dwBytesRecorded;
  DWORD dwUser;
  DWORD dwFlags;
  DWORD dwLoops;
  struct wavehdr_tag * lpNext;
  DWORD reserved; } WAVEHDR;

lpData:波形数据的缓冲区地址

dwBufferLength:波形数据的缓冲区地址的长度

dwBytesRecorded:当设备用于录音时,标志已经录入的数据长度

dwUser:用户数据

dwFlags:波形数据的缓冲区的属性

dwLoops:播放循环的次数,仅用于播放控制中

lpNext和reserved均为保留值

1 2  下一页

Tags:简单 保存 wav

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接