如何快进和快退音乐?这也是音乐播放器中常用的一个功能,mciSendString也为我们提供好了,与上一节调整音量类似,他也需要三个步骤:
获取当前播放进度
增加和减少进度
定位新的播放进度,并播放
第一步,使用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; }
运行视觉效果如下(听觉效果建议上机体验):
依旧是老方式,写个大循环,接收输入信息,通过判断a和d来决定后退还是前进,每次1000毫秒,为了便于学习和观察,我们每次打印了当前播放的进度信息,大家理解之后务必亲自上机实验。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程