詳細に作り込んだ5本指のロボットハンドがミニチュアピアノを演奏する、完全なブラウザベースのデモを構築してください。画面上の指の動き、実際の鍵盤のストローク、生成される音、演奏タイミングは、因果関係に基づいて連動する必要があります。評価に使える時間内で、見た目の完成度が高く、インタラクティブなアプリケーションを提供してください。
1. 体験:精密にモデリングしたロボットハンド、関節可動する指、見える手首機構、MIDIノート60〜84に対応する25鍵のキーボードを配置した、全画面の3Dシーンを使用してください。黒鍵と白鍵の形状をリアルに再現し、鍵盤を個別に動かせるようにします。指先パッドと洗練されたマテリアルも含めてください。上方、演奏者側、指先のクローズアップ用カメラを用意します。ユーザーが再生を有効にした後、音声を同期再生してください。
2. 共通の音楽入力:MIDIノート番号を正準データとして使用してください。96 BPMで、次のイベントを再生します。表記は(開始拍、ノート、拍単位の長さ)です:(0,60,0.4)、(0.5,64,0.4)、(1,67,0.4)、(1.5,64,0.4)、(2,62,0.4)、(2.5,65,0.4)、(3,69,0.4)、(3.5,65,0.4)、(4,60,0.4)、(4.5,60,0.4)、(5,60,1)、(5,64,1)、(5,67,1)。最後の3つのイベントは同時に鳴るコードです。確立されたパーサーを使った標準MIDIファイルのインポートにも対応してください。
3. ハンド制御:指を個別に関節可動させ、手首も動かせるようにモデリングしてください。到達可能な指の割り当て、接近動作、押下、保持、離鍵、同音反復のアーティキュレーション、コード演奏を計画します。指は隣の鍵盤にめり込んだり、不自然に跳躍したりせず、正しい鍵盤に接触しなければなりません。逆運動学と関節可動域の制限を使用してください。計画した指の割り当てを表示し、個々の動きを手動で確認できるようにします。
4. 発音の因果関係:対応する鍵盤が、指の接触によって、仕様として明示した押下しきい値を通過した場合にのみノートオンイベントを生成してください。離鍵時にノートオフを生成し、チャタリングを防ぐためにヒステリシスを設けます。MIDIイベントは演奏計画の目標であり、独立した音声再生トラックではありません。幾何学的な接触に基づく鍵盤機構を採用しても構いませんが、その場合は明示してください。完全な接触ダイナミクスを使用しても構いません。MIDIイベントがスケジュールされたというだけで鍵盤が動いてはなりません。
5. タイミング:一貫した音楽クロックを使用し、実際に鍵盤がトリガーされたイベントを目標イベントと比較してタイムスタンプしてください。音声のスケジューリングとレンダリングのタイミングを考慮します。テンポ、トランスポーズ、再生、一時停止、再起動、ループ、スローモーションによる確認を操作できるようにしてください。一時停止または再起動時には、アクティブなノートを適切に解放する必要があります。再生速度を落としても、指、鍵盤、音声の同期を維持してください。
6. 診断:目標ノート、計画した指、実際にトリガーされたノート、発音開始タイミングの誤差を、整列したタイムライン上に表示してください。ノート抜け、余分なノート、音程違い、同音反復の失敗、ノートのスタックを報告します。各鍵盤をどの指先が押下しているかを示す接触検査オーバーレイを用意してください。単なる近似的なハンドアニメーションではなく、計画が成功したことを判別できる証拠を記録します。
7. 検証:メロディ、同音反復、最後のコードを個別に評価してください。誤ったノートや抜けをゼロにし、発音開始タイミングの95パーセンタイル誤差を50ミリ秒未満、最後のコードの発音開始時刻のばらつきを50ミリ秒未満にすることを目標とします。目標を達成できなかった場合も、実測値を報告してください。指の駆動を無効にするテストを用意します。スコアの進行は続いても構いませんが、押されていない鍵盤からノートが生成されてはなりません。
8. 納品:Three.js、TypeScript、適切な音声API、確立されたパーサーまたは数値計算ライブラリを使用してください。実行可能なアプリケーション、ソースコード、再現可能な音楽フィクスチャ、アセットまたは生成スクリプト、起動手順を納品します。ブラウザ音声、操作系、カメラビュー、デスクトップおよびモバイルレイアウト、繰り返し再生を検証してください。表示するパフォーマンス上の主張はすべて、実測した挙動に基づくものとします。