Windows Mobile下播放PCM音频的双缓冲用法

windows mobile下播放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)
{
lpwavehdr pwaveheader = (lpwavehdr)dwparam1;//系统自动识别是哪一个wavehdr播放完毕
waveoutunprepareheader( hwo, pwaveheader, sizeof(wavehdr) );//播放完后须调用此函数
//此处填充wavehdr的lpdate缓冲
waveoutprepareheader( hwo, pwaveheader, sizeof(wavehdr));
waveoutwrite( hwo, pwaveheader, sizeof(wavehdr) );
//...
}
return ;
}
6)播放完毕后,调用waveoutclose,释放缓冲。其他的一些waveout函数,如waveoutpause、 waveoutreset等等,在做播放器的时候会用得到。若播放过程中终止,须先调用waveoutreset,再调用waveoutclose。
本文为windows embedded征文比赛获奖文章。

全球像素最高手机即将推出 三星GalaxyA70s有望搭载6400万像素手机影像传感器
美高森美推出同级最佳低电容瞬态电压抑制二极管
基于STM32F407主控芯片的发动机转速/相位发生器设计方法分享
苹果macOS Big Sur11月12日将在美国正式放出
analog推出ADP160提供1.2V至4.2V范围的15种固定电压输出
Windows Mobile下播放PCM音频的双缓冲用法
深圳市摄像头行业协会2019年第一次会员交流会
晶体管式镍片电池点焊机的优势是什么
底层传感器信号链怎样保障自动驾驶安全
生物识别技术在未来的网络安全领域占据着重要的地位
Transphorm推出顶部散热型TOLT封装FET器件, 助力计算、人工智能、能源和汽车电源系统实现卓越的热性能和电
气密性检测仪在医疗器械检测中的应用
比科奇与微电子所达成战略合作协议
磁环颜色代表什么 磁环的颜色有什么区别
GD32 串口接受异常的几个原因
「应用笔记」激光二维码导航混合制图
MLX91802应用于TPMS系统级封装解决方案 实现固件“即买即用”
手机大厂也来抢一杯羹 TWS蓝牙耳机市场今年预增长52.9%
防爆电动执行器的安装和连接
蚂蚁金服在区块链上的发力点在哪里