用C语言编写的MP3简易播放程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//////////////////////////////////////////////////////////////////////////
HRESULT InitDirectShow()
{
HRESULT hr;
CoInitialize(NULL); //初始化COM
//创建各个对象
}
quit:
FreeDirectShow();
return 0;
}
printf("请输入文件名:");
scanf("%s", path);
printf("正在处理命令...\n", cmd, path);
if(FAILED(LoadMusicFile(path)))
{
printf("载入文件“%s”失败!\n", path);
}
else if(!stricmp(cmd, "s"))
Stop();
else if(!stricmp(cmd, "e"))
goto quit;
else
{
printf("无法识别的命令");
getch();
}
}
//////////////////////////////////////////////////////////////////////////
//变量定义:
IGraphBuilder* pGBuilder;
IMediaControl* pMControl;
IMediaPosition* pMPos;
V_RETURN(pMControl->Run()); //播放
return S_OK;
}
HRESULT Stop()
{
HRESULT hr;
//最后,我们要停止播放音乐并释放各个对象:
V_RETURN(pMControl->Stop()); //停止播放
return S_OK;
if(path[0])printf("\n已经载入的文件:%s\n", path);
printf("\n请输入命令:");
scanf("%s", cmd);
if(!stricmp(cmd, "p"))
{
printf("(注意:文件名后面要有相应文件类型后缀,例如:说好的幸福呢.mp3)\n");
int main()
{
char cmd[255] = {NULL}, path[MAX_PATH] = {NULL};
if(FAILED(InitDirectShow()))
{
printf("初始化DirectShow失败!\n");
getch();
return 1;
WCHAR wstrSoundPath[MAX_PATH]; //存储UNICODE形式的路径
strcpy(strSoundPath, path);
MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1,wstrSoundPath, MAX_PATH);
V_RETURN(pGBuilder->QueryInterface(IID_IMediaPosition, (void**)&pMPos));
return S_OK;
}
HRESULT LoadMusicFile( char *path)
{
HRESULT hr;
CHAR strSoundPath[MAX_PATH]; //存储音乐所在路径
V_RETURN(pGBuilder->RenderFile(wstrSoundPath, NULL)); //调入文件
return S_OK;
}
HRESULT Play()
{
HRESULT hr;
//播放MP3的方法十分简单:
V_RETURN(pMPos->put_CurrentPosition(0)); //移动到文件头
getch();
path[0ቤተ መጻሕፍቲ ባይዱ = 0;
}
else Play();
}
else
{
printf("正在处理命令...\n", cmd, path);
if(!stricmp(cmd, "r"))
{
Stop();
Play();
}
void FreeDirectShow()
{
//释放对象
SAFE_RELEASE(pMControl);
SAFE_RELEASE(pMPos);
SAFE_RELEASE(pGBuilder);
CoUninitialize(); //释放COM
}
//////////////////////////////////////////////////////////////////////////
#pragma comment( lib, "winmm.lib" )
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } }
#define V_RETURN(x) { hr = x; if( FAILED(hr) ) { return hr; } }
CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC, IID_IGraphBuilder, (void**)&pGBuilder);
V_RETURN(pGBuilder->QueryInterface(IID_IMediaControl, (void**)&pMControl));
}
while(1)
{
system("cls");
printf("程序修改者:李雷阳\n");
printf("使用方法--输入以下命令:\n#载入并播放音乐: p\n#停止播放: s\n#播放: r\n");
printf("#退出: e\n");
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dshow.h>
#pragma comment( lib, "Strmiids.lib")