その6(ご質問スレッド)

ご質問をいただいたのでそのお返事をヽ(・ω・)ノ

> 1.audio_io.cpp内でwfx.nSamplesPerSecの値を44.1[kHz]もしくは22.1[kHz]としていますが、
> なぜ44.1[kHz]ではないのでしょうか?

skypeやラジオ、電話では確か11,025[Hz]が使われています。CD音質は44,100[Hz]です。


音質を下げる意味は、データ量の軽減です。
44,100[Hz]では、44100*2(16bit)*2(stereo)で172kb/sの帯域が必要になります。
実際には相互通信ですから、単純計算でも344kb/sの通信を常にする事になります。


そこで周波数を22,050[Hz]、ビットレートを8bitと半分にすると86kb/sと、なんとデータ量が4分の1になるのです。
実際は圧縮しますから、データ量は更に小さくなります。
今回のボイスチャットでは音楽のストリーミング再生を実装したかったので、高音質モード(44,100[Hz])を用意しました。


データ量に関する解説は音声チャットを作る話その3にもありますので、ご覧になってください。



> 2.audio_io.cpp内の処理はある程度読み進めて分かったのですが、
> マイクから受け取った音声の処理がどこで行われているのかが分かりません。
> また、そのデータがどの変数に保存されているのかも分かりませんでした。

waveIn系APIが、登録したバッファに登録した順に書き込んでくれています。
各バッファが満タンになるとその都度通知が来るので、それを読み出して符号化して送信しています。
APIの説明は音声チャットを作る話その2にありますので、MSDNライブラリと併せてご覧になってください。


*通知はAudioIO::waveInProcがコールバック関数として呼ばれます。




> 3.私は通信接続方法に関して全く知識が無いので参考にしたサイトを教えていただけないでしょうか?

UDP通信に関するご質問ということでしょうかヽ(・ω・)ノ?


UDPはかなり単純でして、相手のポートめがけてパケットを送信するだけです。
届かなかったり受信されなければパケットは破棄されます。
ぐぐってみた所、下記のサイトが分かりやすいと思いました。


ボイスチャットの…ということでしたら、参考にしたサイトはありません。
というより、公開してる人を見たことがなかったので今回公開してみましたヽ(・ω・*)ノ



68user's page
http://x68000.q-e-d.net/~68user/net/

geekなぺーじ
http://www.geekpage.jp/programming/linux-network/udp.php


ご参考になりましたでしょうかヽ(・ω・)ノ?