首页 > 解决方案 > 播放按钮声音而不停止在后台运行的音乐

问题描述

PlaySound(TEXT("background.wav"), NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);习惯在后台播放音乐。我的游戏中有一些按钮,当用户单击按钮时会播放短促的声音并停止播放音乐。如何在整个游戏中保持音乐播放?我PlaySound(TEXT("button.wav"), NULL, SND_SYNC);用于按钮声音。

标签: c++winapi

解决方案


我的游戏中有一些按钮,当用户单击按钮时会播放短促的声音并停止播放音乐。

您可以使用PlaySound循环播放背景音乐。然后使用mciSendString播放短声音。

像这样:

//play music in the background
PlaySound(TEXT("background.wav"), NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);
...

//Press Button 1
mciSendString(L"close Sound_1", NULL, 0, NULL);//need to close first
LPCWSTR const Sound_File_1 = L"open button.wav type mpegvideo alias Sound_1";
mciSendString(Sound_File_1, NULL, 0, NULL);
MCIERROR play = mciSendString(L"play Sound_1", NULL, 0, NULL);

//Press Button 2
mciSendString(L"close Sound_2", NULL, 0, NULL);//need to close first
LPCWSTR const Sound_File_2 = L"open button_2.wav type mpegvideo alias Sound_2";
mciSendString(Sound_File_2, NULL, 0, NULL);
MCIERROR play = mciSendString(L"play Sound_2", NULL, 0, NULL);

您还可以mciSendString根据需要循环播放背景音乐。

WCHAR str[] = L"background.wav";          
LPCWSTR const Sound_File = L"open background.wav type mpegvideo alias Sound";
mciSendString(Sound_File, NULL, 0, NULL);
MCIERROR play = mciSendString(L"play Sound repeat", NULL, 0, NULL);

推荐阅读