Ultima Symphony >
合奏研究報告 -パッチ5.08 >詩人演奏 合奏精度向上手法の提案研究:
Ultima Symphony代表執筆:
Aster Almayard2018/09/16
執筆時のパッチ:4.36
皆さんおはようございます。Ultima Symphony です。
本稿は、合奏に関するレポートです。
ご興味とお時間、ご都合よろしければ読んでやってください~。
※ 括弧 [ ] はリファレンス(記事最下部に記載)です。お急ぎの方は「5. おわりに」でまとめておりますので、そちらを!2018/09/27 追記
計算の誤りを発見しましたので、修正しております。
申し訳ありません。
2019/02/04 追記
高精度合奏の提案および実証のレポートを執筆済みです。
本稿の提案手法よりも精度の高い合奏を行う手法を紹介しています。
2019/08/24 追記
更に計算の誤りがあり、修正しました。
2019/11/05 追記
一連の合奏研究(-パッチ5.08)の最終報告はこちらです。
2020/10/12 追記
簡易同期に関する統計計算の解釈に誤りがあり、考察を修正しました。1. はじめに吟遊詩人には楽器演奏機能があります。
現在、ハープ、グランドピアノ、スチールギター、ピチカート、
フルート、オーボエ、クラリネット、ピッコロ、パンパイプでの演奏が可能です。
そして迫るパッチ 4.4 では打楽器が追加されることが明らかになりました。
このように多彩な音色での演奏が可能となっており、
合奏も注目されつつある分野となっております。
ここで、ネットワーク通信を伴うオンラインゲームの特性上、
演奏時のラグは避けられない問題です。
先の調査 [参考1] では、合奏者の立場で約 4.3 秒、
観客の立場で約 2.2 秒のラグが生じる結果になっています。
このラグの問題に対応するため、わたし達は
戦闘開始カウントダウンを用いた合奏手法を考案し、三重奏を行いました [参考2] 。
しかし考案した手法の内容に対して、合奏の精度は低いように感じられました。
その原因は、わたし達が仮定していた
演奏音遅延モデルが誤っていたことだったのです。
それは [参考3] のコミュニケーションで発覚しました。
詳しくは後述しますが演奏入力にランダムなズレが付与するのです。
それが [参考2] の三重奏の精度が良くなかった原因であると考えられます。
戦闘開始カウントダウンで演奏タイミングを調整しても
ランダムなズレが付与されてしまうのです。
それではそのズレはどの程度のもので、どのような分布なのでしょう。
本稿では、その調査結果の報告と、合奏精度向上手法の提案を行います。
2 で演奏音遅延モデルを [参考3] を踏まえて修正します。
3 でランダムなズレの調査結果および考察を記載します。
それを踏まえて 4 で手法を提案し、5 でまとめます。
つまり──演奏でランダムなズレが生じるので
それについて調べて合奏の精度を上げようということです!2. 演奏音遅延モデルの修正わたし達が [参考1, 2] を通じて仮定していた
下記、図1の演奏音遅延モデルですが、
先述の通り、そもそも誤りを含んでおりました。
図1 演奏音遅延モデル。
赤線 S : 演奏者の入力からサーバーの演奏データの受信までの時間
黒線 P : サーバーで演奏データが処理される時間
緑線 R : サーバーの演奏データの送信から聴き手への出力までの時間
[参考3] にてご提供いただいた情報によりますと、
現在楽器演奏機能は下記の振る舞いをすると考えられています。
(1) サーバーの演奏音の処理が平等ではない。
これは、演奏音をサーバーに同時に届けるよう調整を重ねても、
どうやらサーバーの受信寄りの処理の時間が平等ではないようなのです。
つまり、入力毎にランダムなズレが発生することになります。
ただし、2 ~ 3 秒程度の範囲ではその誤差は一定の値になるそうです。
この範囲で休まずに演奏を続けたら、問題なく聞こえるのです。
(2) 聴衆に届く演奏音の時間差は平等である。
演奏者2名の演奏音が、ある聴き手に同時に届いた場合、
別の聴き手にも同時に届くということです。
どうやらサーバーの送信寄りの処理の時間は平等と考えてよさそうです。
すなわち、図1の黒線が示すサーバーの処理時間 P が
上記 (1) の通り平等ではないのです。
それが先の三重奏 [参考2] での精度の低さの原因と考えられます。
[参考1] では「ドレミファ」を一定間隔で繰り返し鳴らす実験を行いましたが、
その間隔は (1) の許容範囲となる 2 ~ 3 秒の間に収まっていたのでしょう。
とはいえ、先述の──合奏者の立場で約 4.3 秒、
観客の立場で約 2.2 秒のラグが生じるという結果は
(1) の影響が考慮されていないというのは事実です。
そこでこれらを考慮し、図2の通りにモデルを修正しました。
図2 修正版演奏音遅延モデル。
赤線 S : 演奏者の入力からサーバーの演奏データの受信までの時間
青線 D : サーバーで演奏データが処理される時間その1
黒線 P : サーバーで演奏データが処理される時間その2
緑線 R : サーバーの演奏データの送信から聴き手への出力までの時間
D は (1) のランダムなズレを表すものとします。
P はサーバーの処理時間のうち、平等な部分を表します。
サーバーの負荷状況や周囲のプレイヤー人数などが遅延に関わる場合、
この P がそれを表すものとします。
また S と R はクライアントの回線やマシンに依存するでしょう。
すなわち、演奏音の入力に関して言えば
S + D を調整することが目的になるでしょう。
つまり──
今まではランダムなズレを考慮していなかったので
ここからはちゃんと考えてきますよということです!3. ランダムなズレ D の調査3.1 戦闘開始カウントの遅延安定性調査[参考2] では戦闘開始カウントの遅延安定性調査を実施しましたが、
それは修正前のモデル──すなわち、
ランダムなズレ D の存在が考慮されていませんでした。
戦闘開始からカウントが 0 になるまでの時間を C で表すと、
[参考2] で観測したのは
C + D
の各々の差分ということになり、
C の差分の安定性を見るという目的は達成されていませんでした。
ですが、ランダムなズレ D が存在する以上、
C のみに関する観測を行うのは、リモートの体制では困難です。
そこで、以下の図3が示す体制で、
リアルでの二画面録画データをご提供いただきました [参考4] 。
図3 戦闘開始カウントの遅延安定性調査体制。
第一プレイヤーと第二プレイヤーがパーティを組み、
第一プレイヤーが戦闘開始カウントをかけます。
そしてカウントが 0 になる様子の二画面録画をしていただいたのです。
図4に記載の文字は以下を表します。
C_1:カウントの開始から第一プレイヤーでカウントが 0 になるまでの時間
C_2:カウントの開始から第一プレイヤーでカウントが 0 になるまでの時間
9回 の測定の結果、
第二プレイヤーのカウントの方がわずかに遅く、
C_2 - C_1
の標本平均は 130 [ミリ秒] で、
不偏分散は 556 [ミリ秒 × ミリ秒] でした。
測定値のヒストグラムから、
この母集団分布は正規分布だろうと推測できました。
また不偏分散の値から、
戦闘開始カウントの遅延は
非常に安定していると判断できました。
つまり──
戦闘開始カウントは合奏の合図に使えるほど安定しているのです!3.2 ランダムなズレ D の調査戦闘開始カウントの遅延の安定性が保証されたところで、
いよいよランダムなズレ D の調査を行います。
ランダムと聞いてはいますが、一体どのような分布をするのでしょう。
調査は、以下の図4の体制で行いました。
図4 ランダムなズレ D の調査体制。
第一演奏者と第二演奏者がパーティを組、
第一演奏者が戦闘開始カウントをかけます。
そしてカウントが 0 になった瞬間に各々音を鳴らしてもらい、
それを観測者が録音計測しました。
図4に記載の文字は以下を表します。
C_1:カウントの開始から第一演奏者でカウントが 0 になるまでの時間
S_1:演奏データがプレイヤー1の入力からサーバーに到達するまでの時間
D_1:第一演奏者の演奏音のランダムな処理時間
P:サーバー内で演奏音が処理される時間
R:演奏音がサーバーから観測者に届き出力されるまでの時間
C_2, S_2, D_2 も同様の意味を持ちます。
観測者が測定する音の時間差は下記で表されます。
(C_2 + S_2 + D_2 + P + R) - (C_1 + S_1 + D_1 + P + R)
= (C_2 - C_1) + (S_2 - S_1) + (D_2 - D_1)
100回 の測定の結果、
その標本平均は 1836 [ミリ秒] で、
不偏分散は 39293 [ミリ秒 × ミリ秒] でした。
また測定値のヒストグラムから、
この母集団分布は正規分布だろうと推測できました。
下記、図5は該当のヒストグラムになります。
図5 ランダムなズレ D の調査結果。
100回測定のヒストグラム。
つまり──
ランダムなズレは山のような分布をしているということです!
これは嬉しいことなのです!3.3 ランダムなズレ D 考察同時間帯に同環境で測定したことから
S_2 - S_1 は変化しないだろうと判断できます。
したがって 3.2 の測定データのばらつきは、
戦闘開始カウントの遅延と、
ランダムなズレ D に起因すると考えられます。
ここで D の母平均は 0 [ミリ秒] であると仮定します。この仮定は 2 で記した修正版演奏音遅延モデル上
問題ないものです。
D の母集団分布もまた正規分布と考えられ、
その母分散を sigma^2 と書くと、
正規分布の性質より以下が導かれます。
(sigma_c)^2 + 2 × sigma^2 = (sigma')^2
ここで、(sigma_c)^2 は C_2 - C_1 の母分散、
(sigma')^2 は (C_2 - C_1) + (S_2 - S_1) + (D_2 - D_1) の母分散です。
(sigma_c)^2 および (sigma')^2 の
95% 信頼区間は、それぞれ下記の通りです。
253 [ミリ秒 × ミリ秒] ≦ (sigma_c)^2 ≦ 2039 [ミリ秒 × ミリ秒]
30291 [ミリ秒 × ミリ秒] ≦ (sigma')^2 ≦ 53025 [ミリ秒 × ミリ秒]
上記関係式より、
14126 [ミリ秒 × ミリ秒] ≦ sigma^2 ≦ 26386 [ミリ秒 × ミリ秒]
となり、
標準偏差にして、
118 [ミリ秒] ≦ sigma ≦ 163 [ミリ秒]
となります。これによって、
一人の演奏者の、ある一連の演奏音を考えたときに
そのランダムなズレは、大体
163 × 1.96 × 2 ≒ 639 [ミリ秒]
の範囲に収まるであろうと推測できます。
つまり──
ソロ演奏に関して影響するランダムなズレの範囲は
大体 0.7 秒ぐらいと期待できる、ということです!4. 合奏精度向上手法の提案4.1 メトロノーム調整値カウントダウン方式 [参考2] での合奏を試みる場合のお話をします。
同方式は、戦闘開始カウントダウンのカウント 0 に合わせて
メトロノーム──あるいは同等の機能を有するものを動かし始めて、
それに合わせて各々が演奏することで合奏を実現するものです。
個人環境依存のズレ(図1, 図2 中の S)は第三者測定により求められ
その分メトロノームの動作開始を早める──または遅めるといった
調整を施すことによって個人環境依存のズレに対応します。
ここで、ランダムなズレ D が発生するために、
上記方法では不十分であるというお話でしたので、
測定を複数回行うことで対応します。
今回の測定から、
D は正規分布するだろうと判断できました。
ここで第三者が測定できるのは以下の値です。
(C_2 + S_2 + D_2 + P + R) - (C_1 + S_1 + D_1 + P + R)
= (C_2 - C_1) + (S_2 - S_1) + (D_2 - D_1)
ここで、実験 3.2 と同様に、
添え字 1 関連のパラメーターは、戦闘開始カウントダウンをかける演奏者、
添え字 2 関連のパラメーターは、他の合奏メンバーです。
三重奏以上の場合も、戦闘開始カウントダウンをかける演奏者を基準として
同様の測定を行います。
第三者測定の回数を n とし、
その平均を M で表します。
すると M によって
メトロノームの動作開始が調整された後の
演奏音の時間差は
(C_2 + S_2 + D_2 + P + R) - (M + C_1 + S_1 + D_1 + P + R)
= (C_2 - C_1) + (S_2 - S_1) + (D_2 - D_1) - M
これは平均値が 0 [ミリ秒] で、分散が
(sigma_c)^2 + 2 × sigma^2 + ( (sigma_c)^2 + 2 sigma^2 ) / n
= ( (sigma_c)^2 + 2 × sigma^2 ) × ( 1 + 1 / n )
= (sigma')^2 × ( 1 + 1 / n )
の正規分布に従います。
(sigma')^2 の 95% 信頼区間
30291 [ミリ秒 × ミリ秒] ≦ (sigma')^2 ≦ 53025 [ミリ秒 × ミリ秒]
を考慮すると、標準偏差は
174 × √( 1 + 1 / n ) [ミリ秒] ~ 230 × √( 1 + 1 / n ) [ミリ秒]
の正規分布になります。
すなわち、ある一連の旋律の二重奏を考えたときに
そのランダムなズレは、大体
230 × √( 1 + 1 / n ) × 1.96 [ミリ秒]
≒ 451 × √( 1 + 1 / n ) [ミリ秒]
の範囲に収まるだろう、と推測できます。
さて、問題の √( 1 + 1 / n ) の部分ですが、
下記、図6が √( 1 + 1 / n ) のグラフになります。
図6 √( 1 + 1 / n ) のグラフ。
n = 10 で約 1.05 となり、
451 × 1.05 ≒ 474 [ミリ秒]
と 10回 の測定でも 500ミリ秒 の範囲に
ズレを抑えることができると期待できます。
また、グラフからも 10回 以上の測定をしても
ほとんど結果が変わらないことが分かります。
ゆえに、
第三者測定は 10回 で十分でしょう。三重奏の場合は、
戦闘開始カウントダウンをかける第一奏者を基準として
他二名の奏者に対して同じことがいえますが、
三重奏以上の場合は、例えば第二奏者が前に 500ミリ秒 ズレて
第三奏者が後に 500ミリ秒 ズレる──
というケースが起こり得ます。
したがって、演奏音が収まるであろう範囲は 1秒 となります。
四重奏以降も、同様に、大抵
1秒 の範囲に収まるだろう、と推測できます。
つまり──
合奏前に第三者測定を 10回 することで、
ランダムなズレの分布の山頂を狙おうということです!4.2 合奏精度向上手法4.1 をまとめ、以下の手法を提案します。
戦闘開始カウントダウンをかける演奏者を基準として
各合奏メンバーに対して 10回 ずつ第三者測定を実施します。
その 10回 測定の標本平均を算出し、
その分だけメトロノームの動作開始を調整します。
そして、カウントダウン方式 [参考2] による合奏を開始するのです。
各パートの旋律の時間差は、二重奏の場合、
大抵 500ミリ秒 以内に収まる、と推測できます。
三重奏以上の場合
大抵 1秒 以内に収まる、と推測できます。
つまり──
上記の確率で合奏のズレがある程度押さえられるということです!4.3 合奏精度向上手法 懸念点この手法は、(sigma')^2 の不変性を前提としています。
(sigma')^2 が、状況──例えばサーバーの負荷などによって
変化するのだとしたら、各確率に影響が出てしまいます。
第三者測定の回数 10 も高精度を求めて調整することになるかもしれません。
つまり──
まだ裏づけが取れてないことは残ってるよ、ということです!5. おわりに先の報告 [参考1, 2] においては、
仮定に誤りが含まれていたことが発覚しました [参考3] 。
これを踏まえて、演奏音遅延モデルを修正し (図2) 、
発生が確認されているランダムなズレ D の振る舞いを調査しました。
その結果 D は正規分布に従い、ソロ演奏の場合には
ズレの範囲は、およそ 0.7秒 と推測できました。
そして 4.2 で合奏精度向上手法を提案しました。
合奏の場合、推測できるズレの範囲は、
二重奏の場合、およそ 0.5秒範囲、
三重奏以上の場合、およそ 1.0秒範囲、でした。
さて、二重奏に関して 0.5秒 ──
あるいは三重奏以上に関して 1.0秒 ──
このように期待された時間差範囲ですが、
合奏においては十分致命的なものと考えられます。
これにどのように対応していくのか──
これを前提とした場合、
合奏に適した譜面はどのようなものなのか──
といった研究に繋がるのでしょうか。
ともあれ、パッチ4.4 が迫っていますね!
楽器演奏機能も楽器が増える他、
細かな部分で仕様変更があるかもしれません。
情報収集および実験・考察に励んで参りたいと思います。
参考資料等[1]
Ultima Symphony, 『
詩人演奏 ラグ調査結果 ~合奏可能性~』.
[2]
Ultima Symphony, 『
詩人演奏 合奏の実現 ~戦闘開始カウントの利用~』.
[3] RosS'o さん (
S'olih Tia さん,
Rocca Freiheit さん) とのコミュニケーション.
[4]
Yucari Southerly さんよりデータご提供.
以上です!
お読みいただきありがとうございました!!!
Ultima Symphony >
合奏研究報告 -パッチ5.08 >
詩人演奏 合奏精度向上手法の提案