资源简介
这份代码实现打开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++高校工资管理系统
- Effective Modern C++英文版及中文翻译
- ldra c++ testbed 安装文档1
- 音频解码实现C++音频解码实现C++
- vc++&sql sever实现超市管理系统
- c++辅助源码.rar
- 利用c语言实现FFT运算
- C++ Concurrency in Action (2nd) 无水印
- Diab C/C++ Compiler for PowerPC
- Internet选项设置-C++
- C++_WebService_Demon
- WIndow下使用QT C++开发生成带Logo的二维
- 医院管理系统数据库
- 局域网截包程序设计C++
- C++实现的基于内容的图像检索
- 用户登录界面设计
- FillHole.rar
- 训练SVM分类器 VS2013 C++
- vc++ 文本编辑器仿记事本MFC版
- VC++6.0小番茄助手(绿色版可用)173
- VC++ 2010 Express 中文
- 浙江大学_翁恺_c++_课件和源代码
- 蚁群算法在TSP中的运用c++版
- 深入理解 C++11 :C++11 新特性解析与应
- VC++,CSocket实现网络聊天,可发文件,
- 正弦,方波,三角波生成程序
- C++经典算法集与案例六个PDF文件
- C++语言程序设计第四版 郑莉 答案 p
- 计算BMP24位真彩色图像PSNR的C++小程序
- 基于C++的五子棋游戏设计
评论
共有 条评论