C语言——单线程播放多音乐和一些小方法

本文介绍了如何在C语言中实现单线程播放多首音乐。由于标准库playsound只能播放一个音频,作者通过探索找到了解决方法。文章分享了实现多音频播放所需的头文件和关键代码,指出该方法同样适用于创建播放设备数量可扩展的播放器。虽然作者对MCI工作原理不熟悉,但已成功实现了功能。

-,-暑假学校培训做个小游戏,但是用playsound只能播放一个音乐,于是四处求解,现在放假了闲下来写下来:

一是为了方便广大同样的苦逼者解决问题。二是为了以后忘了直接回来看看大笑(这才是主要原因尴尬

——————————————————华丽的分割线————————————————————————

首先我们需要头文件

#include<windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")


上面的winmm.lib,也可以通过在VS的Project->Settings->Link->Object/libray module中加入库 Winmm.lib。

首先需要声明

MCI_OPEN_PARMS musicopen;
MCI_PLAY_PARMS musicplay;
UINT musicpalyer1;//第一个设备,用来播放音乐
UINT musicpalyer2;//第二个设备,用来播放另一首音乐
musicopen.lpstrDeviceType = TEXT("mpegvideo");


加载音乐(大笑下面就简单了)

mciSendCommand(devciveID1, MCI_CLOSE, 0, NULL);//这是该播放设备,这样才可以重置更换音乐(原理不知道,经验之谈)(不用来更换或重播的不用加)
musicopen.lpstrElementName = TEXT("音乐文件位置");//加TEXT是不知道为嘛,我打的路径不行要TEXT转换,也许你不用(希望大神能解答下)
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
musicpalyer1 = musicopen.wDeviceID;
mciSendCommand(musicpalyer1, MCI_SEEK, MCI_SEEK_TO_START, NULL);//让音乐重头开始
mciSendCommand(musicpalyer1, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD)&mciPlay);//播放音乐(MCI_DGV_PLAY_REPEAT是为了循环播放,不循环播放可以不加)


这样一个播放器就完成了!剩下播放器的同样的道理,而且播放设备的数量可以自主增加哦!


有空会吧MCI的坑填了0,0    ————不懂原理,但能试出来!!


方便复制、、、、、、、

</pre><pre name="code" class="cpp">#include<windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

MCI_OPEN_PARMS musicopen;//放在函数里
MCI_PLAY_PARMS musicplay;
UINT musicpalyer1;//第一个设备,用来播放音乐
UINT musicpalyer2;//第二个设备,用来播放另一首音乐
musicopen.lpstrDeviceType = TEXT("mpegvideo");
mciSendCommand(devciveID1, MCI_CLOSE, 0, NULL);//这是该播放设备,这样才可以重置更换音乐(原理不知道,经验之谈)(不用来更换或重播的不用加)
musicopen.lpstrElementName = TEXT("音乐文件位置");//加TEXT是不知道为嘛,我打的路径不行要TEXT转换,也许你不用(希望大神能解答下)
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
musicpalyer1 = musicopen.wDeviceID;
mciSendCommand(musicpalyer1, MCI_SEEK, MCI_SEEK_TO_START, NULL);//让音乐重头开始
mciSendCommand(musicpalyer1, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD)&mciPlay);//播放音乐(MCI_DGV_PLAY_REPEAT是为了循环播放,不循环播放可以不加)

<pre name="code" class="cpp"><pre name="code" class="html">













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值