Qt Brynhildr(仮称) の その後のこと
雑用が忙しく、「サウンドがうまく再生できない」、といったまま2ヶ月放置していましたが、思いつく限りの修正を行っても、改善しなかったので…Qtの機能のみを使うという方針を諦めました…
具体的には、Qtのネットワークの仕組みに関して、です。
Brynhildrのパブリックモードでは3つのソケットを使って、それぞれキーボード/マウスの制御情報、グラフィックス情報、サウンド情報を通信します。Qtのネットワーク通信機構では、QTcpSocketというクラスを利用してやりとりを行うのですが、このクラスを用いた通信の仕組み自体がどうやらマルチスレッドに対応していないそうです。マルチスレッドで実装すると正しいデータが受信できません(;ω;)
シングルスレッド内でsignal/slotを用いた3つの通信を同時に行うとやはり通信スピードが間に合いませんでした。サウンドの再生バッファを常に満たせるほどのスピードがでないのです…結果プチノイズがヒドイのです。
最終決断として、ネットワーク通信だけネイティブな機能(WindowsではWinSock)を使うことにしました。
3つの処理はそれぞれQtのスレッド(QThread)を継承して別々に実装します。その中での通信は直接WinSockを利用します。ネットワーク処理は1つのクラスに閉じ込めたので、Linuxのような他のプラットフォームの場合はここだけを変更すれば大丈夫だと思います。
綺麗に音が鳴ると気持ち良いですね…遅延もzeroshikikaiのレベルにはなっていると思います。
Windows 8.1 update 版 Qt Brynhildr (音出るよ、キーボード、マウスもO.K.版) テスト動画
細かい未実装処理の実装とソースコード整理をしないと…
Windows版パッケージを作って公開、その後ソースコード公開でしょうかね…いつになるのだろう…
« スレッドの変遷のメモ その2 | トップページ | キーボードコントロールを実装しました その5 »
コメント