欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言使用mciSendString實現播放音樂功能

 更新時間:2023年02月14日 09:49:15   作者:編程小魚六六六  
mciSendString?支持?mp3、wma、wav、mid?等多種媒體格式,使用非常簡單。這篇文章就來為大家介紹一下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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++非繼承時函數成員訪問屬性和類繼承過程中的訪問控制

    C++非繼承時函數成員訪問屬性和類繼承過程中的訪問控制

    這篇文章主要介紹了C++非繼承時函數成員訪問屬性和類繼承過程中的訪問控制,非繼承時,protected成員和private成員沒有任何區(qū)別,都是類內部可以直接訪問它們、類外部的類對象不可訪問它們、類內部的類對象可以訪問它們,更多詳細內容請參考下面相關資料
    2022-03-03
  • 帶你理解C語言中的漢諾塔公式

    帶你理解C語言中的漢諾塔公式

    大家好,本篇文章主要講的是帶你理解C語言中的漢諾塔公式,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 詳細講解C語言中的數據以及位運算

    詳細講解C語言中的數據以及位運算

    這篇文章主要為大家詳細介紹了C語言中數據表示方法以及位運算的相關知識點,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06
  • C++中的const的使用詳解

    C++中的const的使用詳解

    這篇文章主要介紹了 C++中的const的使用詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • C++友元函數與拷貝構造函數詳解

    C++友元函數與拷貝構造函數詳解

    這篇文章主要介紹了C++友元函數與拷貝構造函數,需要的朋友可以參考下
    2014-07-07
  • 詳解C語言如何執(zhí)行HTTP GET請求

    詳解C語言如何執(zhí)行HTTP GET請求

    在現代互聯網時代,網絡數據的獲取和分析變得越來越重要,本文我們將使用C語言和libcurl庫來編寫一個簡單的網絡爬蟲,以執(zhí)行HTTP GET請求并獲取淘寶網頁的內容,感興趣的可以了解下
    2023-11-11
  • C++實現LeetCode(110.平衡二叉樹)

    C++實現LeetCode(110.平衡二叉樹)

    這篇文章主要介紹了C++實現LeetCode(110.平衡二叉樹),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++ primer超詳細講解順序容器

    C++ primer超詳細講解順序容器

    本文主要介紹了C++順序容器(vector、deque、list)的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • C++超詳細講解拷貝構造函數

    C++超詳細講解拷貝構造函數

    我們經常會用一個變量去初始化一個同類型的變量,那么對于自定義的類型也應該有類似的操作,那么創(chuàng)建對象時如何使用一個已經存在的對象去創(chuàng)建另一個與之相同的對象呢
    2022-06-06
  • 應用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    應用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    相對于操作NandFlash,操作NorFlash相對簡單,因為基本不需要考慮壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關系。讀寫擦除相對容易,下面看個例子吧
    2013-12-12

最新評論