如何快进和快退音乐?这也是音乐播放器中常用的一个功能,mciSendString也为我们提供好了,与上一节调整音量类似,他也需要三个步骤:

  1. 获取当前播放进度

  2. 增加和减少进度

  3. 定位新的播放进度,并播放


第一步,使用status获取,如下代码:

char a[100];
mciSendString("status dotcpp.mp3 position", a, 100, NULL);

它的进度信息保存在数组a里,接下来我们要进行字符串到数字的转化


第二步,增加或减少进度,依旧需要先调用atoi命令转换为数字,增加或减少后,在用sprintf转换成字符串才可以


第三步,通过seek命令来重新定位音乐的播放进度,如定位到8秒位置播放,则代码为:

mciSendString("seek dotcpp.mp3 to 8*1000", 0, 0, 0);  //单位为毫秒

另外,如果想直接定位到头和尾,也可以这么写:

mciSendString("seek dotcpp.mp3 to start", 0, 0, 0);//从开头开始播放
mciSendString("seek dotcpp.mp3 to end", 0, 0, 0);//从最后位置开始播放


那么,思路疏通之后,我们写一个可以连续控制进度的音乐播放程序代码就有了:

#include <windows.h>
#pragma comment (lib,"winmm.lib")
int main()
{
	int num;
	char ch;
	char a[100];
	mciSendString("open dotcpp.mp3",NULL,0,NULL);
	mciSendString("play dotcpp.mp3",NULL,0,NULL);


	while(1)
	{
		ch=getch();
		mciSendString("status dotcpp.mp3 position", a, 100, NULL);
		num=atoi(a);
		printf("position: %d\n",num);
		if(ch=='a')
		{
			num=num-1000;
			sprintf(a,"seek dotcpp.mp3 to %d",num);
			mciSendString(a, 0, 0, 0);
			mciSendString("play dotcpp.mp3",NULL,0,NULL);
		}
		else if(ch=='d')
		{
			num=num+1000;
			sprintf(a,"seek dotcpp.mp3 to %d",num);
			mciSendString(a, 0, 0, 0);
			mciSendString("play dotcpp.mp3",NULL,0,NULL);
		}
		else
		{			
		}
	
	}
	getchar();
	mciSendString("close dotcpp.mp3",NULL,0,NULL);
	return 0;
}


运行视觉效果如下(听觉效果建议上机体验):

MCI控制音乐前进后退

依旧是老方式,写个大循环,接收输入信息,通过判断a和d来决定后退还是前进,每次1000毫秒,为了便于学习和观察,我们每次打印了当前播放的进度信息,大家理解之后务必亲自上机实验。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)