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

C語言使用mciSendString實(shí)現(xiàn)播放音樂功能

 更新時(shí)間:2023年02月14日 09:49:15   作者:編程小魚六六六  
mciSendString?支持?mp3、wma、wav、mid?等多種媒體格式,使用非常簡單。這篇文章就來為大家介紹一下C語言如何使用mciSendString實(shí)現(xiàn)播放音樂功能,需要的可以參考一下

使用 mciSendString 播放音樂

mciSendString 支持 mp3、wma、wav、mid 等多種媒體格式,使用非常簡單。這里做一個(gè)簡單的范例,用 mciSendString 函數(shù)播放 MP3 格式的音樂,代碼如下:

// 編譯該范例前,請(qǐng)把 music.mp3 放在項(xiàng)目文件夾中
// 發(fā)布時(shí),請(qǐng)把 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();
 
    // 停止播放并關(guān)閉音樂
    mciSendString(_T("stop mymusic"), NULL, 0, NULL);
    mciSendString(_T("close mymusic"), NULL, 0, NULL);
 
    outtextxy(0, 0, _T("按任意鍵退出程序"));
    _getch();
    closegraph();
    return 0;
}

簡單講解一下:

一定要引用 Winmm.lib 庫文件。這個(gè)范例中是通過 #pragma comment 命令引用的,也可以在項(xiàng)目屬性中設(shè)置,這里不作介紹。

mciSendString 函數(shù)的功能很強(qiáng)大,甚至可以播放視頻,不過這里就不多作介紹了,詳細(xì)請(qǐng)參見 MSDN。多數(shù)情況只需要用到第一個(gè)參數(shù),將另外三個(gè)參數(shù)置為 NULL, 0, NULL 即可。

第一個(gè)參數(shù)是多媒體命令字符串,不區(qū)分大小寫。程序中,先要通過 open 命令打開 background.mp3,并用 alias 指定了別名為“mymusic”,這樣在之后的代碼中就可以方便的通過“mymusic”這個(gè)別名訪問該音樂了。當(dāng)然,并不是必須要指定別名,每次通過文件名訪問也是可以的。

open 后面的 mp3 用絕對(duì)路徑或相對(duì)路徑都可以。

然后就是:play mymusic 開始播放,stop mymusic 停止播放,close mymusic 關(guān)閉文件。

如果需要同時(shí)播放多個(gè)音樂,請(qǐng)為不同的音樂指定不同的別名,然后分別操作即可。

不再需要播放的音樂,請(qǐng)記得用 close 命令關(guān)閉。

另外還有一個(gè) PlaySound 函數(shù)也可以用來播放聲音,不過可惜不支持 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"

關(guān)閉當(dāng)前程序打開的所有多媒體文件:

"close all"

如果文件名中有空格,需要用雙引號(hào)引起來文件名(注意轉(zhuǎn)義):

mciSendString("open \"D:\\My Music\\俞麗拿 梁祝 化蝶.mp3\" alias mymusic", NULL, 0, NULL);

使用 mciSendCommand 播放音樂

mciSendCommand 與 mciSendString 的功能類似,只是控制方式略有區(qū)別。因此,對(duì) mciSendCommand 不做過多介紹,只看一個(gè)使用例子吧。以下范例實(shí)現(xiàn) mp3 的循環(huán)播放:

// 該范例演示使用 mciSendCommand 函數(shù)循環(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 需要保存下來,以便實(shí)現(xiàn)后續(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();
 
    // 停止播放并關(guān)閉音樂
    mciSendCommand(wDeviceID, MCI_STOP, 0, NULL);    // 停止播放
    mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);    // 關(guān)閉音樂
 
    outtextxy(0, 0, L"按任意鍵退出程序");
    _getch();
    closegraph();
    return 0;
}

解決某些 MP3 無法播放的問題

有些 mp3 無法用 mciSendString 播放,是因?yàn)橛昧吮容^大的封面,我測(cè)試過一個(gè) mp3 的封面尺寸是 1824x1824,直接無法播放。將封面尺寸修改為 500x500,順利播放。當(dāng)然,更簡單的辦法是直接移除封面。這里給大家推薦個(gè)工具:Mp3tag,官網(wǎng):https://www.mp3tag.de,Mp3tag 的操作方法非常簡單,點(diǎn)點(diǎn)鼠標(biāo)就能搞定,這里不再詳述。

使用 PlaySound 函數(shù)播放音樂

PlaySound 可以用來播放 wav 和系統(tǒng)聲音,使用很簡單,一些常用的用法如下:

// 注意:
// 1. 需要使用預(yù)編譯指令 #pragma comment(lib, "winmm.lib") 鏈入庫文件
// 2. 第一個(gè)參數(shù)是字符串,注意使用程序中約定的字符集,例如 Unicode 字符集需要在字符串前面加 L
//
PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_SYNC);                // 播放 Bells.wav,并等待直到播放結(jié)束
PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_ASYNC);            // 后臺(tái)播放 Bells.wav,函數(shù)立即返回
PlaySound("SystemExclamation", NULL, SND_ASYNC);                // 后臺(tái)播放系統(tǒng)定義的 SystemExclamation 聲音
PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_LOOP | SND_ASYNC);    // 后臺(tái)循環(huán)播放 Bells.wav
PlaySound(NULL, NULL, 0);                                        // 停止后臺(tái)播放

到此這篇關(guān)于C語言使用mciSendString實(shí)現(xiàn)播放音樂功能的文章就介紹到這了,更多相關(guān)C語言mciSendString播放音樂內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    詳細(xì)講解C語言中的數(shù)據(jù)以及位運(yùn)算

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

    C++中的const的使用詳解

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

    C++友元函數(shù)與拷貝構(gòu)造函數(shù)詳解

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

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

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

    C++實(shí)現(xiàn)LeetCode(110.平衡二叉樹)

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

    C++ primer超詳細(xì)講解順序容器

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

    C++超詳細(xì)講解拷貝構(gòu)造函數(shù)

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

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

    相對(duì)于操作NandFlash,操作NorFlash相對(duì)簡單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關(guān)系。讀寫擦除相對(duì)容易,下面看個(gè)例子吧
    2013-12-12

最新評(píng)論