エコーの問題

現象   Asteriskでは、しばしば相手の声や、自分の声が反響したり、
山彦のように響いて聞こえたりする「エコー」が問題になります。
Asteriskというか、SIPなど音声を電線ではなくデータにしてから
伝送するものにはかならずついて回る問題です。
ここでは、このエコーの問題を考えて見ます。

しくみ   エコーが起きる理由は、様々にあって、簡単には説明できませんが、
大雑把な解釈としてあげるとすれば、話者が発した声が電話線を通って
相手に届いたときに、相手側の電話機のスピーカから出た音を同じ電話機の
マイクが拾ってしまい、そのマイクが拾った音が電話線を伝って話者の
スピーカから聞こえてしまうということです。

このとき、音が戻ってくる時間が早いと、エコーしたかどうかわからないので
気になりませんが、何かの理由で戻ってくる速度が遅いと、エコーしていると
知覚してしまいます。

さらに、話者の声を戻してしまうポイントは相手の電話機に限らず、
様々な要因が考えられます。

解決の糸口   まず、いかなる場合でも、家庭のアナログ電話機と同じ品質の通話が
できなければだめだというお客さんには、エコーの解決は難しいです。
高額なエコーキャンセラでも入れれば改善されるかもしれませんが。

ですので、エコーの根本解決は難しいという前提で考えていかなければだめです。
エコーをなくすのでなく、エコーをさせにくい状態にするというスタンスです。

エコーをさせにくい状態を作る方法ですが、
「話者が発した音のボリュームは小さく、耳に届く直前のスピーカ側のボリューム調整で音量をあわせる」
つまり、発話側の音量は小さくし、音量自体は受話側の末端で調整するというのが鉄則らしいです。

対処方法   送話のボリュームを調整するためには、Asteriskに付属しているツールが便利です。
zaptelフォルダにある『ztmonitor』ツールがそれです。

やりかたは簡単です。

ztmonitor <チャンネル番号> -v

というコマンドを投入し、そのチャンネルを使って電話をかけます。
すると、声の大きさに合わせて、ボリューム表示が伸びたり縮んだりするはずです。

txは送話側、つまりこちらの音声、rxは受話側つまり相手の音声の大きさです。
このボリューム表示が振り切れていると、音量が大きすぎます。

音量を調節するには、/etc/asterisk/zapata.conf の rxgain 及び txgain の
値をマイナス値にしてみてください。

そしてAsteriskを再起動し、もう一度ztmonitorを実行して電話をかけ、音量を
チェックします。
これを、メーターが振り切れなくなるまで繰り返します。

Asteriskのエコーキャンセル関係の設定項目の代表的なものには、 echocancel = yes
echotraining = yes
echocancelwhenbridged=yes
などがあります。
これらは、/etc/asterisk/zapata.conf にあります。