win mobile 5播放mp3音乐的方法(4)--5mbox封装类的代码

前几篇说到在win mobile 5上面播放mp3音频需要了解的基本知识。
在这里我再总结一下:


首先是移植libmad,mp3文件解码器这是必不可少的第一步;

然后是使用libmad把mp3文件解码成为pcm码流,也就是wav文件
(其实还是有一些区别的,wav文件是有wav头的pcm码流)。

最后就是利用pcm码流的播放api实现最终的播放目的,在这当中,
需要善于利用缓冲队列。
 
如果能够把这么多东西封装成一个方便使用的类就好了,我在开发
5mbox的过程中也是这么想的,所以就按照上一篇所讲的原理编写了
一个类专门用于封装解码线程和pcm码流播放线程的。不知道为什么,
虽然在真机上的效果已经可以让人满意了,但是在模拟器上播放mp3
的时候,总是听上去稍微有一点点一顿一顿的感觉。如果哪位大侠
从下面的代码中发现了修正这个问题的方法,还请不吝赐教!
 
使用方法如下:
(1)新建win mobile 5.0 ppc工程(我在这里创建的是WM5Mp3Demo工程),
然后把mp3core这个目录整个拷贝到系统自动创建的目录下面。
 
(2)在"Solution Explore"里面,右键单击"WM5Mp3Demo",在弹出菜单
中选择"Add"->"New filter",创建一个目录,取名叫"mp3core",然后
再用类似的方法在mp3core上面再创建目录,然后在每个目录上单击右键
选择"Add"->"Existing item...",把对应的目录下的所有源文件都选上。
这样就可以完成mp3core目录下的源文件添加到你的新建项目的操作。
如下图所示:
 
(3)可以根据需要选择debug模式或者release模式,然后选择"Project"->
"WM5Mp3Demo Properties",然后如图所示,设置附加包含路径:
 
(4)然后设置编译器不采用预编译头文件,如下图所示:
 
(5)好了,然后就是添加代码了,要使用mp3core的封装,必须加入:
#include "M5Mp3Play.h"
然后声明一个全局的变量,如:g_mp3play之类的:
// Global Variables:
HINSTANCE   g_hInst;   // current instance
HWND    g_hWndMenuBar;  // menu bar handle
CM5Mp3Play   g_mp3_play ;  // mp3 player
我用的是win32 api风格的ppc开发,如果用到mfc之类的库的朋友,也可以
不声明成全局的变量,这里只是为了清晰、简单。
然后找到可以调用的入口,比如button的OnClick处理啦,键盘的事件啦之类的
地方,加入下面的调用代码即可。我这里是用WndProc里面的键盘事件:
case WM_KEYDOWN:
// Handle any non-accelerated key commands
 switch (wParam) {
  case VK_ACTION:
  case VK_RETURN:
   {
    // 这里是定义了退出
    PostMessage(hWnd, WM_CLOSE, 0, 0);
    return 0L;
   }
  case VK_UP:
   {
    // 按上方向键停止播放
    g_mp3_play.Stop() ;
   }
   break ;
  case VK_DOWN:
   {
    // 按下方向键开始播放,注意这里用的是绝对路径
    // 需要把test.mp3拷贝到手机内存的相应位置下面才能够播放,
    // 这一点一定要注意。这里的第一个参数是mp3文件的路径,
    // 第二个参数是是否循环播放,如果是true则循环播放,播放
    // 完毕后会自动从头开始重新播放;如果是false则播放一遍后
    // 停止播放。
    g_mp3_play.Init("/Program Files/WM5Mp3Demo/test.mp3", true) ;
    g_mp3_play.Play() ;
   }
   break ;
  }
  break;
好了,至此win mobile 5.0下面播放mp3文件的方法就全部介绍完毕了。
上述整个demo的源代码可以自由下载,希望下载的朋友能够多多提出改进的意见,谢谢。
 
文件: WM5Mp3Demo.rar
大小: 179KB
下载: 下载

你可能感兴趣的:(properties,api,mobile,mfc,音乐,variables)