こちらのページは旧SkyWayの情報です。新しいSkyWayに関する情報はこちら

WebRTCのノイズキャンセリングについて

Comments

5 comments

  • Avatar
    岩瀬 義昌

    WebRTCはノイズ削減機能を、ブラウザのライブラリ内で実装しています。(https://webrtc.org/architecture/)
    個人的な意見ですが、現状、ノイズを削減するための簡単な方法は、イヤホンマイクやピンマイクなど、ノイズを拾いにくいマイクを使うことかと思います。

    なお、getUserMediaで取得した音声に対し、WebAudio APIを利用して自前で処理を加えることもできるので、ご自身でノイズ削減に対応することも可能です。(が、かなり難易度が高いと思います)

    Skypeは、Skype独自のノイズ削減機能を実装しているのだと思いますが、Skype自体もWebRTCへの移行が進んでおり、ブラウザで使えるようになっています。(https://webrtchacks.com/working-to-make-edge-dull-extended-qa-for-rtc-devs/) 

     

    0
    Comment actions Permalink
  • Avatar
    Ishiyama

    岩瀬様

    ご返信ありがとうございます。

     

    良いヘッドセットを使用して検証したのですが、やはり周囲の音を拾ってしまうので、Web Audio APIで実装してみて、音声を加工することはできました。

     

    しかし、getUserMediaで取得したstreamからaudioだけ取り出して、加工したaudioStreamをstreamに戻すところがうまくかず、audioだけ送信してしまします。

     

    流れとしては

    1. getUserMediaでstreamを取得

    2. audioを取り出して加工する

    3. 加工したaudioをstreamに戻す

    4. 相手に送信する

    のようになると思うのすが、audioを取り出す方法と戻す方法についてご教示いただけますと幸いです。

    0
    Comment actions Permalink
  • Avatar
    Yoshimasa Iwase

    getUserMediaで取得したMediaStreamに対して

    1. 音声(audio)は加工する
    2. 映像はそのままにする

    を実施し、[1]と[2]をあわせもったMediaStreamを作成されたい、という理解であっておりますでしょうか?

    その場合
    https://www.slideshare.net/mganeko/webrtc-build-mcu-on-browser
    のP.17-18に記載されている処理が役立つかと思います。

    0
    Comment actions Permalink
  • Avatar
    Ishiyama

    岩瀬様

     

    早速のご回答ありがとうございます。

    以下の方法で実装したところ、うまく音声だけ加工してmediastreamに戻すことができました。

     

    一度removeしてaddTrackしました。

     

      navigator.mediaDevices.getUserMedia(constraints).then(function(stream){

        var audioContext = new AudioContext();
        var gain_node = audioContext.createGain();
        gain_node.gain.value = 1;
        var source = audioContext.createMediaStreamSource(stream);

        //以下webaudioAPI操作

        ・・・・・・・・

        lowpassfilter.connect(output);

        stream.removeTrack(stream.getAudioTracks()[0]);
        stream.addTrack(output.stream.getAudioTracks()[0]);

        window.localStream = stream;

    }

     

    こちらもし実装方法に問題があるようでしたら、ご指摘いただけますと幸いです。

    0
    Comment actions Permalink
  • Avatar
    Yoshimasa Iwase

    そちらの実装方法で良いかと思います。

    なお、ご参考までに複数カメラ・マイクなどがある環境である場合は、 enumerateDevices をgetUserMediaの前にご利用になれます。アプリケーションを高度化したい場合に、参考になれば幸いです。

    0
    Comment actions Permalink

Please sign in to leave a comment.