`
mmdev
  • 浏览: 13129480 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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 Mobile下音频录音和播放应用

    3. **音频API**:在Windows Mobile中,开发者通常使用Windows CE的多媒体API(如MMSystem或Core Audio API)来处理音频录制和播放。这些API提供了与硬件交互的能力,允许应用程序控制音频输入和输出。 4. **WAVEDEV...

    AMBE转PCM音频算法

    PCM是一种常见的数字音频编码方法,它将连续的模拟信号转化为离散的数字信号。在AMBE转PCM的过程中,首先AMBE编码的9字节数据需要通过逆向算法进行解码,这个过程通常涉及复杂的数字信号处理技术,包括滤波、解交织...

    windows mobile下用libmad播放MP3

    在Windows Mobile(WM)平台上开发应用程序,特别是在多媒体领域,经常需要处理音频文件,尤其是流行的MP3格式。本文将深入探讨如何在WM系统上利用开源库libmad实现MP3播放功能,为开发者提供一个清晰的实践指南。 ...

    Windows Mobile下音频录音和播放应用(已解密)

    在Windows Mobile平台上开发音频录音和播放应用是一项技术性较强的工作,涉及到多个关键知识点。下面将详细阐述这些要点。 首先,Windows Mobile操作系统是基于Windows CE内核的,它为移动设备提供了一个与桌面版...

    利用WMPLib在Windows mobile下播放mp3

    在Windows Mobile平台上开发C#智能设备应用程序时,有时我们需要实现音频播放功能,特别是播放MP3格式的音乐文件。WMPLib(Windows Media Player Library)是一个非常实用的库,它允许开发者在应用程序中集成Windows...

    Windows Mobile6.5开发环境准备

    对于Windows Mobile 6.5应用开发,推荐使用Visual Studio 2008专业版或更高版本,或者Visual Studio 2005标准版或更高版本。这两个版本的IDE(集成开发环境)都支持Windows Mobile应用的开发。Visual Studio提供了...

    利用WMPLib在Windows mobile下播放mp3-M

    在Windows Mobile平台上开发C#智能设备应用程序时,有时我们需要实现音频播放功能,特别是播放MP3格式的音乐文件。本文将详细介绍如何利用WMPLib库在Windows Mobile设备上实现这一目标。 WMPLib(Windows Media ...

    Windows Mobile设备中心(64位)

    而"MicrosoftWindowsMobile设备中心forVista64-bit__PCHome软件介绍.txt"则是一份文本文件,很可能包含了对Windows Mobile设备中心的详细说明,包括软件的使用方法、注意事项以及可能的系统要求。 在实际使用过程中...

    Windows Mobile 游戏设计

    了解如何集成WMA或MP3格式的音频文件,并控制它们的播放、暂停和停止,是Windows Mobile游戏设计师必备的技能。 7. **多线程编程**:为了实现流畅的游戏体验,开发者需利用多线程技术,将图形渲染、逻辑处理和用户...

    WindowsMobile5.0三十几个经典手机软件开发源码WindowsMobile5.0

    5. 多媒体处理:Windows Media Player控件在Windows Mobile 5.0中得到增强,源码可能涉及音频和视频的播放、录制,以及图片处理。 6. 任务调度和多线程:源码可能会演示如何使用后台任务和多线程,提高程序的运行...

    Windows mobile 6.5常用软件

    在Windows Mobile 6.5操作系统中,用户可以找到一系列实用的软件来提升设备的使用体验。这个压缩包包含了几个常见的应用程序,旨在帮助用户更高效地管理和利用他们的Windows Mobile设备。 首先,"任务管理1.exe"和...

    pcm录制及播放

    开发者可以借此学习如何在Windows环境下处理音频流,了解PCM音频编码的基础知识,以及如何使用waveIn和waveOut函数进行音频输入输出操作。同时,项目还涉及到了GSM编码,这在移动通信或网络音频传输中是非常重要的。

    Windows Mobile 6.5 for iPAQ 114

    《Windows Mobile 6.5 for iPAQ 114:智能移动操作系统的经典之作》 Windows Mobile 6.5是微软为智能手机和平板电脑设计的一款操作系统,它在2009年发布,旨在提供一个集商务、娱乐和通信功能于一体的平台。这款...

    windows mobile 软件my mobile

    《Windows Mobile平台上的My Mobile软件详解》 在移动操作系统的历史中,Windows Mobile曾是一个重要的角色,为许多智能手机提供了操作系统支持。在这个系统上,有一款名为"My Mobile"的应用软件,它为用户提供了...

    Windows Mobile windows7设备中心下载

    众所周知,在windows7操作系统中已经不需要安装active sync 手机同步软件,那么我想在win7系统中手机同步pc机信息,该如何操作呢?清您下载windows mobile ...亲自操作,该方法适合于任何版本的windows mobile 手机系统.

    Windows Mobile开发实验

    ### Windows Mobile开发实验知识点 #### 实验一:使用ActiveSync连接Smartphone与PC机 **实验目的** 通过本次实验,学习如何使用ActiveSync在Smartphone与PC之间建立连接。 **预备知识** - 了解Windows Mobile...

    Windows Mobile 经典源码

    《深入探索Windows Mobile经典源码》 Windows Mobile是一款由微软公司开发的移动操作系统,它曾经在智能手机领域占据重要地位,为开发者提供了丰富的平台来构建移动应用程序。本资料集中的"WindowsMobile5 金典源码...

    windows mobile6.1主题

    压缩包内的“主题”文件很可能包含了所有必要的资源文件,如图像、音频和配置文件,用于应用到Windows Mobile 6.1设备上。为了使用这些主题,用户通常需要解压缩文件,然后通过设备上的主题管理软件或系统设置来安装...

Global site tag (gtag.js) - Google Analytics