C++实现的音频播放器(可以读取目录)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IMediaControl*pMControl;
IMediaPosition*pMPos;
//////////////////////////////////////////////////////////////////////////
HRESULT InitDirectShow()
{
HRESULT hr;
V_RETURN(pMControl->Stop()); //停止播放
//V_RETURN(pMControl->Pause()); //暂停播放
return S_OK;
}
void FreeDirectShow()
{
//释放对象
SAFE_RELEASE(pMControl);
if (pMControl) pMControl->Release();
#define V_RETURN(x) { hr = x; if( FAILED(hr) ) { return hr; } }
//////////////////////////////////////////////////////////////////////////
//变量定义:
IGraphBuilder*pGBuilder;
}
V_RETURN(pGBuilder->QueryInterface(IID_IMediaPosition, (void**)&pMPos));
return S_OK;
}
HRESULT LoadMusicFile( char *path)
{
HRESULT hr;
WCHAR wstrSoundPath[MAX_PATH]; //存储UNICODE形式的路径
}
char buffer[100];
vector<PlayList> vec; //使用列表将mp3文件列表载入
fstream f;
f.open("D:/PlayList.txt",ios::in);
while(!f.eof()){
f>>buffer;
PlayList file;
file.str = buffer;
printf("\n请输入命令:");
scanf("%s", cmd);
if(!stricmp(cmd, "p"))
{
printf("(注意:文件名后面要有相应文件类型后缀)\n");
printf("请输入文件名:");
scanf("%s", path);
printf("正在处理命令...\n", cmd, path);
{
HRESULT hr;
//播放MP3的方法十分简单:
//V_RETURN(pMPos->put_CurrentPosition(0)); //移动到文件头
V_RETURN(pMControl->Run()); //播放
return S_OK;
}
HRESULT Stop()
{
HRESULT hr;
//最后,我们要停止播放音乐并释放各个对象:
using namespace std;
#pragma comment( lib, "Strmiids.lib")
#pragma comment( lib, "winmm.lib" )
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } }
{
char cmd[255] = {NULL}, path[MAX_PATH] = {NULL};
struct PlayList
{
string str;
};
if(FAILED(InitDirectShow()))
{
printf("初始化DirectShow失败!\n");
getch();
return 1;
if(FAILED(LoadMusicFile(path)))
{
printf("载入文件“%s”失败!\n", path);
getch();
path[0] = 0;
}
else Play();
}
else
{
printf("正在处理命令...\n", cmd, path);
if(!stricmp(cmd, "r"))
CoInitialize(NULL); //初始化COM
//创建各个对象
CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC, IID_IGraphBuilder, (void**)&pGBuilder);
V_RETURN(pGBuilder->QueryInterface(IID_IMediaControl, (void**)&pMControl));
vec.push_back(file);
cout<<file.str<<endl;
}
f.close();
while(1)
{
printf("\n使用方法--输入以下命令:\n#载入并播放音乐:p\n#停止播放:s\n#播放:r\n");
printf("#退出:e\n");
if(path[0])printf("\n已经载入的文件:%s\n", path);
MultiByteToWideChar(CP_ACP, 0, path, -1,wstrSoundPath, MAX_PATH);
V_RETURN(pGBuilder->RenderFile(wstrSoundPath, NULL)); //调入文件
return S_OK;
}
HRESULT Play()
{
Stop();
来自百度文库Play();
}
else if(!stricmp(cmd, "s"))
Stop();
else if(!stricmp(cmd, "e"))
goto quit;
else
{
printf("无法识别的命令");
getch();
}
}
}
quit:
FreeDirectShow();
return 0;
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <conio.h>
#include <dshow.h>
#include<vector>
#include<iostream>
#include<fstream>
SAFE_RELEASE(pMPos);
SAFE_RELEASE(pGBuilder);
CoUninitialize(); //释放COM
}
//////////////////////////////////////////////////////////////////////////
int main()
相关文档
最新文档