SKYDIV Desktop Client で実装されている機能(オーディオリダイレクト)の仕組みについての技術紹介です。
リダイレクトについての基本的な内容は、前回の記事を参照してください。
前回の記事
前回の記事では、独自方式の概要、背景、メリット等について記載していましたが、今回は、オーディオリダイレクトの仕組みについてもう少し細かく記載します。
オーディオリダイレクトの流れ
全体像は下記のようになっています。
上図の通り、マイクとスピーカーでデータの流れる方向が逆になり2方向あります。
マイクは、クライアント側の音声入力をリモート接続先に届ける方向です。
スピーカーは、リモート接続先の音声出力をクライアント側で再生する方向です。
音声データ転送の仕組み
音声デジタルデータの概念
音声はアナログな情報ですが、コンピュータで扱う音声データはデジタルデータになります。
音声のアナログ信号を一定の間隔で測定して数値化したものが音声のデジタルデータになります。
マイクを通してこの変換が行われます。数値化した値(音声サンプル)を並べて図にすると、下図のような波形のデータになります。
転送処理のイメージ
音声データの転送は、音声のデジタルデータを短い時間単位に区切って細切れにして連続的に転送します。
送信元でキャプチャして、転送して、転送先で順次再生する、ということを繰り返します。
これは、以下のようなイメージになります。
- 1~6は細切れにした音声データを表しています。実際の音声としてはつながっていて1~6の順番でつながっているイメージです。
オーディオバッファ
音声を安定させるために、音声データをためるバッファが必要です。
例えばマイクデバイスであれば、利用中になっている間、音声データの転送先でシステムから続きの音声データを要求する呼び出しが繰り返し行われますので、それに対して、再生バッファにあるデータを順次渡していくイメージです。
このバッファは、音声データを一時的に蓄えることで、ネットワークの遅延や不安定さをカバーして、スムーズな音声再生を可能にするクッションのような役割を果たします。
転送先で再生されるまでの遅延が少し増えてしまうのですが、その代わり、安定したユーザー体験につながります。
このバッファがない場合、わずかなネットワークの遅延があっただけで、音が途切れるなどの使用感になってしまいます。
音声データの調整
音質を変えるような加工・調整は行っていませんが、以下のような調整が必要です。
- デバイスが対応しているサンプリングレートを、SKYDIVにて設定されたレートに変換する調整
- SKYDIVの利用設定に合わせたビットレートへの変換
- 遅延したサンプルデータが一気に着信してバッファがあふれた際等のバッファの調整
- フェードイン/フェードアウト
これは、例えば、何らかの理由で続きのデータが無くなってしまった場合に、波形データを緩やかに無音に推移させる処理になります。
これをせずに音声を突然途切れさせると、ぶちっという音(クリックノイズ)等の不快な音につながってしまいます。
まとめ
以上、全体の流れと、その中でのトピックを紹介しました。
この他にも、仮想デバイスの管理や、デバイスの着脱や切り替えへの対応も苦労するポイントだと思います(突然引き抜いたとき、再度接続したとき、システムのデフォルトスピーカーが変わったとき…など)。
以上、SKYDIV 独自方式のオーディオリダイレクトについての技術紹介でした。