在使用mciSendString函数播放音乐时,鼠标将当前音乐切换为另一首音乐时,只能单一的从某首切换成另一首而不能双向切换,请问有没有解决的办法,以下是源码:
MOUSEMSG msg;
int play = 0;
while (1)
{ msg = GetMouseMsg();
if (msg.x > 100 && msg.x < 220 && msg.y>80 && msg.y < 150) {
if (msg.uMsg == WM_LBUTTONDOWN) {
be();
}
}else if (msg.x > 350 && msg.x < 530 && msg.y>500 && msg.y < 540) {
if (msg.uMsg == WM_LBUTTONDOWN) {
if (play == 0) {
mciSendString("open./ 即兴.mp3", 0, 0, 0);
mciSendString("play ./即兴.mp3 ", 0, 0, 0);
play++;
}
else {
mciSendString("close ./雷车.mp3", 0, 0, 0);
mciSendString("open. /即兴.mp3", 0, 0, 0);
mciSendString("play./即兴.mp3 repeat", 0, 0, 0);
}
}
}
else if (msg.x > 560 && msg.x < 760 && msg.y>500 && msg.y < 540) {
if (msg.uMsg == WM_LBUTTONDOWN) {
if (play == 0) {
mciSendString("open ./雷车.mp3", 0, 0, 0);
mciSendString("play ./雷车.mp3 repeat", 0, 0, 0);
play++;
}
else {
mciSendString("close ./即兴.mp3", 0, 0, 0);
mciSendString("open ./雷车.mp3", 0, 0, 0);
mciSendString("play ./雷车.mp3 repeat", 0, 0, 0);
}
}
}
问题是只能由即兴切换成雷车,不能由雷车切换到即兴,请问有没有什么解决办法?
不知道你说的双向是什么意思,你可以先 close 停下来,再播放啊
不知道你这个问题是否已经解决, 如果还没有解决的话:(1)获取当前的音量
char a[100];
mciSendString("status music volume", a, 100, 0);//获取此时的音量数据返回到a,这里的100是表示a的长度,sizeof(a)
//其中a是字符串,如果想把a转换为数字,可以调用atoi函数
int b=atoi(a);//通过atoi函数进行字符数字串转换到int类型
char s[100];
sprintf(s, "setaudio music volume to %d", b%1000+200);//这里建议去取模,此时获得的音量加上200,再除以1000乘上此时媒体音量就是将要播放出来的音量
mciSendString(s,0,0,0);
我们可以在这个基础上进行音量的加减,例如:
当前媒体音量
我们可以直接通过mciSendString("setaudio music volume to a",0,0,0),其中a是一个数字,来实现播放音量的改变,这个音量的换算是此时多媒体的音量乘上a/1000,所以这个a的范围是0~1000;如果a超过了1000,那么实际上a还是以1000来算。
mciSendString("setaudio music volume to 800",0,0,0);
//意思是把音量调节到当前媒体音量的80%,换算过来就是此时的音量为32
既然知道了这些,那我们怎么去通过键盘或者鼠标的外部操作来改变播放音量呢?其实非常简单,利用循环就可以搞定了,代码如下:
void volume()
{
int i=0;
char a[100];
mciSendString("open kk.mp3 alias music", 0, 0, 0);
while (true) {
mciSendString("play music", 0, 0, 0);
char s = getch();//在键盘上获取一个字符,但是不打印出来,接着往下执行
system("cls");//清屏
if (s == 'w')//如果获取的字符为w,那么音量加100
i += 100;
else if(s=='s')//如果为s,音量减少100
i -=100 ;
printf("%d",i);//打印此时的音量
sprintf(a, "setaudio music volume to %d", i);//把此时的音量以及操作字符串赋给a
mciSendString(a, 0, 0, 0);//音量的设置
}
}
这个函数的功能其实就是我们用的音乐软件里面的音量调节功能一样的,如下所示:
对于使用mciSendString函数切换音乐出现单向切换问题的解决办法,可以通过以下步骤实现双向切换:
mciSendString("close music", 0, 0, 0);
mciSendString("open 音乐文件路径 alias music", 0, 0, 0);
其中,音乐文件路径为要切换的音乐文件的路径,可以是相对路径或绝对路径。别名可以自定义,用于代替音乐文件路径。
对于双向切换音乐,可以通过设置一个变量来记录当前播放的音乐文件,然后根据该变量来切换音乐文件。
在鼠标点击或其他触发切换音乐的事件中,根据当前播放的音乐文件和要切换的音乐文件进行判断和切换,可以使用以下代码实现:
string currentMusic = "即兴.mp3"; // 记录当前播放的音乐文件
string switchMusic = "雷车.mp3"; // 要切换的音乐文件
if (currentMusic == "即兴.mp3") {
// 如果当前播放的音乐文件是即兴音乐,则切换到雷车音乐
mciSendString("play 雷车.mp3", 0, 0, 0);
currentMusic = "雷车.mp3"; // 更新当前播放的音乐文件
} else if (currentMusic == "雷车.mp3") {
// 如果当前播放的音乐文件是雷车音乐,则切换到即兴音乐
mciSendString("play 即兴.mp3", 0, 0, 0);
currentMusic = "即兴.mp3"; // 更新当前播放的音乐文件
}
请注意替换代码中的音乐文件路径和别名,以及适应你的具体情况。以上代码中,假设即兴音乐的路径为"即兴.mp3",雷车音乐的路径为"雷车.mp3"。
通过以上步骤,可以实现从即兴音乐切换到雷车音乐,并且也能够从雷车音乐切换回即兴音乐。