getUserMedia에서 스테레오 입력이 모노로 변환되는 현상 방지

무슨 현상?



getUserMedia를 사용하여 브라우저에서 오디오를 가져올 때,
원래의 음성은 스테레오인데, 취득 후의 음성이 모노로 합성되어 버린다.
구체적으로는 아래 그림과 같이
스테레오의 입력 음성(Input)을 getUserMedia로 취득한 음성(streamData)은,
입력 음성의 LR이 모노 합성된 음성이 2ch로 나온다는,
정말 유감스러운 결과가 된다.



WebChat과 같이 헤드셋에서 모노로 오디오를 입력하면 문제가되지 않지만,
음악 데이터를 스테레오 입력하는 경우 등은 모노럴 합성되어 버리면 곤란할 수 있다.

이유



getUserMedia에는 ​​에코 캔슬러 기능이 갖추어져 있는 것 같다.
이것이 기본적으로 켜져 있으며,
에코 캔슬러 동작의 전단에서 스테레오 입력이 모노로 변환되어 버린다고 한다.

회피 방법



getUserMedia의 constraints에,
에코 캔슬러를 무효화하는 설정을 추가하면 OK.

sample.js
  // constraints
  var constraints = {
    video: false,
    audio: { echoCancellation: false }  // エコーキャンセラ無効化
  };
  // constraints (Chrome)
  if (window.chrome) {
    var constraints = {
      video: false,
      audio: {mandatory: {echoCancellation : false, googEchoCancellation: false}}  
    };
  }

  // Initialize getUserMedia
  navigator.getUserMedia = ( navigator.getUserMedia ||
    navigator.webkitGetUserMedia ||
    navigator.mozGetUserMedia ||
    navigator.msGetUserMedia);

  if (navigator.getUserMedia) {
     navigator.getUserMedia (
       constraints,
       // successCallback
       function(stream) {
         var source = context.createMediaStreamSource(stream);
       },
       // errorCallback
       function(err) {
         alert('The following error occurred: ' + err);
       }
     );
  } else {
    alert('getUserMedia not supported');
  }

참고

좋은 웹페이지 즐겨찾기