C語言使用mciSendString實現播放音樂功能
使用 mciSendString 播放音樂
mciSendString 支持 mp3、wma、wav、mid 等多種媒體格式,使用非常簡單。這里做一個簡單的范例,用 mciSendString 函數播放 MP3 格式的音樂,代碼如下:
// 編譯該范例前,請把 music.mp3 放在項目文件夾中 // 發(fā)布時,請把 music.mp3 和編譯的 exe 放在一起 // 編譯環(huán)境:VC6~VC2019 + EasyX_20210115 // #include <graphics.h> #include <conio.h> // 引用 Windows Multimedia API #pragma comment(lib, "Winmm.lib") int main() { initgraph(640, 480); // 打開音樂 mciSendString(_T("open music.mp3 alias mymusic"), NULL, 0, NULL); outtextxy(0, 0, _T("按任意鍵開始播放")); _getch(); // 播放音樂 mciSendString(_T("play mymusic"), NULL, 0, NULL); outtextxy(0, 0, _T("按任意鍵停止播放")); _getch(); // 停止播放并關閉音樂 mciSendString(_T("stop mymusic"), NULL, 0, NULL); mciSendString(_T("close mymusic"), NULL, 0, NULL); outtextxy(0, 0, _T("按任意鍵退出程序")); _getch(); closegraph(); return 0; }
簡單講解一下:
一定要引用 Winmm.lib 庫文件。這個范例中是通過 #pragma comment 命令引用的,也可以在項目屬性中設置,這里不作介紹。
mciSendString 函數的功能很強大,甚至可以播放視頻,不過這里就不多作介紹了,詳細請參見 MSDN。多數情況只需要用到第一個參數,將另外三個參數置為 NULL, 0, NULL 即可。
第一個參數是多媒體命令字符串,不區(qū)分大小寫。程序中,先要通過 open 命令打開 background.mp3,并用 alias 指定了別名為“mymusic”,這樣在之后的代碼中就可以方便的通過“mymusic”這個別名訪問該音樂了。當然,并不是必須要指定別名,每次通過文件名訪問也是可以的。
open 后面的 mp3 用絕對路徑或相對路徑都可以。
然后就是:play mymusic 開始播放,stop mymusic 停止播放,close mymusic 關閉文件。
如果需要同時播放多個音樂,請為不同的音樂指定不同的別名,然后分別操作即可。
不再需要播放的音樂,請記得用 close 命令關閉。
另外還有一個 PlaySound 函數也可以用來播放聲音,不過可惜不支持 mp3 / wma,這里就不多做介紹了。
一些有用的多媒體命令:
從頭播放 xxx:
"play xxx from 0"
循環(huán)播放 .mp3 文件(.wma 文件同樣可以):
"open xxx.mp3"
"play xxx.mp3 repeat"
循環(huán)播放 .wav 文件(.mid 文件同樣可以):
"open xxx.wav type MPEGVideo"
"play xxx.wav repeat"
關閉當前程序打開的所有多媒體文件:
"close all"
如果文件名中有空格,需要用雙引號引起來文件名(注意轉義):
mciSendString("open \"D:\\My Music\\俞麗拿 梁祝 化蝶.mp3\" alias mymusic", NULL, 0, NULL);
使用 mciSendCommand 播放音樂
mciSendCommand 與 mciSendString 的功能類似,只是控制方式略有區(qū)別。因此,對 mciSendCommand 不做過多介紹,只看一個使用例子吧。以下范例實現 mp3 的循環(huán)播放:
// 該范例演示使用 mciSendCommand 函數循環(huán)播放 mp3 // 編譯環(huán)境:VC2008~VC2019 + EasyX_20210115 // #include <graphics.h> #include <Digitalv.h> #include <conio.h> #pragma comment(lib, "winmm.lib") int main() { initgraph(640, 480); // 打開音樂文件 MCI_OPEN_PARMS mciOpenParms; mciOpenParms.lpstrDeviceType = L"sequencer"; mciOpenParms.lpstrElementName = L"R:\\Downloads\\test.mp3"; mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT, DWORD_PTR(&mciOpenParms)); // 打開指定媒體文件 UINT wDeviceID = mciOpenParms.wDeviceID; // 返回的 Device ID 需要保存下來,以便實現后續(xù)控制 outtextxy(0, 0, L"按任意鍵開始播放"); _getch(); // 播放音樂 MCI_PLAY_PARMS mciPlayParms; mciSendCommand(wDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, DWORD_PTR(&mciPlayParms)); outtextxy(0, 0, L"按任意鍵停止播放"); _getch(); // 停止播放并關閉音樂 mciSendCommand(wDeviceID, MCI_STOP, 0, NULL); // 停止播放 mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL); // 關閉音樂 outtextxy(0, 0, L"按任意鍵退出程序"); _getch(); closegraph(); return 0; }
解決某些 MP3 無法播放的問題
有些 mp3 無法用 mciSendString 播放,是因為用了比較大的封面,我測試過一個 mp3 的封面尺寸是 1824x1824,直接無法播放。將封面尺寸修改為 500x500,順利播放。當然,更簡單的辦法是直接移除封面。這里給大家推薦個工具:Mp3tag,官網:https://www.mp3tag.de,Mp3tag 的操作方法非常簡單,點點鼠標就能搞定,這里不再詳述。
使用 PlaySound 函數播放音樂
PlaySound 可以用來播放 wav 和系統聲音,使用很簡單,一些常用的用法如下:
// 注意: // 1. 需要使用預編譯指令 #pragma comment(lib, "winmm.lib") 鏈入庫文件 // 2. 第一個參數是字符串,注意使用程序中約定的字符集,例如 Unicode 字符集需要在字符串前面加 L // PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_SYNC); // 播放 Bells.wav,并等待直到播放結束 PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_ASYNC); // 后臺播放 Bells.wav,函數立即返回 PlaySound("SystemExclamation", NULL, SND_ASYNC); // 后臺播放系統定義的 SystemExclamation 聲音 PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_LOOP | SND_ASYNC); // 后臺循環(huán)播放 Bells.wav PlaySound(NULL, NULL, 0); // 停止后臺播放
到此這篇關于C語言使用mciSendString實現播放音樂功能的文章就介紹到這了,更多相關C語言mciSendString播放音樂內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
應用程序操作NorFlash示例代碼分享(norflash接口使用方法)
相對于操作NandFlash,操作NorFlash相對簡單,因為基本不需要考慮壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關系。讀寫擦除相對容易,下面看個例子吧2013-12-12