Как воспроизвести звук с аудиосистемой 7.1 sfml? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь записать звук с помощью 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 голосов
/ 08 января 2019

На самом деле SFML не поддерживает запись более 2 каналов.Если мы проверим документацию метода setChannelCount() класса SoundRecorder, он поддерживает только до 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 декодером.

...