如何快進和快退音樂?這也是音樂播放器中常用的一個功能,mciSendString也為我們提供好了,與上一節(jié)調(diào)整音量類似,他也需要三個步驟:
獲取當前播放進度
增加和減少進度
定位新的播放進度,并播放
第一步,使用status獲取,如下代碼:
char a[100]; mciSendString("status dotcpp.mp3 position", a, 100, NULL);
它的進度信息保存在數(shù)組a里,接下來我們要進行字符串到數(shù)字的轉(zhuǎn)化
第二步,增加或減少進度,依舊需要先調(diào)用atoi命令轉(zhuǎn)換為數(shù)字,增加或減少后,在用sprintf轉(zhuǎn)換成字符串才可以
第三步,通過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);//從最后位置開始播放
那么,思路疏通之后,我們寫一個可以連續(xù)控制進度的音樂播放程序代碼就有了:
#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; }
運行視覺效果如下(聽覺效果建議上機體驗):
依舊是老方式,寫個大循環(huán),接收輸入信息,通過判斷a和d來決定后退還是前進,每次1000毫秒,為了便于學(xué)習(xí)和觀察,我們每次打印了當前播放的進度信息,大家理解之后務(wù)必親自上機實驗。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程