Добавление панорамирующего / пространственного звука в контекст Web Audio из потока WebRT C не работает - PullRequest
0 голосов
/ 31 марта 2020

Я бы хотел создать панораму Web Audio для позиционирования звука из потока WebRT C.

У меня есть поток, соединяющий OK, и я могу слышать звук и видеть видео, но паннер делает не влияет на звук (изменение panner.setPosition (10000, 0, 0) на + или - 10000 не влияет на звук).

Это функция onaddstream, по которой аудио и видео передаются по конвейеру. в элемент видео и где я предполагаю, мне нужно добавить паннер.

Нет ошибок, просто нет панорамирования.

Что я делаю не так?

Спасибо!

  peer_connection.onaddstream = function(event) {

        var AudioContext = window.AudioContext || window.webkitAudioContext;
        var audioCtx = new AudioContext();

        audioCtx.listener.setOrientation(0,0,-1,0,1,0)

        var panner = audioCtx.createPanner();
        panner.panningModel = 'HRTF';
        panner.distanceModel = 'inverse';
        panner.refDistance = 1;
        panner.maxDistance = 10000;
        panner.rolloffFactor = 1;
        panner.coneInnerAngle = 360;
        panner.coneOuterAngle = 0;
        panner.coneOuterGain = 0;

        panner.setPosition(10000, 0, 0); //this doesn't do anything

        peerInput.connect(panner);
        panner.connect(audioCtx.destination);


        // attach the stream to the document element
        var remote_media = USE_VIDEO ? $("<video>") : $("<audio>");
        remote_media.attr("autoplay", "autoplay");
        if (MUTE_AUDIO_BY_DEFAULT) {
            remote_media.attr("muted", "false");
        }
        remote_media.attr("controls", "");
        peer_media_elements[peer_id] = remote_media;
        $('body').append(remote_media);
        attachMediaStream(remote_media[0], event.stream);



  }

Ответы [ 3 ]

0 голосов
/ 31 марта 2020
  1. Удалите все опции, которые вы установили для узла паннера, и посмотрите, поможет ли это. (Углы конуса кажутся мне немного забавными, но я всегда забываю, как они работают.)
  2. Если это не сработает, создайте меньший тест с панорамированием, но используйте простой генератор в качестве входных данных. Поиграйте с параметрами и позициями, чтобы убедиться, что он делает то, что вы хотите.
  3. Вставьте это обратно в свое приложение. Вещи должны работать тогда.
0 голосов
/ 22 апреля 2020

понял это для себя.

Проблема была не в коде, а в том, что я был связан с аудио через Bluetooth.

Bluetooth, очевидно, может воспроизводить стереозвук только при выключенном микрофоне. Как только вы активируете mi c, это украдет один из каналов, и аудиовыход понижается до моно.

Если у вас монофонический звук, вы точно не можете воспроизводить трехмерный звук, поэтому я подумал, что код не работает.

0 голосов
/ 31 марта 2020

Попробуйте получить поток событий перед установкой панели

  var source  = audioCtx.createMediaStreamSource(event.stream);

Ссылка: Сеть разработчиков Mozilla - AudioContext

Ссылка CreatePaneer: Сеть разработчиков Mozilla - createPanner

Сторонняя библиотека: wavesurfer. js

...