- 2010-06-15 (火) 10:52
- Mumble 1.2 | TeamSpeak3 | VoIP | 戯言
最近, Mumble 1.2やTeamSpeak3 で採用されるようになっている音声コーデック Celt (ケルト)について少々書いてみようと思います。
私は音声コーデックに関する専門知識を持ち合わせていないので,内容が間違っていたり,深いと頃までつっこめていないかもしれません. あまり鵜呑みにしないようにお願いします.
Celt は,ボイスチャットの世界では有名な Speex と同じ開発者が開発している音声向けコーデックです.Speex は Ventrilo や TeamSpeak2, Mumble 1.1 などで採用されているコーデックで古くからボイスチャットユーザなら耳にしたことがある音声コーデックだと思います.
アルゴリズム的な遅延は Speex では 30ms から 34ms かかるのに対して, Celt は 3ms から 8ms と非常に低い遅延で音声を処理できます.低遅延性を追求するMumbleなどは, Mumble 1.2 から Celtを採用しています. ネットワークその他の遅延もありますが,単にコーデックの能力のみを考えた場合にはCeltは最良のコーデックであるようです.
また,Speexが音声のみをターゲットにしていたのに対して, Celtは音楽向けに開発されていたコーデックであるVobiris とSpeexの間をとるコーデックとして設計されているようです.つまりは,音質を高めつつボイスチャットとして使えるようにと設計されているみたいです.
より明瞭で聞き取りやすく, 低遅延なボイスチャットを求めるのであればCeltの方が良さそうですね.
ただ, Celt は開発中の音声コーデックであり, 各バージョンごとに互換性もないので実装方法によっては残念なことになります.
Celt の歴史的なものをまとめてみました.
バージョン | |
0.6 | Mumble 1.2αやTeamSpeak3αが採用し始める* |
0.6.1 | Mumble 1.2βが採用 TeamSpeak3βが採用* |
0.7 |
Mumble 1.2 の正式コーデックとして採用 |
0.7.1 |
Mumble 1.2.1で採用 |
0.80 |
現在開発中 |
1.0 |
はるか将来にリリース予定 |
* TeamSpeak3 がどのバージョンのCeltを使っているかは不明なので haruの推測です
TeamSpeak3でのCeltの実装
TeamSpeak3β初期における Celtの実装は非常に残念なもので, バージョンの差異なんて気にせずに処理されるので場合によってはまともに会話できないなんてこともあるようです.
チャンネルごとにコーデックを設定できるようになっているので,使いたい場合は有効にすればよいです.
また, TeamSpeak3 Client beta15 までの時点で採用していたCeltのバージョンが0.7.0なので, パケット損失に対する耐性が非常に低いです.そんなバージョンのCeltを10~20KiB/sなんて高ビットレートで使おうものならパケットロスにより恐ろしい結果になることは,想像に難くないでしょう.(Ventrilo 2, TeamSpeak2, Mumble 1.1 などはせいぜい2KiB/s 程度です).
TeamSpeak3 Client beta16以降は, Celt 0.7.1 を採用してビットレートも6~13KiB/sと抑えてかなり実用的になっているようです. ですので, TeamSpeak3 での Celt はbeta16以降のクライアントを全てのユーザが使えない状況では使わない方が良いでしょう.
TeamSpeak3 Client beta21 では一度あたりに送信する音声フレーム長が調整できるように改良されましたが、最小値が20msでありMumbleの10msには及ばない感じです。
また、Celtを使っていて音声がおかしくなる場合は、クライアントの接続情報から音声チャンネルのパケット損失が何%になっているかを確認しましょう。これが高い場合は、できるだけCeltの音質を下げて見ましょう。
Mumble 1.2のCelt
Mumble 1.2はサーバ上にいるユーザ側が持っているCeltのバージョンをチェックして互換性の問題が起きないように処理しているので, 大きな問題は今のところ発生していません.
Mumble 1.2 の正式な音声コーデックとして採用されているので特別な設定をしなければ通常はCeltが選択されます。(うちのサーバのようにサーバ側で帯域を絞っている場合はSpeexが選択されます。)
初期にパケット損失による音質劣化の問題が Mumble 1.2.0 で発生しており, パケット損失に対する処理を施された Celt 0.71 を Mumble 1.2.1 で採用して対処しています.Mumble 1.2の出始め頃にあった「人の声がロボット声になる」という問題は,パケット損失によるものです.
Mumble はCeltをうまく実装していますが, それでも音質をあげすぎるとパケットロスにより残念なことになります.Mumbleの開発者もCeltの高ビットレート設定はローカルネットワーク用の設定であるとしています。
どうしても, Celtを高ビットレートで使いたいと言う場合はオプションの「TCPモードを使う」をONにすると理論上はパケットロスは起こらないはずですので, 音質は良くなると思います.その代わり遅延が大きくなると思いますがね。
(ボイスチャットは通常はUDPという, パケットロスが起こっても見なかったことにする通信手続きを使います. それに対して通常の通信ではTCPというパケットロスが起きたらパケットを送り直す通信手続きが使われます.パケットロスが起きていないかや起きた場合に送り直す処理が余分にかかるため遅延が大きくなります.)
Mumble 1.2.3 ではバージョン 0.8.0 のCeltが採用される予定です. Celt 0.8.0 を体験するには全てのユーザがMumble 1.2.3 を利用している必要があります.これは、Mumble では各ユーザが持っているCeltのバージョンを調べて一番バージョンが低い人に合わせているからです.
まだまだ開発中であり将来性はある
TeamSpeak3 ユーザだとCeltはあまり良い印象を受けないかもしれないが, まだまだ開発中のコーデックであり,現時点をもって駄目なコーデックだと思わないで欲しいです. Celt を採用しているTeamSpeak3ですらβですからね.
スポンサード リンク
- Newer: TeamSpeak3 Client beta23-pre
- Older: TeamSpeak3 サーバのアップデート方法