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

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

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

使用 mciSendString 播放音樂

mciSendString 支持 mp3、wma、wav、mid 等多種媒體格式,使用非常簡(jiǎn)單。這里做一個(gè)簡(jiǎn)單的范例,用 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;
}

簡(jiǎn)單講解一下:

一定要引用 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)然,更簡(jiǎn)單的辦法是直接移除封面。這里給大家推薦個(gè)工具:Mp3tag,官網(wǎng):https://www.mp3tag.de,Mp3tag 的操作方法非常簡(jiǎn)單,點(diǎn)點(diǎn)鼠標(biāo)就能搞定,這里不再詳述。

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

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

// 注意:
// 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++的訪問說明符

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

伊吾县| 壶关县| 张家界市| 资中县| 隆德县| 开封县| 中山市| 乐都县| 涡阳县| 衡阳县| 噶尔县| 盐边县| 九江县| 南昌市| 永和县| 和田县| 耒阳市| 房产| 丁青县| 廉江市| 饶阳县| 扶风县| 黎川县| 石林| 中卫市| 全椒县| 全州县| 嘉义市| 民勤县| 涪陵区| 德钦县| 新闻| 新巴尔虎右旗| 南丹县| 三原县| 南靖县| 肇庆市| 临泽县| 剑川县| 乃东县| 桂林市|