赞
踩
本文会尽量让和笔者一样只有一点点可怜的c语言基础的小白看懂,并写出自己的音乐播放器。
笔者使用的编译器是Visual Studio 2019,直接在官网下载就行了。下面是Visual Studio 2019比较详细的下载、安装、配置、使用的教程,熟悉使用的朋友可以直接跳过。
笔者选择的是Community 2019,即社区版。关于下载位置,可以存c盘也可以改存其他位置,在下才疏学浅,不知道有什么区别。
至于下载的工具负荷,这里有两张截图大家可以参考一下
勾选这些选项应该是足够了,可以根据自身需求来勾选其他选项
然后便是新建项目(想了一下还是手把手教吧,别嫌啰嗦,因为第一次用的话确实不会。大佬些可以直接跳过,看后面的mciSendString函数功能及用法)
打开visual studio 2019, 点击创建新项目如下图:
然后选择创建空项目,点击下一步,如下图所示:
项目名称随便起没有任何影响,文件储存位置嫌麻烦就用默认的就行,点击创建,如下图所示:
在界面右侧右键点击源文件=>添加=>新建项,左键点击新建项,如下图所示:
选择c++文件,将名称的后缀改为.c(其实.cpp也行,不过既然是用c语言编写嘛,就用.c),前面名称也是根据需要来取,点击添加,如下图所示:
然后便可以愉快的码代码啦!
但是大家在运行程序时还会出现这样那样的问题,所以需要在项目属性中调一下配置,按照下面的方法配置就好:
好了,准备工作已经全部就绪,接下来正式介绍mciSendString函数,mciSendString函数需要的头文件有:
#include<stdio.h>
#include<Mmsystem.h>
#include<Windows.h>
mciSendString的常用命令有:
命令
解释
open
打开设备
close
关闭设备
play
播放设备
stop
停止播放设备
record
开始记录
save
保存设备内容
pause
暂停设备的播放或记录
resume
恢复暂停播放或记录的设备
seek
改变媒体播放的位置(指时刻)
capacility
查询设备能力
info
查询设备信息
status
查询设备状态信息
这里介绍如何实现开始、暂停/继续、停止、调节音量、快进快退和进度条显示的功能。
1、播放功能
我们先将命名为01.mp3的音乐存入所在项目的文件夹(这应该是我唯一没有展示详细步骤的操作)。然后尝试使用相对路径打开音乐,使用语句:
mciSendString(“open 01.mp3”, NULL, 0, NULL);
然后再播放音乐,使用语句:
mciSendString(“play 01.mp3”, NULL, 0, NULL);
完整代码为:
#include<stdio.h>
#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
int main() {
mciSendString("open 01.mp3", NULL, 0, NULL);
mciSendString("play 01.mp3", NULL, 0, NULL);
getchar();
return (0);
}
说明:
(1)其中gerchar()是为了让程序不要直接退出,这里可以使用scanf达到一样的效果。
(2)#pragma comment(lib,“winmm.lib”)可加可不加,因为我们之前已经在链接器中添加了附加项winmm.lib。
先将mp3文件放在所在项目的文件夹,上述方法通过相对路径打开并播放音乐,我们也可以使用绝对路径,即音乐存放在电脑中的位置来打开音乐,比如我们将01.mp3文件放在C:UsersHPMusic中,则可以通过以下语句打开音乐:
mciSendString(“open C:\Users\HP\Music\01.mp3”, NULL, 0, NULL);
通过以下语句播放音乐:
mciSendString(“play C:\Users\HP\Music\01.mp3”, NULL, 0, NULL);
完整的代码为:
#include<stdio.h>
#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
int main() {
mciSendString("open C:\Users\HP\Music\01.mp3", NULL, 0, NULL);
mciSendString("play C:\Users\HP\Music\01.mp3", NULL, 0, NULL);
getchar();
return (0);
}
在音乐播放器的项目中,播放功能可以写成一个函数,让主函数来调用。我们首先将歌曲存入一个文件夹,比如存放在C:UsersHPMusic中,这个文件夹中有很多首歌,如01.mp3、02.mp3、03.mp3等等,那么怎么让用户选择歌曲来播放呢?提供一下思路:
(1)创建一个储存歌单信息的链表(链表储存歌曲的序号和名称),然后传入储存歌单信息的链表的头指针。
(2)使用一个char型数组存储"open “、一个char型数组存储"C:\Users\HP\Music\”,通过传入的指针得到歌曲名称
(3)使用strcat、strcpy、sprintf等函数(需要引用头文件#include<stdlib.h>)将这些字符串拼接起来。
播放函数的代码如下(只展示了播放功能)所示:
char filepath[100] = "C:\Users\HP\Music\";//储存MP3文件的目录,用于向mciSendString函数传递指令
void play(struct media* p0)
{
char cmd[100];
char file[100] = "open ";
char play[100] = "play ";
sprintf(cmd, "%s%s", filepath, p0->name);
printf("%s", cmd);
strcat(file, cmd);
strcat(play, cmd);
mciSendString(file, NULL, 0, NULL);
mciSendString(play, NULL, 0, NULL);
}
2、暂停/继续功能
思路是先播放、按键后暂停、按键后再播放。我们先使用相对路径实现该功能。
暂停播放的语句为:
mciSendString(“pause 01.mp3”, NULL, 0, NULL);
那么完整的代码就来了:
#include<stdio.h> #include <Windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.lib") int main() { int a; mciSendString("open 01.mp3", NULL, 0, NULL); mciSendString("play 01.mp3", NULL, 0, NULL); scanf("%d", &a); mciSendString("pause 01.mp3", NULL, 0, NULL); scanf("%d", &a); mciSendString("resume 01.mp3", NULL, 0, NULL); //这里也可以使用play scanf("%d", &a); return (0); }
至于,如何用绝对路径打开,如何写成函数,上面已经提供了思路,便不再赘述。
3、停止播放
不想啰嗦,懂的都懂。
mciSendString(“stop01.mp3”, NULL, 0, NULL);
4、调节音量
调节音量我们要用到两次mciSendString函数,先读取媒体的音量(第一次用到mciSendString),我们把获取的音量增加或减少,再把增加或减少后的音量赋值给媒体(第二次用到mciSendString)。
(1)读取音量的语句:
char res[260];
mciSendString(“status 01.mp3 volume”, res, 260, NULL);
定义一个长度为260的char型数组(为什么是260呢,我也不知道,用就是了),读取音量的语句就会把媒体音量以字符串的形式读取到res中,中间的参数表示res的长度。
(2)将res中表示音量的字符串转化为数字再进行加减(引入头文件#include<stdlib.h>)
int volume = 0;
volume = atoi(res); // 转化语句
volume += 200; // 音量加200,也可以设定减少
(3)将整形的音量再转化为字符串存入数组(引入头文件#include<stdlib.h>)
char vo[20];
itoa(volume, vo, 10); //转化语句
(4)将vo中的音量设定为媒体音量
这里出现了一个问题,先展示一下设定音量的语句(设为800):
mciSendString(“setaudio01.mp3 volume to 800”, NULL, 0, NULL);
我们不能这样写:
mciSendString(“setaudio01.mp3 volume to vo”, NULL, 0, NULL);
因为在双引号里面vo是字符串而不是变量,那么如何解决这个问题呢?
charfile1[100] = "setaudio01.mp3 volume to "; // to后面一定要有空格,不然会报错
strcat(file1,vo); // 将vo接在file1后面
mciSendString(file1, NULL, 0, NULL); // 设定成功
完整代码如下所示:
char vo[20];
char res[260];
char file1[100] = "setaudio?01.mp3 volume to ";
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。