#include <stdio.h>
#include <Windows.h>
#include <string.h>
#include <conio.h> // 包含getch()声明的头文件
#include <stdlib.h>
#include <mmsystem.h> // mci库头文件
#pragma comment(lib, "winmm.lib") // 指定MCI库,mciSendString函数的定义在winmm.lib中
char name[20][50]={" "};
static int t=0;
int curno=1;// 指定当前曲目
int max=0;// 表明当前存储最大数目的歌曲
void find(char * lpPath)
{
char szFind[MAX_PATH],szFile[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
strcpy(szFind,lpPath);
strcat(szFind,"\\*.mp3");
hFind = FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"\\");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
printf("%s\n",FindFileData.cFileName);
max++;
strcpy(name[max],FindFileData.cFileName);
// FindFileData.cFileName是文件名
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
system("cls");
}
void play(const char *name) //播放音乐
{
char cmd[MAX_PATH] = {0};
char pathname[MAX_PATH] = {0};
sprintf(pathname, "C:\\music\\%s", name);
GetShortPathName(pathname, pathname, MAX_PATH);
sprintf(cmd, "open %s", pathname);
mciSendString(cmd, "", 0, NULL);
sprintf(cmd, "play %s", pathname);
mciSendString(cmd, "", 0, NULL);
}
void pause(const char *name) // 暂停播放
{
char cmd[MAX_PATH] = {0};
char pathname[MAX_PATH] = {0};
sprintf(pathname, "C:\\music\\%s", name);
GetShortPathName(pathname, pathname, MAX_PATH);
sprintf(cmd, "pause %s", pathname);
mciSendString(cmd,"",0,NULL);
}
void stop(const char *name)
{
char cmd[MAX_PATH] = {0};
char pathname[MAX_PATH] = {0};
sprintf(pathname, "C:\\music\\%s", name);
GetShortPathName(pathname, pathname, MAX_PATH);
sprintf(cmd, "stop %s", pathname);
mciSendString(cmd,"",0,NULL);
sprintf(cmd, "close %s", pathname);
mciSendString(cmd,"",0,NULL);
}
void VolumnUp(const char *name)
{
char path[MAX_PATH] = {0};
char cmd[MAX_PATH] = {0};
char res[MAX_PATH] = {0};
int volumn = 0;
// 加路径
sprintf(path, "C:\\music\\%s", name);
// GetShortPathName用来转换短名,要求被转换的歌名必须能在指定目录下找到文件,否则转换失败。
// 第一个参数:源文件名,第二个参数:目的文件名,第三个参数:目的数组长度。
GetShortPathName(path, path, MAX_PATH);
sprintf(cmd, "status %s volume", path);
mciSendString(cmd, res, MAX_PATH, NULL);
// 音量转换为整形,并作加法操作
volumn = atoi(res);
volumn += 100;
// 拼接设置音量命令
sprintf(cmd, "setaudio %s volume to %d", path, volumn);
// 发送设置音量命令
mciSendString(cmd, "", 0, NULL);
}
void VolumnDown(const char *name)
{
char path[MAX_PATH] = {0};
char cmd[MAX_PATH] = {0};
char res[MAX_PATH] = {0};
int volumn = 0;
// 加路径
sprintf(path, "C:\\music\\%s", name);
// GetShortPathName用来转换短名,要求被转换的歌名必须能在指定目录下找到文件,否则转换失败。
// 第一个参数:源文件名,第二个参数:目的文件名,第三个参数:目的数组长度。
GetShortPathName(path, path, MAX_PATH);
sprintf(cmd, "status %s volume", path);
mciSendString(cmd, res, MAX_PATH, NULL);
// res是个字符数组,不能实现减法操作,所以用atoi()转换为整形
volumn = atoi(res);
volumn -= 100;
// 将变更后的音量发送给MCI进行设定
sprintf(cmd, "setaudio %s volume to %d", path, volumn);
mciSendString(cmd, "", 0, NULL);
}
int VolumnShow(const char *name)
{
char path[MAX_PATH] = {0};
char cmd[MAX_PATH] = {0};
char res[MAX_PATH] = {0};
int volumn = 0;
// 加路径
sprintf(path, "C:\\music\\%s", name);
// GetShortPathName用来转换短名,要求被转换的歌名必须能在指定目录下找到文件,否则转换失败。
// 第一个参数:源文件名,第二个参数:目的文件名,第三个参数:目的数组长度。
GetShortPathName(path, path, MAX_PATH);
sprintf(cmd, "status %s volume", path);
mciSendString(cmd, res, MAX_PATH, NULL);
// res是个字符数组,不能实现减法操作,所以用atoi()转换为整形
volumn = atoi(res);
return volumn;
}
void volumn()
{
int f=1;
while(f)
{
printf("当前音量%d,请输入控制:\n",VolumnShow(name[curno]));
printf("1.提高音量\n");
printf("2.降低音量\n");
printf("0.返回上一页\n");
scanf("%d",&f);
switch(f)
{
case 1: VolumnUp(name[curno]);break;
case 2: VolumnDown(name[curno]);break;
default: printf("请重新输入\n");break;
}
system("cls");
}
}
void next()
{
if(curno!=max)
{
stop(name[curno]);
curno++;
t=1;
play(name[curno]);
}
else
{
stop(name[curno]);
curno=1;
t=1;
play(name[curno]);
}
}
void last()
{
if(curno!=1)
{
stop(name[curno]);
curno--;
t=1;
play(name[curno]);
}
else
{
stop(name[curno]);
curno=max;
t=1;
play(name[curno]);
}
}
void menu1()
{
int c = -1;
printf("1.播放/暂停\n");
printf("2.停止\n");
printf("3.上一曲\n");
printf("4.下一曲\n");
printf("0.返回上一级\n");
printf("请输入操作类型:\n");
scanf("%d", &c);
while (c != 0)
{
switch (c)
{
case 1:printf("1.播放/暂停\n");
if(t!=1) {play(name[curno]);t=1;}
else {pause(name[curno]);t=2;}
break;
case 2:printf("2.停止\n");stop(name[curno]),t=0; break;
case 3:printf("3.上一曲\n");last(); break;
case 4:printf("4.下一曲\n");next(); break;
default:printf("请重新输入\n");break;
}
system("cls");
printf("请输入操作类型:\n");
printf("1.播放/暂停\n");
printf("2.停止\n");
printf("3.上一曲\n");
printf("4.下一曲\n");
printf("0.返回上一级\n");
if(t==1)
{
printf("正在播放第%d首 %s\n",curno,name[curno]);
}
scanf("%d", &c);
}
}
void menu()
{
int n = 0,i;
for(i=0;;i++)
{
printf("1.播放控制\n");
printf("2.音量调节\n");
printf("0.退出\n");
printf("请输入操作类型:\n");
scanf("%d", &n);
system("cls");
switch (n)
{
case 1: menu1();break;
case 2:volumn(); break;
case 0: exit(0);
}
system("cls");
}
}
void main()
{
find("C:\\music");
menu();
}
评论0