2013-11-26 5 views
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; 
+0

Что вы подразумеваете под «скоростью воспроизведения звука»? Я считаю, что «бенчмарк» очень странный и не уверен, даст ли он вам какую-либо полезную информацию ... Также имейте в виду, что события без обработки могут привести к тому, что ОС верят, что ваше приложение заморожено. – Lukas

+0

хорошо, для обработки информации требуется много миллисекунд для обработки информации и воспроизведения. Я хочу много раз воспроизводить звук в обеих библиотеках, а затем узнать, какой из них имеет более низкое время. – Sam

+0

Это не имеет никакого смысла? Воспроизведение звука - определенно не операция, которая имела бы важные (или даже разумные) накладные расходы при любом использовании мультимедийной библиотеки. О 'sf :: Music', он не читается один раз, а передается с диска, поэтому нет смысла. –

ответ

0

Я знаю, что это старый вопрос, но только, чтобы указать на ошибку в коде: Аргумент sf::milliseconds() Функция представляет собой фактическое количество миллисекунд, как десятичное значение.

Итак, если вы хотите, чтобы он подождал 1 мс, вы должны были ввести sf::milliseconds(1).

Это поведение действительно в текущей версии (2.3 на сегодняшний день), но я не знаю, было ли в предыдущих версиях другое.

Смежные вопросы