没有合适的资源?快使用搜索试试~ 我知道了~
播放PCM音频数据的双缓冲用法
1星 需积分: 48 25 下载量 97 浏览量
2016-03-14
15:05:14
上传
评论 2
收藏 30KB DOC 举报
温馨提示
试读
2页
播放PCM音频数据的双缓冲用法
资源推荐
资源详情
资源评论
最近用 libmad 做了些 mp3 解码的工作,顺便也研究了一下 windows 下播放 PCM 音频数据
的双缓冲用法。
libmad 的调用在此暂略过不表。
libmad 解码出来的是 16bit 的 PCM 数据,调用 windows API 可对其实现播放。不过如果解
码一段播放一段,听起来会有一顿一顿的感觉,不流畅,究其原因,是没有使用双缓冲。
吭哧吭哧研究了半天,终于编码实现,播放出来的效果倒也很流畅。
流程如下:
1)声明两个 WAVEHDR 结构 waveHeader1,waveHeader2,并分别对其 lpData 参数分配缓冲
buf1,buf2;
2)声明 WAVEFORMATEX 结构 waveFormat,以及 HWAVEOUT 结构 hWaveOut。调用函数
waveOutOpen( &hWaveOut, WAVE_MAPPER, &waveFormat, (DWORD)waveOutProc,
NULL, CALLBACK_FUNCTION );
waveOutProc 为回调函数,在后面会提到。
也说一下 waveFormat 的各参数。根据 MSDN 解释,nChannels 为通道数,nSamplesPerSec
为 采 样 率 , wFormatTag 的 值 为 WAVE_FORMAT_PCM , wBitsPerSample 为
16 , nBlockAlign 为 nChannels*wBitsPerSample/8 , nAvgBytesPerSec 为
nSamplesPerSec*nBlockAlign;
3)读入 buf1,buf2,并设置好相应长度;
4)将 waveHeader1,waveHeader2 写入 wave 设备:
waveOutPrepareHeader( hWaveOut, &waveHeader1, sizeof(WAVEHDR));
waveOutPrepareHeader( hWaveOut, &waveHeader2, sizeof(WAVEHDR));
waveOutWrite( hWaveOut, &waveHeader1, sizeof(WAVEHDR) );
waveOutWrite( hWaveOut, &waveHeader2, sizeof(WAVEHDR) );
5)关于回调
void CALLBACK waveOutProc( HWAVEOUT hwo,
UINT uMsg,
DWORD dwInstance,
DWORD dwParam1,
DWORD dwParam2 )
{
if(uMsg == WOM_DONE)
{
资源评论
- 温瑞安2018-12-27doc文档没撒用
大大的道道的
- 粉丝: 41
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功