0
我正在研究可比較SFML和SDL的基準測試應用程序。我正在進行基準測試的一件事是播放聲音的速度。我在循環中多次播放聲音並計算所需的時間。我需要在播放聲音之間有一段延遲,因爲我首先需要完成播放聲音以重新開始。我用SFML睡眠解決了這個問題,但是我不知道我是否正確地做了這件事。可能不是因爲第一次播放後,應用程序凍結,就像它會在無限循環中一樣。如果音樂仍在播放,我需要它延遲1毫秒。你能幫我解決嗎?SFML - 睡眠計算
我的功能:
void playSound()
{
sound.setBuffer(buffer);
sound.play();
}
void soundBenchmark(int numOfCycles)
{
sf::Time delayTime = sf::milliseconds(0.01);
sf::Clock clock;
for(int i = 0; i < numOfCycles; i++)
{
playSound();
while(sound.Playing) sf::sleep(delayTime);
}
sf::Time time = clock.getElapsedTime();
cout << "Time required for " << numOfCycles << " cycles playing sound: " << time.asMilliseconds() << " milliseconds.\n";
}
調用函數主:
while(running)
{
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
{
window.close();
running = false;
}
}
soundBenchmark(20);
break;
}
return 0;
「播放聲音的速度」是什麼意思?我發現「基準」很奇怪,不知道它是否會給你任何有用的信息... 還請記住,不處理事件可能導致操作系統認爲你的應用程序被凍結。 – Lukas
好吧,圖書館處理信息播放聲音並實際播放它需要幾毫秒的時間。我想在這兩個庫上多次播放聲音,然後找出哪一個播放時間較短。 – Sam
這沒有意義?播放聲音絕對不是一種在任何使用多媒體庫時都會產生重要(甚至是合理的)開銷的操作。關於'sf :: Music',它不會被讀取一次,而是從磁盤流出,因此沒有任何意義。 –