| 株式会社ユアネーム エンターテインメント・教育 |
以下のプログラムは資料です。
![]()
第十一回 ボイスメール(上巻)
汎用 shell, perlを使用 ソースコードのみ提供 約 2KB ダウンロード
MD5:e54f8ef38cd1c267565b42106a4eb7ac SHA:4ee8aa74c8455ab81353cfaa4381ce3144b5757a
固定電話向けです。 当初、このタイトルを「電話の自動録音」としようとしたのですが、あまりにも露骨な表現のため、海外でよく使われている、 「ボイスメール」というタイトルにしました。留守番電話の音声をメールで発信するサンプルプログラムです。 その名のとおり、声のメールです。ボイスメールは海外で良く使われています。 文字にして失われた情報(感情の変化など)も伝えることができる利点があります。 日本であまり普及しないのは、「感情は隠すのが良し」とする文化を持っていて、 上手に感情を表現することができない(過小表現と過大表現しかできない)日本人にとっては、辛いからかもしれません。 日本語という言語そのものが、そういう特徴を持っています。
このプログラムは、大規模なコールセンター向けのものではありまぜん。 業務用の電話には対応していません。ステレオ録音にすればいいのかも知れませんが、2回線以上には対応していません。 インターネットに常時接続された個人宅や、小規模オフィス(SOHO)での利用を想定しています。 留守番電話以外の発着信も記録します。 忌々しい、回線ノイズの除去にも対応しています。 メールの送信(3G携帯電話へも送信可能)は下巻にまわし、今回は、通話を記録するまでとします。 記録を残すだけで十分だという方は、そのまま使っていただいて結構です。 日本国憲法にも明記されていますので、ご存知だと思いますが、他人の通信を無断で傍受すると罪に問われます。決して、そういう目的には使わないでください。
まず、電話回線の受話アダプター(録音アダプターともいう)を使用して、コンピュータのマイク入力に接続します。 電話回線の受話アダプターには2種類あり、受話器に取りつけるものと、回線(ライン)に接続するものがありますので、 ご注意ください。回線(ライン)に接続するタイプは、通常の端子、受話器に取り付けるタイプは、やや小さめの端子です。 回線(ライン)に接続するタイプは、どこの電器店でも置いているわけではなく、受話器に取りつけるもののみ販売している店も多いです。 留守番電話を記録する場合、コードレス電話の場合、発信者番号通知情報(第十回で解説)も記録したい場合は、必ず回線(ライン)に接続するタイプを購入してください。 アダプターを、電話回線(今まで電話機と繋がっていたところ)と電話機の間に取り付け、 アダプターのピンジャックをコンピュータ(マイク端子)に接続することで、アナログ信号を録音できます。 アダプターは間違っても自作しようとなどせず、必ず、認証を受けた製品を利用しましょう。高くても、2000円程度です。
電話の録音においては、ノイズ対策が重要です。 マイク端子はマザーボードに搭載されているものではなく、USB経由にすると、ノイズが多少軽減されます。 ISDNでは、ターミナルアダプタ(TA)とコンピュータとのグランドを揃えることでかなり改善されます。 TAとコンピュータのアース端子を短絡させます。必ずしも接地しなくても良く、下手な方法で接地をすると雷サージなどで故障することがあります。 アナログの回線はよくわかりませんが、ADSLと兼用ならモデムにアース端子がついていると思います。 光回線では、オンライン時のノイズは、ほとんど入ってこないのですが、オフライン時に強力なピンクノイズが入ってくる場合があります。 VoIPアダプタにアース端子が見当たらないのですが、どうしてでしょう。 以下はそのノイズのスペペクトラムです。
![]()
ささやき声と同じ程度の信号レベルで、全帯域にわたってに分散しています。時期によっては、もっと酷い場合もあります。 このままでは通話の開始、終了の判断ができません。 300Hz から 3600Hzあたりにかけては音声に使われますため、バンドパスフィルタは使用できそうにありません。 そこで、ノイズフィルタを使用することにします。 下の図はノイズフィルタ使用後の無音時のスペクトラムです。この程度のレベルでしたら、通話の有無を検知できるようになります。
![]()
ノイズフィルタを使用すると、汚らしい不規則なノイズがきれいに消し去られ、通話記録のみが残ります。 といっても、フィルタをかけた後の音は使い物にならないほど音質が劣化します。エコーがかかったようになります。 そこで、ノイズフィルタは、通話の開始・終了の位置を求めるのみに使用し、出力は生データを分割したものとします。
音声関係の処理には、第十回に説明した、SoX、UNIX の wavrecコマンド(wavplayに同梱される軽量な録音プログラム。録音時のみの使用)を利用します。 SoXにも、録音機能(recコマンド)がありますが、かなり CPU リソースを消費します。 それでも録音時に SoX を利用したい場合は、shファイルの中にコメントアウトされていますので、参考にしてください。 以下に wavplay のインストール手順の一例を示します。そのほかの処理については、SoX が必要です。 SoXについては、第十回をご覧下さい。
FreeBSD
# cd /usr/ports/audio/wavplay
# make build; make install
Debian ubuntu
# sudo apt-get install wavplay
このプログラムでは、メールで送る際に巨大なファイルにならないよう、5分刻みに録音しています。 最小有音時間を 5秒としていますが、ファイルの最初と最後の30秒は、5秒未満でも記録します。 30秒間以上の無音部分はファイルに残しません。 今回は、メールの送信は行わず、通話を録音した WAV ファイルを所定のディレクトリに格納するまでといたします。 録音の処理は shell、その後の信号処理(録音されたファイルから、通話が行われている部分のみを取り出す)は perlで記述したプログラムをバックグラウンドで実行します。 規定値は/tmpに、voicemail-YYYYMMDD-hhmmss.wav(YYYYMMDD-hhmmssは年月日-時分秒)という名前のファイルが作成されます。 日時は実際の呼び出しのあった時刻です。
説明は不要かも知れませんが、バックグラウンドで実行(常駐)させる場合は、後ろに & をつけます。 起動時に自動的に実行する場合は、/etc/rc.local(存在しない場合は作成し、ファイルに実行権を付ける)などに次の行を追加してください。 ブルーの部分はこのプログラムを保存した場所です。
/path/to/voicemail.sh &
perlプログラムの 123行目あたりに、callerid.plを呼び出している部分がありますが、コメントアウトしています。 これで、第十回に掲載したプログラムを何に使うのか、お分かりいただけるでしょう。 発信者番号通知と同じく、全部あわせても 200行に満たないシンプルなものです。 下巻に、実際にメールの送信を行う部分を掲載いたします。 なお、通信記録を、合意に基づかず不特定多数に公開すると相手の権利(通信の秘密)を侵害することになります。 セキュリティ上の面から、ファイル共有ソフトを使用したり、フリーメールのアドレスに送るようなことは避けて下さい。
![]() Copyright © 2000-2009 Yourname, Inc. All Rights Reserved. |