C++ SFML声音不播放

C++ SFML声音不播放,c++,audio,sfml,C++,Audio,Sfml,我试图在SFML中播放声音文件,但它无法播放。这是声音(警告:音量过大):。我使用了一个在线转换器将其转换为wav(),但是声音在windows中播放得很好,所以这不应该是问题所在 音响经理 #pragma once #include <SFML\Audio.hpp> #include <map> class SoundManager { public: SoundManager(); ~SoundManager(); static bool

我试图在SFML中播放声音文件,但它无法播放。这是声音(警告:音量过大):。我使用了一个在线转换器将其转换为wav(),但是声音在windows中播放得很好,所以这不应该是问题所在

音响经理

#pragma once

#include <SFML\Audio.hpp>
#include <map>

class SoundManager
{
public:
    SoundManager();
    ~SoundManager();

    static bool load();

    static std::map<std::string, sf::Sound> sound;
};
在进入游戏循环之前,我就是这样玩的(我试着从多个地方调用它,但都没用)

当我第一次尝试导入SFML\Audio.hpp时,它给了我一个找不到libsndfile-1.dll的错误,所以我将它复制/粘贴到文件夹中,现在它可以工作了,但我不确定为什么会发生这种情况,因为我是静态链接的。这可能与我如何链接到SFML有关吗

sfml-main.lib
sfml-network-s.lib
ws2_32.lib
sfml-audio-s.lib
sndfile.lib
openal32.lib
sfml-window-s.lib
sfml-system-s.lib
opengl32.lib
gdi32.lib
winmm.lib
sfml-graphics-s.lib
glew.lib
freetype.lib
jpeg.lib

从关于SFML文档的
sf::Sound::setBuffer()

需要注意的是,声音缓冲区没有被复制,因此只要sf::SoundBuffer实例连接到声音,它就必须保持活动状态

这与
laughterBuffer
的情况不同


我建议看一下或。

不仅是sf::SoundBuffer,而且sf::Sound也需要激活

您可以将它们都设置为类变量或全局变量(但在函数中不能设置为变量,因为它将在执行后被终止)

例如:

.h文件

#pragma一次
#包括
班级音响管理员
{
私人:
sf::声音缓冲导弹发射;
sf::声音火灾声;
公众:
SoundManager();
void playMissileLaunch();
};
.cpp文件

#包括“SoundManager.h”
#包括
使用名称空间std;
SoundManager::SoundManager()
{
导弹发射buff.loadFromFile(“声音/导弹发射.wav”);
}
void SoundManager::playMissileLaunch()
{
发射声音。发射缓冲(导弹发射缓冲);
火之声。播放();
库特
Logger::print("Loading sound...");
if (!SoundManager::load()) {
    Logger::error("Failed to load sound! Exiting...");
    exit();
}
Logger::print("Sound loaded.");
SoundManager::sound["laughter"].play();
sfml-main.lib
sfml-network-s.lib
ws2_32.lib
sfml-audio-s.lib
sndfile.lib
openal32.lib
sfml-window-s.lib
sfml-system-s.lib
opengl32.lib
gdi32.lib
winmm.lib
sfml-graphics-s.lib
glew.lib
freetype.lib
jpeg.lib