windows vc下播放音乐的方法包括wav,mp3格式

网上关于音频播放的资料都比较零碎,且思路不是很清晰,没有讲明用了什么技术。
    我查找过很多资料后总结了一下有以下几种方法:     
    1。自己解码然后播放。很原始也很难,我不会。
    2。vc里提供的一种简单的播放wav和midi格式的文件,只适合于较小的音乐片段。
 playSound接口和sndplaysound接口,其实两个差不多,但playsound接口可以使用导入到mfc工程的音频文件的资源号查找文件,在它的create函数里可以看到。我也不是很清楚它们的区别,据网上的一些人说playsound比较好,sndplayound相当于其子集。    http://www.360doc.com/content/10/1017/07/3550092_61649892.shtml
  一下的方法都支持mp3格式。
    3。控件,在vs2005有一个windows media player 的控件。这个很容易使用。
      http://blog.csdn.net/Utensil/archive/2007/12/26/1968709.aspx
   4。MCI多媒体控制接口。网上贴出来的大段代码封装好的CSound和Cmusic 类其实就是用这种技术。这个也不难,就是通过发命令的方式控制。
     http://www.pcppc.cn/kaifa/cc/kaifa_117865.html
     http://zhidao.baidu.com/question/169952083.html
    5。Directx。 这应该是最好的方案。因为微软做的游戏播放器都是用这个的,证明用它来开发肯定差不了,能实现比较高级的功能。不过这也是最难的。
        其中,DirectSound和DirectMusic可以播放wav文件。
        DirectShow可 以播放各种格式的音频和视频文件。
      http://blog.csdn.net/skilledprogrammer/archive/2010/09/10/5876602.aspx

   这些网址都是我看了觉得有用的,我也是根据这些总结出来的。我也有很多不知道的,请你们在下面补充。

  使用directx要安装sdk包的。
 下载DirectX 9 SDK开发包。这个现在还是比较难搞到的,可以到微软官网上去下载。自从DirectX 9.0c sdk后,DirectShow SDK不再包含在DirectX SDK中,而是以Extras的形式发布,后来集成了一部分SDK到Windows SDK中,也就是说后来的环境(比如vs2005、vs2008环境下)比较难配置,极有可能不稳定,产生这样那样的错误。初学者可能看到如此难搞的环境配置就望而却步了,不利于学习。所以还是在VC6.0或者VC++2003环境下配置DirectX 9.0 SDK。以下是几个包含DirectShow SDK的DirectX SDK的下载地址
①DirectX 9.0 SDK:
   http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/DirectX%209.0%20SDK
   ②DirectX 9.0b SDK:
   http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/DirectX%209.0b%20SDK
   ③DirectX 9 sum_2004(2004年夏天更新的版本):
        http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/DirectX%209.0%20SDK%5E_sum2004 

  还有一些安装方法我附在下面:

 
DirectShow使用   VS2005配置详细说明(附图)

整理参考wangguolai

http://blog.csdn.net/wangguolai/archive/2008/05/29/2493451.aspx

步骤一: 首先下载安装dx9sdk,我的安装目录为C:\DXSDK;

步骤二、编译dssdk例程中的baseclass;

(位置:C:\DXSDK\Samples\C++\DirectShow\BaseClasses),生成需要的debug和release文件

在vs2005中打开此文件,提示你进行必要的工程转换,转换之后开始编译,编译过程一般会出现下面几个问题:

(1)C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'

(2)error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

(3)error C2065: 'Count' : undeclared identifier

问题(1)的解决:

project->BaseClasses properties->configuration->C/C++ -> General->Additional Include Directories里面的内容(.,..\..\..\..\include)删掉,重新编译,PVOID64的错误消失;

  < xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

错误原因说明:

POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变include files的优先级即可。。当然,也可以改写winnt.h中的代码,将typedef void *PVOID;typedef void * POINTER_64 PVOID64;改成typedef void *PVOID;typedef void * POINTER_64;typedef void * PVOID64;

 

问题(2)的解决:

在工程选项中的c++/Command Line中添加/wd4430即可。

 

错误原因说明:

operator=(LONG);函数定义中,这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整形;但是vs2005不支持默认整形,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,

 

问题(3)的解决:

修改vs2005的工程选项:”Project Option” --– “ C++ ” —--  “Language” --- “Force Comformance in For Loop Scrope” 设置为No即可。 完成上面的设置,BaseClass工程基本可以编译通过了。

 

错误原因说明:

第三个错误发生在for循环中,vc6中for循环中定义的变量相当于在for外面定义,可以在for之外地方使用;但是vs2005for循环中定义变量相当于域{}变量,只能在for循环中使用。

 

步骤三:设置包含头文件和库文件;

编译baseclass时有四种方式(分别是Debug、Debug_Unicode、Release、Release_Unicode),会分别生成四个lib,一般只用到了其中的Debug和Release文件;

在tool|option|vc++ directories中包含的files中设置方法如下。

工具->选项。

需要添加的include files有四种:

D:\SDK\DXSDK\IncludeD:\SDK\DXSDK\Samples\C++\DirectShow\BaseClassesD:\SDK\DXSDK\Samples\C++\DirectShow\CommonD:\SDK\DXSDK\Samples\C++\Common\Include

C:\DXSDK\Include

C:\DXSDK\Samples\C++\DirectShow\BaseClasses

C:\DXSDK\Samples\C++\DirectShow\Common

C:\DXSDK\Samples\C++\Common\Include

在后边的library files中也需要增加三到四种的文件:

D:\SDK\DXSDK\Lib

D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug

D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Release

至此,DirectShow在vs2005环境中设置完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值