最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

使用 mciSendString 播放音樂

mciSendString 支持 mp3、wma、wav、mid 等多種媒體格式,使用非常簡單。這里做一個簡單的范例,用 mciSendString 函數(shù)播放 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();
 
    // 停止播放并關(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 庫文件。這個范例中是通過 #pragma comment 命令引用的,也可以在項目屬性中設(shè)置,這里不作介紹。

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

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

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

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

如果需要同時播放多個音樂,請為不同的音樂指定不同的別名,然后分別操作即可。

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

另外還有一個 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"

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

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

使用 mciSendCommand 播放音樂

mciSendCommand 與 mciSendString 的功能類似,只是控制方式略有區(qū)別。因此,對 mciSendCommand 不做過多介紹,只看一個使用例子吧。以下范例實現(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 需要保存下來,以便實現(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 播放,是因為用了比較大的封面,我測試過一個 mp3 的封面尺寸是 1824x1824,直接無法播放。將封面尺寸修改為 500x500,順利播放。當(dāng)然,更簡單的辦法是直接移除封面。這里給大家推薦個工具:Mp3tag,官網(wǎng):https://www.mp3tag.de,Mp3tag 的操作方法非常簡單,點點鼠標(biāo)就能搞定,這里不再詳述。

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

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

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

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

相關(guān)文章

  • 一文詳解C++的訪問說明符

    一文詳解C++的訪問說明符

    訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關(guān)鍵字,它們用于封裝類數(shù)據(jù)并保護其免受意外修改或濫用,本文將給大家詳細的介紹一下C++的訪問說明符,感興趣的朋友可以參考下
    2024-04-04
  • 基于C++實現(xiàn)五子棋小游戲

    基于C++實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • VC實現(xiàn)動態(tài)菜單的創(chuàng)建方法

    VC實現(xiàn)動態(tài)菜單的創(chuàng)建方法

    這篇文章主要介紹了VC實現(xiàn)動態(tài)菜單的創(chuàng)建方法,需要的朋友可以參考下
    2014-07-07
  • Qt操作SQLite數(shù)據(jù)庫的教程詳解

    Qt操作SQLite數(shù)據(jù)庫的教程詳解

    SQLite是一款開源、輕量級、跨平臺的數(shù)據(jù)庫,無需server,無需安裝和管理配置。它的設(shè)計目標(biāo)是嵌入式的,所以很適合小型應(yīng)用,也是Qt應(yīng)用開發(fā)種常用的一種數(shù)據(jù)庫。本文為大家介紹了Qt操作SQLite數(shù)據(jù)庫的示例,希望對大家有所幫助
    2022-12-12
  • C語言實現(xiàn)經(jīng)典24點算法

    C語言實現(xiàn)經(jīng)典24點算法

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)經(jīng)典24點算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++常見容器獲取頭元素的方法大全

    C++常見容器獲取頭元素的方法大全

    在C++編程中,容器是存儲和管理數(shù)據(jù)集合的重要工具,不同的容器提供了不同的接口來訪問和操作其中的元素,獲取容器的頭元素(即第一個元素)是常見的操作之一,本文將詳細列舉C++標(biāo)準(zhǔn)庫中所有常見容器獲取頭元素的方法,并對每種方法進行簡要說明,需要的朋友可以參考下
    2025-03-03
  • C語言常見排序算法之交換排序(冒泡排序,快速排序)

    C語言常見排序算法之交換排序(冒泡排序,快速排序)

    這篇文章主要介紹了C語言常見排序算法之交換排序(冒泡排序,快速排序),冒泡排序即Bubble?Sort,類似于水中冒泡,較大的數(shù)沉下去,較小的數(shù)慢慢冒起來,假設(shè)從小到大,即為較大的數(shù)慢慢往后排,較小的數(shù)慢慢往前排
    2022-07-07
  • C語言實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計

    C語言實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(二)

    C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(二)

    這篇文章住要介紹的是選擇類排序中的簡單、樹形和堆排序,歸并排序、分配類排序的基數(shù)排序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2021-12-12
  • 基于WTL中使用雙緩沖避免閃爍的解決方法

    基于WTL中使用雙緩沖避免閃爍的解決方法

    本篇文章是對WTL中使用雙緩沖避免閃爍的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

白河县| 海原县| 美姑县| 斗六市| 丰城市| 得荣县| 堆龙德庆县| 于都县| 左贡县| 调兵山市| 晴隆县| 宁城县| 开原市| 白城市| 石城县| 东安县| 无棣县| 沈丘县| 扬州市| 淄博市| 吉首市| 星子县| 丽水市| 灵寿县| 九龙县| 津南区| 夏河县| 沂南县| 富川| 云阳县| 封丘县| 南木林县| 张掖市| 安平县| 邵阳县| 呼伦贝尔市| 丰镇市| 炎陵县| 固镇县| 潢川县| 广元市|