我有一个使用SFML播放.wav声音文件的简单c++程序。看起来像这样:

#include <SFML/Audio.hpp>
#include <iostream>


int main()
{
    sf::SoundBuffer buffer;
    if (!buffer.loadFromFile("beep-01a.wav"))
        return -1;

    sf::Sound sound;
    sound.setBuffer(buffer);
    sound.play();
    std::cout << "Hello World" << std::endl;
    return 0;
}

我正在ubuntu 16.04 LTS上运行它并使用
$ g++ -c main.cpp
$ g++ main.o -o sfml-app -lsfml-audio
$ ./sfml-app

我已经以apt-get作为软件包安装了SFML。当我运行./sfml-app时,它输出“Hello World”,但听不到任何声音。我曾尝试调高音量,重新启动计算机,放入耳机等。当我通过双击播放声音文件时,它会发出哔声。

谢谢你的帮助

最佳答案

即使您的代码完全正确,也可能有很多原因导致没有声音播放。
但是,事实并非如此,因为sf::Sound::play异步在另一个线程中播放声音(如here所述),但是您的应用程序完成得非常快,因此,另一个线程没有真正机会播放大部分指定的声音缓冲区。
因此,为了至少有理论上的机会听到任何声音,我建议插入一些指令来阻塞主线程,例如

std::cin.get();

就在退出之前。

关于c++ - SFML不播放任何声音,但没有错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46255915/

10-15 09:06