2016-10-09 6 views
1

По причине, что я игнорирую, музыка Gold.wav не играет, будучи загружен успешно, используя SFML openFromFile:SFML - Музыка не играет

#include <SFML/Audio.hpp> 

#include <iostream> 
#include <windows.h> 

int main() 
{ 
     sf::Music music; 

     music.openFromFile("Gold.wav"); 
     music.setLoop(true); 
     music.play(); 
     while (music.getStatus() == sf::Music::Playing) 
     { 
      // Leave some CPU time for other processes 
      Sleep(1000); 

      // Display the playing position 
      std::cout << "Playing... "; 
     } 

     system("pause"); 
     return 0; 
} 
+0

Прежде всего, проверьте значение, возвращаемое 'sf :: Music :: openFromFile'. Кроме того, есть переносная функция 'sf :: sleep()'. – Hiura

+0

Файл загружен успешно, но music.m_samples == Int16 {0, ..., 0}. –

+0

Вы пытались использовать другой файл или заменяли 'Sleep' для' sf :: sleep'? Является ли результат другим, если вы вообще убираете сон? –

ответ

0

Вы не проверка возвращаемого значения openFromFile, который возвращает true, если файл можно открыть правильно. Вполне вероятно, что ваша программа не ищет, где вы думаете, что это для файла, и что openFromFile возвращает false. В этом случае вызовы других методов, таких как Play(), будут терпеть неудачу.

Попробуйте изменить свой код и поиграть по пути, который вы ему дадите.

if (!music.openFromFile("Gold.wav")) { 
    // Handle error 
} 
else { 
    // Play music 
} 
+0

Хорошо, я изменил эту часть кода: if (! Music.openFromFile («Gold.wav»)) \t { std :: cout << "Ошибка." << std :: endl; \t \t return -1; \t} Но ошибка не возникает. –

0

Я знаю, что это сообщение устарело, но я думал, что все равно ответю на это, если у кого-то еще есть эта проблема.

Вы должны использовать звук, так как это то, что я всегда использовал. Так что бы что-то вроде этого

#include <SFML/Graphics.hpp> 

sf::SoundBuffer buffer; //This is used to initalise the sound 
sf::Sound music; 
bool play = true; 
int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); 

    if (!buffer.openFromFile("Gold.wav")) { 
     // Handle error 
    } 

music.setBuffer(buffer); 

while (window.isOpen()) 
{ 
    sf::Event event; 
    while (window.pollEvent(event)) 
    { 
     if (event.type == sf::Event::Closed) 
      window.close(); 
    } 
    playmusicfunction(&music); 

    window.clear();   
    window.display(); 
} 

return 0; 
} 


void playmusicfunction(sf::Sound &music) 
{ 
    if(play == true) 
    { 
    play = false; 
    music.setLoop(); 
    music.play(); 
    } 
} 

Делая это, вы просто называть его один раз. Он не всегда будет обновляться, чтобы играть, он будет играть один раз с циклом, и все. У людей, как правило, возникает вопрос о включении функции вызова функции() в метод обновления, означающий, что он постоянно обновляется.

Надеюсь, что это поможет кому-то

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

  • Нет связанных вопросов^_^