Cambios recientes

2010-07-06
2010-07-05
2010-06-20
2010-06-10

Últimos archivo liberados

This Project Has Not Released Any Files

Wiki Guide

Sidebar

概要

現実を再現した音声会話を実現するには以下の機能を持つ必要がある。

  • 距離によって音の大きさが変わる。(距離による音の減衰)
  • 人の向きによって音の大きさが変わる。(音の指向性の実現)

距離と方向による音量

等音量の距離

等音量の距離.PNG
等音量の距離
声は正面の方が障害物が少ないという事から、正面に近いほど音が大きくなると考えることができる。 正面ほど音量が大きくなるということから、同じ音量となる点をl1、l2、l3とすると、 l1>l2>l3と考えられる。 そして、それはl1やl2の間でも成り立つと考えると、
音量結論.PNG
音量結論
となる。 図のように正面から角度が付くほど(0度~180度)音量が小さくなり、極座標で表すと、
音量グラフ極座標.PNG
音量グラフ
のようになる。 音量の下がり方は直線なのか、そうでないのかは分からないが、単純減少であると考えられる。 また、音は距離の2乗に反比例して減衰する。 現状直線で減少するものと考えると、角度と距離による音量は以下のようになる。

音量 = v - (v-v')/180 * 角度

音の合成

 世界に存在する人の数:m人
 一回の音声の合成に必要な処理量:t

音声会話.PNG
音声会話
図の小文字は各個人の音量である。

重要な項目に音の合成には多くの処理時間が必要となります。
音の合成を実現するために二つの大きな方法が存在します。
一つはサーバで合成を行いクライアントに送信する方法。

  • メリット  :ネットワークのトラフィックを低減できる。
  • デメリット :サーバの負荷の増大。

二つめは必要な情報をクライアントに送ってクライアントで合成する方法。

  • メリット :サーバの負荷の低減。
  • デメリット:ネットワークトラフィックの増大。
  • 処理量   :O(t・m)
  • トラフィック:O(m2)

サーバで合成を行いクライアントに送信する方法

各個人に送る音声は以下の計算となる。
3人の場合

|a'|   |a          + b / l_ab^2 + c / l_ac^2 |
|b'| = |a / l_ab^2 + b          + c / l_bc^2 |
|c'|   |a / l_ac^2 + b / l_bc^2 + c          |

4人の場合

|a'|   |a          + b / l_ab^2 + c / l_ac^2  + d / l_ad^2 |
|b'| = |a / l_ab^2 + b          + c / l_bc^2  + d / l_bd^2 |
|c'|   |a / l_ac^2 + b / l_bc^2 + c           + d / l_cd^2 |
|d'|   |a / l_ad^2 + b / l_bd^2 + c / l_cd^2  + d          |

重要なのは音声の合成手法である。
音声会話はプログラミングしたことないのでそこまで詳しくないが(現在調査中)、 複数音の合成なら一回のループで行うことが可能なのではないかと推測している。
その場合、サーバで行う必要のある処理は、m人分の音合成となる。
つまりO(m)、各個人の合成時間が一人増えるごとに増える場合はO(m)となり合わせてO(m2)となる。
しかし、あまりに多くの人とは同時に会話することはまれであると仮定すると、 同時会話数を制限しても問題が少ないと考えられる。 同時会話数を制限することで、後者のO(m)を定数と考えることができ、全体でもO(m)に押さえることが可能となる。

以上をプロトタイプの作成を通して確認する必要がある。

 (現在音声合成を調査中)