gpt4 book ai didi

c++ - SFML 声音不播放

转载 作者:行者123 更新时间:2023-11-30 03:57:19 26 4
gpt4 key购买 nike

我正在尝试播放 SFML 中的声音文件,但它没有播放。这是声音(警告:音量过大):http://freesound.org/people/thanvannispen/sounds/9550/ .我使用在线转换器将其转换为 wav ( http://audio.online-convert.com/convert-to-wav ),但声音在 Windows 中播放良好,所以这应该不是问题。

声音管理器.h

#pragma once

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

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

static bool load();

static std::map<std::string, sf::Sound> sound;
};

声音管理器.cpp

#include "SoundManager.h"
#include <SFML\Audio.hpp>
#include <map>

std::map<std::string, sf::Sound> SoundManager::sound = std::map<std::string, sf::Sound>();

SoundManager::SoundManager()
{
}

SoundManager::~SoundManager()
{
}

bool SoundManager::load() {
sf::SoundBuffer laughterBuffer;
if (!laughterBuffer.loadFromFile("data/sound/laughter.wav")) {
return false;
}
sf::Sound laughter;
laughter.setBuffer(laughterBuffer);
SoundManager::sound["laughter"] = laughter;
}

我在这里加载声音:

Logger::print("Loading sound...");
if (!SoundManager::load()) {
Logger::error("Failed to load sound! Exiting...");
exit();
}
Logger::print("Sound loaded.");

我在进入游戏循环之前就这样玩了(我试过从多个地方调用它;没有成功)

SoundManager::sound["laughter"].play();

当我第一次尝试导入 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

最佳答案

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

It is important to note that the sound buffer is not copied, thus the sf::SoundBuffer instance must remain alive as long as it is attached to the sound.

laughterBuffer 不是这种情况.

我建议看看 Thor resourcessftools resources .

关于c++ - SFML 声音不播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com