资源简介
这份代码实现打开PCM裸流文件并用双缓存机制进行播放的,可在VS2013下直接编译运行,其中包含一个PCM裸流文件。

代码片段和文件信息
#include
#include
#pragma comment(lib “winmm.lib“)
#define DATASIZE 1024*512 //分次截取数据大小
FILE* pcmfile; //音频文件
HWAVEOUT hwo;
void CALLBACK WaveCallback(HWAVEOUT hWave UINT uMsg DWORD dwInstance DWORD dw1 DWORD dw2)//回调函数
{
switch (uMsg)
{
case WOM_DONE://上次缓存播放完成触发该事件
{
LPWAVEHDR pWaveHeader = (LPWAVEHDR)dw1;
pWaveHeader->dwBufferLength = fread(pWaveHeader->lpData 1 DATASIZE pcmfile);;
waveOutPrepareHeader(hwo pWaveHeader sizeof(WAVEHDR));
waveOutWrite(hwo pWaveHeader sizeof(WAVEHDR));
break;
}
}
}
void main()
{
int cnt;
WAVEHDR wh1;
WAVEHDR wh2;
WAVEFORMATEX wfx;
fopen_s(&pcmfile “paomo.pcm“ “rb“);//打开文件
wfx.wFormatTag = WAVE_FORMAT_PCM;//设置波形声音的格式
wfx.nChannels = 1;//设置音频文件的通道数量
wfx.nSamplesPerSec = 8000;//设置每个声道播放和记录时的样本频率
wfx.nAvgBytesPerSec = 16000;//设置请求的平均数据传输率单位byte/s。这个值对于创建缓冲大小是很有用的
wfx.nBlockAlign = 2;//以字节为单位设置块对齐
wfx.wBitsPerSample = 16;
wfx.cbSize = 0;//额外信息的大小
waveOutOpen(&hwo WAVE_MAPPER &wfx (DWORD)WaveCallback 0L CALLBACK_FUNCTION);//打开一个给定的波形音频输出装置来进行声音播放,方式为回调函数方式。如果是对话框程序,可以将第五个参数改为(DWORD)this,操作跟本Demo程序相似
wh1.dwLoops = 0L;//播放区一
wh1.lpData = new char[DATASIZE];
wh1.dwBufferLength = DATASIZE;
fread(wh1.lpData 1 DATASIZE pcmfile);
wh1.dwFlags = 0L;
waveOutPrepareHeader(hwo &wh1 sizeof(WAVEHDR));//准备一个波形数据块用于播放
waveOutWrite(hwo &wh1 sizeof(WAVEHDR));//在音频媒体中播放第二个参数指定的数据,也相当于开启一个播放区的意思
wh2.dwLoops = 0L;//播放区二,基本同上
wh2.lpData = new char[DATASIZE];
wh2.dwBufferLength = DATASIZE;
fread(wh2.lpData 1 DATASIZE pcmfile);
wh2.dwFlags = 0L;
waveOutPrepareHeader(hwo &wh2 sizeof(WAVEHDR));
waveOutWrite(hwo &wh2 sizeof(WAVEHDR));
while (wh1.dwBufferLength != 0 || wh2.dwBufferLength != 0)//如果文件还在没播放完则等待500ms
{
Sleep(500);
}
waveOutUnprepareHeader(hwo &wh1 sizeof(WAVEHDR));//清理数据
waveOutUnprepareHeader(hwo &wh2 sizeof(WAVEHDR));
delete []wh1.lpData;
delete []wh2.lpData;
fclose(pcmfile);//关闭文件
return;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-03-22 02:20 PcmDoubleBufferPla
目录 0 2015-03-22 02:20 PcmDoubleBufferPla
目录 0 2015-03-22 02:20 PcmDoubleBufferPla
文件 1009 2015-03-21 18:20 PcmDoubleBufferPla
文件 18944 2015-03-22 02:20 PcmDoubleBufferPla
目录 0 2015-03-22 02:20 PcmDoubleBufferPla
文件 4144064 2014-06-09 21:51 PcmDoubleBufferPla
文件 2343 2015-03-22 02:20 PcmDoubleBufferPla
文件 4115 2015-03-21 18:22 PcmDoubleBufferPla
文件 962 2015-03-21 18:22 PcmDoubleBufferPla
相关资源
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
评论
共有 条评论