SFML不播放任何声音,但没有错误

时间:2017-09-16 16:14:33

标签: c++ audio ubuntu-16.04 sfml

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

#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”,但我听不到任何声音。我已经尝试调高音量,重新启动计算机,戴上耳机等。当我通过双击播放声音文件时,它会发出哔声。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

即使您的代码完全正确,也可能有很多原因导致无法播放声音 但是,它不是,因为sf :: Sound :: play 异步在另一个线程中播放声音(如here所述)但你的应用程序完成得非常快,因此给出了其他线程没有真正的机会播放大部分指定的声音缓冲区。

所以为了至少有理论上听到任何东西的机会,我建议插入一些指令来阻止主线程,比如

<?php
$fields = [ 'tphy' => 2, 'tchem' => 2 ];

function sanitizeAttribute($str) {
    return filter_var($str, FILTER_SANITIZE_MAGIC_QUOTES);
};

foreach( $fields as $field => $repeat ) {
    $repeat = range(1, $repeat);
    foreach( $repeat as $count ) {
        $sField = sanitizeAttribute($field);
        ?><td><input type="number" id="<?= $sField . "_{$count}" ?>" disabled="disabled"  min ="0" name="sci['<?= $sField ?>'][]"/><?php
    }
}
退出之前