如何使用7.1音频系统SFML播放声音?

时间:2019-01-03 20:51:38

标签: c++ audio sfml

我试图用sfml录制一些声音,然后播放。以前,我曾使用我认为具有5.1音响系统的旧耳机成功完成了此操作。但是现在,当我尝试使用新耳机(7.1声音)做同样的事情时。代码抛出此错误。

  

AL lib:(EE)SetChannelMap:无法匹配前中央通道(2)   在频道地图中。

我尝试重新启动Visual Studio。重新启动计算机。在Visual Studio中重置缓存。

#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <iostream>
#include <thread>
#include <chrono>

int main()
{
    sf::ContextSettings settings;
    settings.antialiasingLevel = 8;
    sf::RenderWindow window;
    window.create(sf::VideoMode(800, 500), "Audio check", sf::Style::Close | sf::Style::Resize);
    if (!sf::SoundBufferRecorder::isAvailable())
    {
        // error: audio capture is not available on this system
        std::cout << "Something went wrong" << std::endl;
    }

    // create the recorder
    sf::SoundBufferRecorder recorder;

    recorder.start(44100);
    //record the audio for 5 sec
    std::this_thread::sleep_for(std::chrono::milliseconds(5000));

    recorder.stop();

    //get the buffer from the recorder and play it back
    const sf::SoundBuffer& buffer = recorder.getBuffer();
    sf::Sound sound(buffer);
    sound.play();

    sf::Event event;
    while (window.isOpen()) {

        while (window.pollEvent(event)) {
            switch (event.type) {
            case sf::Event::Closed:
                window.close();
                break;
            }
        }
        window.clear(sf::Color::Blue);
        window.display();
    }

    return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:1)

实际上,SFML不支持两个以上的通道记录。如果我们检查类SoundRecorder的方法setChannelCount()的文档,它最多仅支持2个(通道)。


编辑

来自openAL库(重点是我的):

  

hexagon.ambdec

     

指定7.1的扁平前六角扬声器设置   环绕声输出。左右前置扬声器位于+30   和-30度,侧面扬声器放置在+90和-90度,   后置扬声器放在   +150和-150度。尽管这是针对7.1输出的,但未为解码器定义前置中置扬声器,这意味着该扬声器   对于3D声音将保持静音(但是仍然可以与   AL_SOFT_direct_channels或ALC_EXT_DEDICATED输出)。 “正确” 7.1   解码器可能会在将来提供,但由于   扬声器的配置需要权衡。

似乎该库不包含实际的7.1解码器。