随园厚学分享 http://blog.sciencenet.cn/u/gothere 计算语言学博士 希望在这里留下学术的足迹

博文

资料:VC播放mp3

已有 9113 次阅读 2008-10-16 22:47 |个人分类:Programming

播放MP3音乐  
 
  MIDI音乐的问题是对声卡的依赖性过大,好声卡和差声卡的播放效果实在相差太远。WAV音乐虽然绝对足够精确,但占用的空间之大不可小视。MP3恐怕是一个较好的解决方案。值得注意的是,播放MP3并不需要DirectX   Audio,需要的是DirectShow。所以,我们要#include   <dshow.h>,并在工程中加入strmiids.lib。  
 
   
 
  调入MP3文件  
 
  下面把初始化DirectShow和调入MP3合起来说说吧。首先,我们要定义三个对象,其中IGraphBuilder*类型的可以认为是媒体播放设备,IMediaControl*类型的变量负责媒体的播放控制,而IMediaPosition*类型的变量负责媒体的播放位置设定。  
 
   
 
  IGraphBuilder*   pGBuilder;  
 
  IMediaControl*   pMControl;  
 
  IMediaPosition*   pMPos;  
 
  CoInitialize(NULL);   //初始化COM  
 
  //创建各个对象  
 
  CoCreateInstance(CLSID_FilterGraph,   NULL,  
 
  CLSCTX_INPROC,   IID_IGraphBuilder,   (void**)&pGBuilder);  
 
  pGBuilder->QueryInterface(IID_IMediaControl,   (void**)&pMControl);  
 
  pGBuilder->QueryInterface(IID_IMediaPosition,   (void**)&pMPos);  
 
   
 
  CHAR   strSoundPath[MAX_PATH];   //存储音乐所在路径  
 
  WCHAR   wstrSoundPath[MAX_PATH];   //存储UNICODE形式的路径  
 
  GetCurrentDirectory(MAX_PATH,   strSoundPath);  
 
  strcat(strSoundPath,   "\Sounds\");  
 
  strcat(strSoundPath,   "a.mp3");   //假设要播放的是Sounds子目录下的a.mp3  
 
  MultiByteToWideChar(CP_ACP,   0,   strSoundPath,   -1,wstrSoundPath,   MAX_PATH);  
 
  pGBuilder->RenderFile(wstrSoundPath,   NULL);   //调入文件  
 
   
 
  播放MP3文件  
 
  播放MP3的方法十分简单:  
 
  pMPos->put_CurrentPosition(0);   //移动到文件头  
 
  pMControl->Run();   //播放  
 
   
 
  停止播放和释放对象  
 
  最后,我们要停止播放音乐并释放各个对象:  
 
  pMControl->Stop();   //停止播放  
 
  //释放对象  
 
  SAFE_RELEASE(pMControl);  
 
  SAFE_RELEASE(pMPos);  
 
  SAFE_RELEASE(pGBuilder);  
 
  CoUninitialize();   //释放COM  
 
   
 
   
 
  不会很难  
 
  MAY   YOU   SUCCEED!  


https://blog.sciencenet.cn/blog-39714-42963.html

上一篇:CFP:LEXICOM-AMERICAS 2009
下一篇:CFP: Automatic Analysis of Learner Language (AALL'09)
收藏 IP: .*| 热度|

0

发表评论 评论 (2 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-23 18:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部