我试图用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;
}
答案 0 :(得分:1)
实际上,SFML不支持两个以上的通道记录。如果我们检查类SoundRecorder
的方法setChannelCount()
的文档,它最多仅支持2个(通道)。
hexagon.ambdec
指定7.1的扁平前六角扬声器设置 环绕声输出。左右前置扬声器位于+30 和-30度,侧面扬声器放置在+90和-90度, 后置扬声器放在 +150和-150度。尽管这是针对7.1输出的,但未为解码器定义前置中置扬声器,这意味着该扬声器 对于3D声音将保持静音(但是仍然可以与 AL_SOFT_direct_channels或ALC_EXT_DEDICATED输出)。 “正确” 7.1 解码器可能会在将来提供,但由于 扬声器的配置需要权衡。
似乎该库不包含实际的7.1解码器。