无法让 SFML 音乐正常工作

Can't get SFML Music to work

本文关键字:工作 常工作 SFML 音乐      更新时间:2023-10-16

好吧,只是一个警告:我真的是C++新手,今年才开始编码。

因此,我一直在尝试编写该程序以使用 SFML 库在控制台中运行。过去我试图让图书馆工作时遇到了问题,但现在我很好。因此,我有一个播放音乐的函数,但是当我尝试在控制台中激活该功能时,我只得到返回值0并且控制台关闭。

相关代码:

void music ()
{
      system("CLS");
      sf::Music WorldOnFire;
      std::string musicInput;
      std::cout << "What would you like to listen to?" << std::endl;
      std::cout << "> Track 1 - "I Don't Want to Set the World on Fire" by The Ink Spots" << std::endl;
      std::cout << "> Back" << std::endl;
      std::getline(std::cin, musicInput);
      std::transform(musicInput.begin(), musicInput.end(), musicInput.begin(), ::toupper);
      musicInput.erase(std::remove(musicInput.begin(), musicInput.end(), ' '), musicInput.end());
      if (musicInput == "TRACK1" || musicInput == "TRACK1-"IDON'TWANTTOSETTHEWORLDONFIRE"" || musicInput == "TRACK1-"IDON'TWANTTOSETTHEWORLDONFIRE"BYTHEINKSPOTS" || musicInput == ""IDON'TWANTTOSETTHEWORLDONFIRE"" || musicInput == "IDON'TWANTTOSETTHEWORLDONFIRE")
      {
          if (!WorldOnFire.openFromFile("WorldOnFire.ogg"))
          {
               std::cout << "Could not open file. File corrupted or missing." << std::endl;
               std::cin.ignore();
               music();
          }
          WorldOnFire.play();
      }
      else if (musicInput == "BACK")
      {
          system("CLS");
          activitypage ();
      }
}

这是所有代码,出于个人原因遗漏。源

WorldOnFire.play();是非阻塞的。因此,您的程序将在实际播放任何声音之前终止。

您需要在应用程序中添加某种循环。它可以像贪婪的 while(正在播放)一样简单:

while (WorldOnFire.getStatus() == sf::Music::Playing);

或更节能一点:

sf::sleep(WorldOnFire.getDuration() - WorldOnFire.getPlayingOffset());