
楽器演奏を一人で複数の楽器パート(複数のPCのキーボード)を同時に演奏(キー入力)する必要があり、手がいくつもあれば良かったのですがそう言うわけにもいかないのでそれぞれのPCにUWSCを入れてそれぞれのPCのキー入力を自動かつ同時に行おうと考えました。
リズムを正確に刻むために遅延を指定し、以下の様なスクリプトを作成しました。
Sleep(3000/1000)
KBD(VK_9,DOWN,0/1000)
Sleep(3000/1000)
KBD(VK_9,UP,0/1000)
KBD(VK_OEM_MINUS,DOWN,0/1000)
Sleep(3000/1000)
KBD(VK_OEM_MINUS,UP,0/1000)
etc…
以下は同じようなスクリプトがキー入力毎にあるだけなので省きます。
このスクリプトは正常に動作すれば
再生開始。
3秒待機。
9キーを押す。
3秒待機。
9キーを離す。
MINUSキーを押す。
3秒待機。
MINUSキーを離す。
といった動作になると思います。
しかしこのようなスクリプトを試験的に複数のPCで全く同じ内容で複製したものをそれぞれのPCのUWSCに同時に実行させたところ開始直後は完璧に同時に入力しますが時間経過とともに入力タイミングのずれが生じ、ずれが顕著になっていくことが確認できました。
全く同じスクリプトを使用しているなら通常全く同じ動作、遅延の処理が行われるはずですが、このような入力の時間差が発生してしまう原因がわかりません。
具体的な実行環境をお伝えしますと
先程お伝えした複数のPCとはVMware仮想マシンを使って複数のWindows10を立ち上げ、複製のキーボード、UWSCがあるかのようにしています。
動作させている仮想マシンは3〜5台で、
稼働時のCPU使用率50%、メモリ使用率75%、GPU使用率70%、その他ディスク、ネットワーク等使用率0〜1%と、スクリプトの処理時間等に特別ボトルネックになっているものはないように思えます(ド素人の考察です
様々な原因が考えられ一概に断定することはできませんが、スクリプトの記述方法が間違っていたりそもそもUWSCでミリ秒の遅延を扱うのは不向きだったり、実行環境に不備がある可能性などの指摘がございましたら教えていただけませんか。
一応上記のスクリプトに対する補足を述べておきます
わざわざ1/1000で割っているのはスクリプト記述の元となったLogicoolゲーミングソフトウェアのスクリプトであるluaファイルから流用して、本来ミリ秒である数値をUWSCのSleep(秒)をミリ秒に変換して実行できる様に機械的に翻訳したためです。
またKBDコマンドの遅延指定を0にして代わりにSleepコマンドを打ち込んでいるのも同様にluaファイルにあったSleepの遅延の情報をそのままUWSCが流用できる様に翻訳したためです。
No.3ベストアンサー
- 回答日時:
何か勘違いされているのでは?あくまでもキーボード操作が大前提ですよ。
>基準時間をキー入力で設定することはできませんか。
できません。
仕方がないので調整はSleepで行いますが、残念ながら状況により大幅に書き方が異なりますので、提示は困難です。
もこさんのスクリプトでは、誤差を吸収する部分がないので、ズレ始めると止まりません。
調整は細かくしても逆効果で、ズレ始める直前に影響のない[少ない]部分でまとめて行うのが効果的。
提示は出来ないものの基本的な考え方には同じで、実際の経過時間 - 理想の経過時間[絶対時間] をどこかで調整する。
基準時間をキー入力〜というのはキー入力の基準となる時間を作れないかという意図でした。誤解を招くような文章でした。
プログラミング経験が全くなく経過時間を取得できることに気づかなかったのですが誤差の求め方を教えていただいてはっと気がづきました。GetTime() + G_TIME_ZZ で経過時間をミリ秒まで計測して理想時間との差を計算に組み込むことができました。
慣れないことだったので四苦八苦してずれをなくす工夫と、キー入力が膨大にあるため誤差の計測と調整をしてくれるようなスクリプトを自動で入力してくれるようなシステム作る方法をひたすら探っていました。プログラムの勉強をし続けてようやく、瞬間的なズレは完全には無くならないものの大きなズレは大きく軽減ことができ、無事管弦楽のハーモニーを美しく響かせることに成功しました。本当にありがとうございます。
No.2
- 回答日時:
逆です。
必ずズレます。UWSC以外でも結果は同じです。通常は問題になるような事ないです。ある一定の時間内に誤差を抑えたいなら基準時間[絶対時間]を設定し、それに対して誤差を調整するしかないでしょう。
No.1
- 回答日時:
逆です。
必ずズレます。UWSC以外でも結果は同じです。通常は問題になるような事ないです。ある一定の時間内に誤差を抑えたいなら基準時間[絶対時間]を設定し、それに対して誤差を調整するしかないでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- デスクトップパソコン 通話が遅延します 1 2023/06/18 02:36
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- マウス・キーボード キーボードのCaps Lockキーと変換キーの挙動がおかしくなりました。 4 2022/09/04 22:44
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Windows 10 MicrosoftIMEでトラブル、助けてください m(_._)m 4 2023/05/16 14:11
- UNIX・Linux ubuntuサーバーを久々に再起動したらネットにつながらなくなった。 1 2022/06/06 16:21
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlに特化したエディタご存じ...
-
perl初心者 「カウンタ」
-
Perlスクリプトについて
-
頭にperlとつけないと実行できない
-
dieによる終了コード(ステータ...
-
メールサーバーの負荷分散方法...
-
「デバイスは PRN を初期化でき...
-
URI.pmの使い方を教えてくださ...
-
JAVAを実行できるHTTPクライアント
-
if等判定文での定数、変数の記...
-
Windowsでのモジュールのインス...
-
メモリの呼び方で
-
なぜか実行されません
-
「置くだけ」で使えるperlモジ...
-
フラッシュでperl
-
メールアドレスについて
-
perlをバージョンアップしたら...
-
例外処理のフローチャートの記...
-
ラズパイ4からGmailへの...
-
Perlでの改造方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlのライセンス
-
vbs: オブジェクトがコレクショ...
-
powershellで関数名を変更する...
-
ADサーバにおけるログインID,PC...
-
Cからシェルを起動し返り値をハ...
-
VBScriptでCurrentDirectoryを...
-
cygwinでcshが認識されず困って...
-
awkの処理速度を改善したい
-
Perlスクリプトで文字化けして...
-
UWSCのスクリプトにラグが発生...
-
Perl Debugger のエラ-
-
perlスクリプト内の変数を別のC...
-
PostgreSQLへPerl Scriptからユ...
-
ディスクの空き容量を求める(W...
-
perl でクッキーの状態を調べる
-
VBSを利用して、IEのタブを自動...
-
rshを使うスクリプトをバックグ...
-
VBSで自動ログインについて
-
perlスクリプトのブラウザURLか...
-
スペースを含むファイルの実行...
おすすめ情報
なるほど、時間の誤差は常に発生してしまうものなのですね。コンピュータに対する理解が浅くて申し訳ないです。ごめんなさい。
基準時間を設定してキー自動でを押すような動作を実現するにはどうすれば良いでしょうか。
例えば音楽を複数の端末で、同じ曲を流すと同じリズム、音色を同時に鳴らしてくれるはずで、ずれがあることは(少なくとも体感できるレベルのずれは)無いと思います。
そのような基準時間をキー入力で設定することはできませんか。