如何停止在我的 C 游戏中播放音频?

Posted

技术标签:

【中文标题】如何停止在我的 C 游戏中播放音频?【英文标题】:How to stop audio from playing in my C game? 【发布时间】:2019-01-26 14:29:03 【问题描述】:

我正在用 C 语言制作游戏,我想从一个音频文件更改为另一个,但我必须等待第一个文件播放完毕。有没有办法让第一个立即停止播放?

这是我的代码:

void MusicPlayer ()
    while (music == true)
        PlaySound("elevat_loop1.wav" , NULL, SND_FILENAME);
    while (music == false)
        PlaySound("silence.wav", NULL, SND_FILENAME);
    if (music == true)
        MusicPlayer();


thread t(MusicPlayer);//I used thread because I want music to play independently

我希望无需等待即可停止播放第一个文件。 我尝试使用 SND_ASYNC,但如果我这样做,声音将无法播放。

【问题讨论】:

C,但是你有对象吗? Playsound 是什么? 我认为他的意思是mmsystem playsound PlaySound 函数播放由给定文件名指定的声音。 检查这个:***.com/questions/44960898/… 这个thread t(MusicPlayer); 看起来不像C。 【参考方案1】:

可能在另一个线程中执行 PlaySound 并在需要时杀死该线程?


除此之外

void MusicPlayer ()
  while (music == true)
    PlaySound("elevat_loop1.wav" , NULL, SND_FILENAME);
  while (music == false)
    PlaySound("silence.wav", NULL, SND_FILENAME);
  if (music == true)
    MusicPlayer();

没有递归,甚至可能编译器会优化使用循环似乎更好

while (music == false) ... 会在 music 回归真实时伸出援手,所以if (music == true) 很有可能变为真实,真的需要测试吗?

【讨论】:

我使用最后一个测试,因为我想回到循环“elevat_loop1.wav”。我尝试使用 SND_ASYNC,它应该在播放声音时立即返回而不是阻塞,但如果我使用 SND_ASYNC,声音将不会播放。【参考方案2】:

我解决了。代码是

void MusicPlayer ()
    if (music == true)
        PlaySound(TEXT("elevmus.wav"), NULL, SND_LOOP | SND_ASYNC);
    while (music == true)
        ;
    if (music == false)
        PlaySound("silence.wav", NULL, SND_LOOP | SND_ASYNC);
    while (music == false)
        ;
    if (music == true)
        MusicPlayer();

【讨论】:

以上是关于如何停止在我的 C 游戏中播放音频?的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何停止在后台播放音频?

如何在按下按钮时播放音频并在我的手指离开同一个按钮时立即停止?

Javascript:如何暂停/停止当前播放的音频?

在 Swift 中,如何让其他应用在我的应用打开时继续播放音频?

Ipad 无法在我的网络应用程序上同时播放音频和视频

如何在后台播放音频?