无法使SFML音乐发挥作用

时间:2014-12-28 19:05:53

标签: c++ c++11 sfml

好的,只是预警:我对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 ();
      }
}

这是所有代码,由于个人原因有遗漏。 Source

1 个答案:

答案 0 :(得分:2)

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

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

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

或更节能:

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