VoiceChatについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Lag

VoiceChatについて

#1

投稿記事 by Lag » 13年前

初投稿させていただきます。

現在C言語の課題でWinsockを使ったTCP/IP通信をやっています。
主に作っていたのはDXライブラリを使ったゲームの通信なのですが、次はVoiceChatを作成してみたいと思っています。
しかし、VoiceChatの音声に関してはどのような処理と通信を行えばいいのかまったく検討がつきません。

自分なりに考えたことでは、マイクで抽出した音声をWAVEファイル等で保存してそれを相手側に送り再生させるの・・・か?
とか思ったのですが、それだとSkypeみたいなリアルタイムで声が届かない、ですよね。

ご解答お願いします。(説明不足などありましたらすいません)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: VoiceChatについて

#2

投稿記事 by softya(ソフト屋) » 13年前

やったことがないのですが、低レベルのWin32APIで音声をバッファに貯めた後、バッファをパケットとしてUDPで送ればskypeのようなチャットが可能になると思います。
tcp/ipは遅延が問題になるのでskype並の転送レートにするのは難しいと思ってください。

「音声の入力」
http://wisdom.sakura.ne.jp/system/winapi/media/mm7.html
「PCM の基本」 出力
http://wisdom.sakura.ne.jp/system/winapi/media/mm5.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Lag
記事: 1
登録日時: 13年前

Re: VoiceChatについて

#3

投稿記事 by Lag » 13年前

求めていた物とぴったりな解答でした
ありがとうございます!

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: VoiceChatについて

#4

投稿記事 by Dixq (管理人) » 13年前

ボイスチャットだけなら大丈夫かもしれませんが、ビデオチャットでは、無圧縮データで音声を送ると転送速度の問題が生じる場合があります。
サンプリングはデフォルトで44.1KHzで行っている場合が多いかもしれませんが、音声ではそこまで必要ない場合が多いです。
電話のサンプリング周波数は8KHzだと思うので、音質を気にしなければそこまで落としても大丈夫でしょう。
8KHzの根拠はというと・・

http://www.apec.aichi-c.ed.jp/project/j ... es/oto.htm

人間の声はせいぜい4KHz程度です。
サンプリング定理より
http://ja.wikipedia.org/wiki/%E6%A8%99% ... A%E7%90%86
取得したい周波数の2倍以上でサンプリングする必要がありますので、電話は8KHzとなっています。

また、年齢と共に低下しますが、人間の可聴領域は20KHzまでです。
CDが44.1KHzなのは人間が聞こえる限界の周波数を録音出来る数値となっています。

後、ビデオチャットの際、ビデオがカクツクのは使用していてそこまでストレスになりませんが、
音声がブツブツ切れるのは非常にストレスになります。
そこで、音声はある程度バッファにためてから再生する必要があります。
無線等ではデータがきちんと届かない場合があるので、届いたり届かなかったりすることを想定する必要があります。
そこで、250ms位の音声をバッファにためて、250sm位遅延させてから再生するとよいでしょう。

「電話を通して合唱しようとしてもできない」という話が有名であるように、音声通信には遅延が付き物であるのはその為だと思います。
ちなみに私がビデオチャットを作った時は(試行錯誤してないので、適切な値じゃないでしょうが)、映像はmotinoJPEG、音声は16KHz-16ビットサンプリング、250msのバッファで行いました。

閉鎖

“C言語何でも質問掲示板” へ戻る