【Asterisk】電話回線網でアイマスの音楽を流してみた。+音質向上化も。


今回は誰得なんですがAsteriskを使って電話回線網に音楽を流してみました。

電話番号は【  】です。通信量は各自ご負担ください。
↑サーバー移管した時に消えちゃいました。すみません!

とはいへ回線交換方式ではなくパケット交換方式のIP電話なんでLinuxがあれば簡単に作れます。
まぁ無理やりそれっぽく言うと擬似的なストリーミングみたいなやつですね。

実装方法

簡単にIP電話を構築する際に必要な予備知識を簡単に書いておきます。

イメージ図

簡単なDFD(DataFlowDiagram)みたいなみたくないな、、、まぁそんなもんです。
ネットワークでのパケットとして伝送するので既存のインフラで完結しコスト削減が図れます

VoIPに関するプロトコル

RTP

IP電話(VoIP)を実現する技術としてパケット送信には、RTP(Real-time Transport Protocol)というシンプルなプロトコルが用いられます。

SIP

SIPとはSession Initiation Protocolの略でシグナリングを行うプロトコルです。
RTPで音を送り合うためには、事前に相手との情報のやりとりが必要で、「電話」の機能を実現するためには、発信や着信、応答、切断といった「呼制御」と呼ばれる処理が必要になります。これを「シグナリング」または「呼制御」と呼び、SIPはそれを実現するためのプロトコルです。
なのでIP電話を使うにはFusion IP SMATalkや050plus,050freeなどのSIPプロバイダとの契約が必要です。

※以上の内容は以下の記事にも書いてあります。

流す音楽

次に流す曲を決めます。といってもいろいろめんどくさい権利問題があるので、今回はアイドルマスターの家庭用版にあったTOWNっていう名前のBGM(俗に言うてってってーです)がニコニ・コモンズにあったのでそれを使います。

※二次利用などの利用条件も遵守しています。

実践

050freeに登録

ブラステルイントラネットさんが提供しているSIPプロバイダの050freeを今回は使います。発信は有料ですが受信のみなら無料です。

SIPアカウント設定でIDとパスワードを取得。

音声データ変換

VoIPでは高音質での送信は難しいです。以下の要件があります。

  • サンプリング周波数:8000Hz
  • 量子化ビット数:16bit
  • モノラルステレオ不可!

相当音質は悪いですよね…
以下のコマンド一発で上記フォーマットで変換してくれます。

apt install sox
sox voice.wav -r 8000 -c 1 voice_8k.wav

Asterisk設定

aptでインストールするだけでOKです。

apt install asterisk

設定

以下のように設定ファイルを変更します。
sip.confでは接続情報を登録します。UserIDとPasswordは適宜置き換えてください。

/etc/asterisk/sip.conf
[general]
allowguest=no
disallow=all
allow=ulaw
allow=gsm
nat=auto_force_rport,auto_comedia
; Register
register => UserID:Password@softphone.spc.brastel.ne.jp/100
[brastel]
type=peer
context=brastel
host=softphone.spc.brastel.ne.jp

次にextensions.confで着信時の処理を書きます。PlayBackで音声ファイルを指定する際拡張子は省いてください!

/etc/asterisk/extensions.conf
[brastel]
exten => 100,1,Answer
exten => 100,n,PlayBack(/var/lib/asterisk/voice/voice_32k)

これで設定完了。あとは

systemctl restart asterisk

で再起動したらつながるはず…です。

電話番号はー

↑サーバー移管した時に消えちゃいました。すみません!
是非かけてみてください。10年前のXboxアイドルマスター感が味わえると思います。

音質向上

とはいえサンプリング周波数8000Hzなので超音質悪いです。
G.722のような、HDボイスと呼ばれる広帯域コーデックを使えば音質向上が図れます。
ここではサンプリングレートを8KHz→32KHzへ変換し、Asterisk の playback コマンドで流セル用改善します。

sox voice.wav -r 32000 -c 1 voice_32k.wav

拡張子は.sln32にしてさっきと一緒。HD Voiceに対応していれば若干高音質になります。
以上。

【ブログ】https://0115765.com/
【Twitter】@tomox0115