播放按钮声音而不停止在后台运行的音乐

Posted

技术标签:

【中文标题】播放按钮声音而不停止在后台运行的音乐【英文标题】:play button sound without stopping music running in the background 【发布时间】:2021-03-21 15:24:47 【问题描述】:

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

【问题讨论】:

PlaySound 不适合播放音乐。 见Audio and Video。 【参考方案1】:

我的游戏中有一些按钮在用户使用时会发出短促的声音 单击按钮,它将停止音乐。

您可以使用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);

【讨论】:

以上是关于播放按钮声音而不停止在后台运行的音乐的主要内容,如果未能解决你的问题,请参考以下文章

当用户按下主页按钮时停止 Android 服务

IOS后台运行 之 后台播放音乐

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序

iOS:在 WKWebView 中嵌入视频在后台停止音乐

在后台播放音乐时减少电池消耗

在 Swift (macOS) 中控制背景音乐