VC播放mp3的方法
1、使用msi库
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib") ....... //打开文件
MCI_OPEN_PARMS mciOpen;
mciOpen.lpstrDeviceType = _T("mpegvideo");
mciOpen.lpstrElementName = _T("c://1.mp3");
MCIERROR mciError = mciSendCommand(, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
if(mciError)
{
TCHAR buf[]={};
mciGetErrorString(mciError, buf, );
printf("%s/n",buf);
} //播放(异步)
UINT DeviceID = mciOpen.wDeviceID ;
MCI_PLAY_PARMS mciPlay;
mciError = mciSendCommand(DeviceID, MCI_PLAY, , (DWORD)&mciPlay);
if(mciError)
{
printf("send MCI_PLAY command failed/n");
} //暂停
//mciSendCommand(DeviceID, MCI_PAUSE, 0 , (DWORD)&mciPlay); //停止
mciSendCommand(DeviceID, MCI_STOP, NULL , NULL);
mciSendCommand(DeviceID, MCI_SEEK, MCI_SEEK_TO_START , NULL); //关闭
//mciSendCommand(DeviceID, MCI_CLOSE, 0 , (DWORD)&mciPlay); //获得播放进度,仅为示例代码
//MCI_STATUS_PARMS mciStatusParms;
//mciStatusParms.dwItem=MCI_STATUS_POSITION;
//mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得位置
//int m_dPosition=mciStatusParms.dwReturn; //获得整个音频的时间长度,仅为示例代码
//UINT DeviceID = mciOpen.wDeviceID ;
//mciStatusParms.dwItem=MCI_STATUS_LENGTH;
//mciSendCommand(DeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得长度
// m_dLength=mciStatusParms.dwReturn; //在指定位置播放,仅为示例代码
//MCI_PLAY_PARMS mciPlay;
//mciPlay.dwFrom=m_dPosition;
//mciError = mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_FROM,(DWORD)&mciPlay); //控制音量,仅为示例代码
//MCI_DGV_SETAUDIO_PARMS mciSetAudioPara;
//mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME;
//mciSetAudioPara.dwValue = atoi(m_Volume.GetBuffer(m_Volume.GetLength()));//here is the value of the Volume(0--1000)
//mciSendCommand(m_wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD)(LPVOID)&mciSetAudioPara);
2、使用vfw库
#include <vfw.h>
#pragma comment(lib,"vfw32.lib") ....... //打开文件
CString filename = _T("c://1.mp3");
HWND hwnd = MCIWndCreate(m_hWnd,NULL,MCIWNDF_NOPLAYBAR,filename);
::ShowWindow(hwnd,SW_HIDE); //设置音量
MCIWndSetVolume(hwnd,); //播放(异步)
MCIWndPlay(hwnd); //关闭
//MCIWndClose(hwnd);
3、使用DirectShow
#include <dshow.h>
#pragma comment(lib,"strmiids.lib") ....... IGraphBuilder* pGBuilder;
IMediaControl* pMControl;
IMediaPosition* pMPos;
IMediaEvent* pMEvent; CoInitialize(NULL); //初始化COM
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder,(void**)&pGBuilder);
pGBuilder->QueryInterface(IID_IMediaControl,(void**)&pMControl);
pGBuilder->QueryInterface(IID_IMediaEvent,(void**)&pMEvent);
pGBuilder->QueryInterface(IID_IMediaPosition,(void**)&pMPos); pGBuilder->RenderFile(L"C://1.mp3", NULL); //调入文件 //播放MP3文件
pMPos->put_CurrentPosition(); //移动到文件头
pMControl->Run(); //播放(异步) // 停止播放和释放对象
/*pMControl->Stop(); //停止播放
pMControl->Release();
pMControl=NULL;
pMEvent->Release();
pMEvent=NULL;
pMPos->Release();
pMPos=NULL;
pGBuilder->Release();
pGBuilder=NULL;
CoUninitialize(); //释放COM */
VC播放mp3的方法的更多相关文章
- vc中播放mp3文件的方法小结
一般播放MP3常见的有两种方法,一种是自己解码,另外一种用系统的库,比如MCI,当然如果可以用控件直接用个控件会更方便. 1. 使用mci #include <windows.h> ...
- VC用MCI播放mp3等音乐文件
VC播放mp3等音乐文件,可以使用MCI.MCI ( Media Control Interface ) ,即媒体控制接口,向基于Windows操作系统的应用程序提供了高层次的控制媒体设备接口的能力. ...
- 读取SD卡文件夹下的MP3文件和播放MP3文件
首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public Lis ...
- ios开发——实用技术篇Swift篇&播放MP3
播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...
- Android开发手记(14) 使用MediaPlayer播放mp3
1.获取MediaPlayer实例 (1)可以直接通过new或者create方式: 调用setDataSource和create的区别是,create时已经执行了MediaPlayer.prepare ...
- ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题
1.ubuntu 13.10 Rhythmbox不能播放mp3的解决方法 软件中心搜索(ubuntu额外的版权受限软件)不带括号 2.中文乱码问题解决方法: 终端顺序操作 : 1. sudo ged ...
- IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断
本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...
- CEF3 HTML5 audio标签为什么不能播放mp3格式的音频文件
CEF3 HTML5 audio标签 为什么不能播放mp3格式的音频文件 原因略. 解决方法: 找一个最新版的chrome ,我用的是24版本.路径 C:\Documents and Sett ...
- 播放MP3
播放背景音乐 上文来自:http://blog.csdn.net/henulwj/article/details/8977738 using System; using System.Collecti ...
随机推荐
- 截图原理(一)——Android自动化测试学习历程
把两节的内容汇总起来,第一节讲的是如何在apk中直接进行截屏,用到了Robotium的Solo类的takeScreenShot方法,有一个小的demo,以及从方法一直往里钻,知道它具体是怎么进行截屏的 ...
- FortiGate恢复出厂
1.需求 当需要把设备的所有配置删除,可进行恢复出厂操作.恢复出厂后所有配置都将丢失,若一定要恢复出厂设置建议前先备份当前的配置:备份配置操作步骤请参见"系统管理">> ...
- 关于django的操作(四)
1,关于form组件的写法 定义错误信息使用error_messages,自定义字段名称用lebal,自定义样式需要使用widget,比方说这个是一个什么样子的输入框,attr用于输入输入框的属性等 ...
- js replaceAll全部替换
js不支持replaceAll,可以用函数new RegExp('要替换的内容','g')代替, 代码: str.replace(new RegExp('要替换的内容','g'),"替换内容 ...
- 44-java断点调式dubug
转自:https://www.cnblogs.com/mq0036/p/3780538.html Eclipse 的单步调试 1.设置断点在程序里面放置一个断点,也就是双击需要放置断点的程序左边的栏目 ...
- javascript第一天知识点
JS的数据类型: 数字 number 字符串 string 布尔 boolean 空值 null 未定义的 undefined 数组 Array 对象 Object 通过typeof() 可以查看对 ...
- Json中不支持任何形式的注释,那我们要怎么解决呢
Json中不支持任何形式的注释,我们可以使用曲线救国的思路:在对象的定义中添加一个key(comment),其对应的value值就是注释填写的语句. 如: { "name":&qu ...
- python 基础数据类型 之 列表
列表:定义 和特性 列表定义和创建: 定义:[,]内以逗号分隔,按照索引,存放各种数据类型,一般没有限制,每个位置代表一个元素 range_create = list(range(0, 10))pri ...
- 8I - 吃糖果
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可是Gardon不知道是否存在一种吃 ...
- Liunx touch
http://blog.csdn.net/tanga842428/article/category/6355419 linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时 ...