その3

1h→UDPインターフェースの実装
1h→UDP+waveIn/Out+Chatアプリ(既存)の組み合わせ
1h→通信テスト/デバッグ


こんな感じで実装を進め、一応は形になりました。
が、ここで問題点や改善点が出てきました。

通信帯域の使用量

基本的に音声は相互通信なので、上り下り共に同じ量を使用します。

→音質によってユーザーに選択してもらうのが良さそうですね。
→→複数同士でやり取りすることを考えると一番低いレベルで共有するか、固定にする方が良いかも。

44,200hz*16bit*2ch = 160KB/sec
22,100hz*16bit*2ch = 80KB/sec
22,100hz* 8bit*2ch = 40KB/sec
11,050hz* 8bit*2ch = 20KB/sec

パケットの欠損

UDPなのでパケットは破棄される事があります。
今回の試験環境では半数が届かないという結果になりました。コーディングミスで送信バッファが破壊されてただけでした(´ω`;)


*対策*
分割数を少なくすれば欠損は減りそうですが、タイムラグが大きくなってしまいます。
再送要求は分割での時間単位に間に合うかどうかですね。
試験的にならば、Nagleアルゴリズムを使わないTCPで実装してみるのもありだと思います。
残りはホワイトノイズで補完する感じで。


符号化アルゴリズム

パケットが不正なものでないかを検出する為には暗号化する必要があります。
リアルタイムにエンコードデコードを繰り返すのでそれなりに軽く、速度が求められます。

無音検出アルゴリズム

また無音レベル時に帯域を節約する為にその検知を行う必要があります。
応用として、音声チャットで会議をした際に、無音時をカットした録音などができます。



今後はパケット欠損による音飛びの改善と送信バッファの符号化、無音検出をしていきたいと思います。