如何快进和快退音乐?这也是音乐播放器中常用的一个功能,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毫秒,为了便于学习和观察,我们每次打印了当前播放的进度信息,大家理解之后务必亲自上机实验。
本文固定URL:https://www.dotcpp.com/course/1213