最近研究在windows Mobile 6下的音频(主要是wav,mp3,wma,ogg等)使用,前提是安装了windows Mobile 6的SDK和模拟器,然后熟悉vs2008下进行wince下的开发。首先查找wince自带的系统库能不能处理音频,发现了低层的波形函数waveform函数,肯定是播放未压缩的音频数据的,可以播放wav格式的音频(具体没试验),可以参考SDK自带的例子。然后我们想到了DirectX,播放音频视频时使用DirectShow,在基本的SDK中就可使用。好吧,试验一下,结果发现打开wav格式文件正常播放,打开mp3文件没有声音,调试跟踪发现渲染文件失败,应该是没有mp3的Filter。至此,我对wince自带系统库播放mp3不报什么信心了(WinXp系统至少还有个MCI接口可用),考虑第三方库吧。
通过Google和百度我们了解到两个著名的mpeg开源库libmad和mpg123,大部分的音乐播放器都多少看到他们的影子,还有个可能商业化的游戏软件(如魔兽争霸)常用的引擎FMod。libmad是一个mpeg音频解码库,目前支持MPEG1,MPEG2,MPEG2.5格式,目前音频三层(layerⅠ,layerⅡ,layerⅢ)都能执行,不支持MPEG2多声道音频,也不支持AAC格式。它遵循GPL协议,完全使用整点(Integer)计算, 提供24bit的PCM输出,产生高质量的音频。libmad是一个mp3解码库,如果要播放MP3,可以下载madplay,官方网站为http://www.underbit.com/products/mad/或者官方网站列了很多使用mad的开源库其实就是先解码然后用底层函数放出来,windows平台的有个libwmp3库封装成了类或仍使用C接口,使用很方便。好了,回到正题,如果要将libmad用在wince上,要进行移植,呵呵。
另一个强大的mpeg库就是mpg123了,它是一个linux平台上的项目,支持MPEG1,MPEG2,MPEG2.5格式,遵循LGPL协议,采用浮点或整点运算,可以从他的官方网站http://mpg123.org
或sourceforge上http://sourceforge.net/projects/mpg123获得源码,也有windows平台上的编译好的库,也可以下载源码自己编译,解压后有个ports/MSVC++文件夹,选择编译器。源码提供了一个播放mp3的Console程序,该项目在多个平台如linux,windows,MacOs经过测试,还是没有Wince,无奈。。。。。
说说游戏音频引擎FMod吧。它也跨平台,什么Linux啊,win32啊,MacOS啊,都行,还有嵌入系统PS2, PSP, PS3, Xbox, Xbox 360,GameCube, Wii,提供了很多API,慢慢研究吧。