(57)【要約】【課題】より少ないコンピュータ資源で、外部装置におけるシーケンスに係るイベントの命令を出力するタイミングを制御する。【解決手段】第１遅延時間および当該第１遅延時間と異なる第２遅延時間を取得し、現在時刻から第１遅延時間および第２遅延時間がそれぞれ経過した場合の、シーケンス上の予想位置である第１位置および第２位置を取得するステップと、第１位置および第２位置を用いて、現実時刻からシーケンス上の位置を得るための近似関数を決定するステップと、複数のイベントのうち対象となる対象イベントについて、現在時刻から当該対象イベントに対応する遅延時間が経過した第１時刻を近似関数に代入して得られる第３位置から、第１時刻から基準時間が経過した第２時刻を近似関数に代入して得られる第４位置までの範囲に、当該対象イベントが位置する場合に、当該対象イベントを発生させる命令を外部装置に出力する。【選択図】図１０
2018146782.tif 000002
【特許請求の範囲】
【請求項１】
外部装置における複数のイベントのシーケンスを示すデータを取得するステップと、
前記複数のイベントについて前記外部装置がイベントの命令を受けてから当該イベントを発生させるまでの遅延時間に関し、第１遅延時間および当該第１遅延時間と異なる第２遅延時間を取得するステップと、
現在時刻から前記第１遅延時間および前記第２遅延時間がそれぞれ経過した場合の、前記シーケンス上の予想位置である第１位置および第２位置を取得するステップと、
前記第１位置および前記第２位置を用いて、現実時刻から前記シーケンス上の位置を得るための近似関数を決定するステップと、
前記複数のイベントのうち対象となる対象イベントについて、現在時刻から当該対象イベントに対応する遅延時間が経過した第１時刻を前記近似関数に代入して得られる第３位置から、前記第１時刻から基準時間が経過した第２時刻を前記近似関数に代入して得られる第４位置までの範囲に、当該対象イベントが位置する場合に、当該対象イベントを発生させる命令を前記外部装置に出力するステップと
を有するタイミング制御方法。
【請求項２】
前記外部装置は自動演奏楽器であり、
前記複数のイベントは、前記自動演奏楽器における発音を制御するためのイベントである
ことを特徴とする請求項１に記載のタイミング制御方法。
【請求項３】
前記外部装置は、複数の物理ユニットを含み、
前記複数の物理ユニットのうち一の物理ユニットに関する第１イベントおよび第２イベントの組が繰り返し発生することが予想された場合、当該第２イベントの命令を出力するタイミングを早めるステップ
を有する請求項１または２に記載のタイミング制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のイベントのシーケンスを外部装置に実行させる場合に、そのイベントの命令を出力するタイミングを制御する技術に関する。
【背景技術】
【０００２】
人間の演奏者と自動演奏楽器とによる合奏等をするためのシステムにおいては、人間が楽譜上のどの位置を演奏しているのか推定し、さらにこの推定に基づいて自動演奏楽器が次の音を演奏するタイミングを予想する処理が行われる。例えば特許文献１には、演奏の音響信号から、その演奏が楽譜上でどの位置にあるかを推定する技術が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−７９１８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
自動演奏楽器等の外部装置は、命令を受けてからイベントを実行するまでの間に遅延がある。この遅延も加味して演奏者の演奏と同期を取るには、指定された時刻における楽譜内位置を予想する必要がある。特に、イベントに応じて遅延の値が異なるような場合は、イベント毎にこの予想を行わなければならず、予想に多大なコンピュータ資源が必要であるという問題があった。
【０００５】
これに対し本発明は、より少ないコンピュータ資源で、外部装置におけるシーケンスに係るイベントの命令を出力するタイミングを制御する技術を提供する。
【課題を解決するための手段】
【０００６】
本発明は、外部装置における複数のイベントのシーケンスを示すデータを取得するステップと、前記複数のイベントについて前記外部装置がイベントの命令を受けてから当該イベントを発生させるまでの遅延時間に関し、第１遅延時間および当該第１遅延時間と異なる第２遅延時間を取得するステップと、現在時刻から前記第１遅延時間および前記第２遅延時間がそれぞれ経過した場合の、前記シーケンス上の予想位置である第１位置および第２位置を取得するステップと、前記第１位置および前記第２位置を用いて、現実時刻から前記シーケンス上の位置を得るための近似関数を決定するステップと、前記複数のイベントのうち対象となる対象イベントについて、現在時刻から当該対象イベントに対応する遅延時間が経過した第１時刻を前記近似関数に代入して得られる第３位置から、前記第１時刻から基準時間が経過した第２時刻を前記近似関数に代入して得られる第４位置までの範囲に、当該対象イベントが位置する場合に、当該対象イベントを発生させる命令を前記外部装置に出力するステップとを有するタイミング制御方法を提供する。
【０００７】
前記外部装置は自動演奏楽器であり、前記複数のイベントは、前記自動演奏楽器における発音を制御するためのイベントであってもよい。
【０００８】
前記外部装置は、複数の物理ユニットを含み、前記複数の物理ユニットのうち一の物理ユニットに関する第１イベントおよび第２イベントの組が繰り返し発生することが予想された場合、当該第２イベントの前記シーケンス上の位置を早めるステップを有してもよい。
【発明の効果】
【０００９】
本発明によれば、より少ないコンピュータ資源で、外部装置におけるシーケンスに係るイベントの命令を出力するタイミングを制御することができる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態に係る合奏システム１の構成を示す図。
【図２】楽譜内位置ｓ（ｔ）と現実時刻ｔとの関係を例示する図。
【図３】演奏命令の出力するタイミングを決定する処理を示す概念図。
【図４】関連技術に係る演奏命令の出力処理を示すフローチャート。
【図５】タイミング制御装置１０の機能構成を例示する図。
【図６】遅延データの内容を例示する図。
【図７】出力部１５の機能構成を例示する図。
【図８】タイミング制御装置１０のハードウェア構成を例示する図。
【図９】タイミング制御装置１０の動作の概要を例示するシーケンスチャート。
【図１０】出力部１５における処理の詳細を例示するシーケンスチャート。
【図１１】出力部１５における処理の詳細を例示するフローチャート。
【発明を実施するための形態】
【００１１】
１．概要
図１は、一実施形態に係る合奏システム１の構成を示す図である。合奏システム１は、人間の演奏者Ｐと自動演奏楽器３０とが合奏を行うためのシステムである。すなわち、合奏システム１においては、演奏者Ｐの演奏に合わせて自動演奏楽器３０が演奏を行う。合奏システム１は、タイミング制御装置１０、センサー群２０、および自動演奏楽器３０を有する。合奏システム１および演奏者Ｐにおいて、合奏する楽曲は既知である。すなわち、タイミング制御装置１０は、合奏する楽曲の楽譜を示すデータを記憶している。
【００１２】
演奏者Ｐは楽器を演奏する。センサー群２０は、演奏者Ｐの挙動に関する情報を検知するものであり、この例では、演奏者Ｐの前に置かれたマイクロフォンを含む。マイクロフォンは、演奏者Ｐにより演奏される楽器から発せられる演奏音を集音し、その演奏音を音信号に変換して出力する。タイミング制御装置１０は、センサー群２０から供給される音信号を実時間的に解析し、（１）楽譜位置の推定、（２）自動演奏楽器３０による次の発音時刻の予想、および（３）自動演奏楽器３０に対する演奏命令の出力、の３つの処理を行う。すなわち、タイミング制御装置１０は、演奏者Ｐの演奏に追従して自動演奏楽器３０が演奏するタイミング（次の自動イベントのタイミングの一例）を制御する装置である。楽譜位置の推定は、演奏者Ｐおよび自動演奏楽器３０による合奏が楽譜上のどの位置にいるかを推定する処理である。発音時刻の予想は、楽譜位置の推定結果を用いて、自動演奏楽器３０が次の発音を行うべき時刻（タイミング）を予想する処理である。演奏命令の出力は、自動演奏楽器３０に対する演奏命令を、予想された発音時刻に応じて出力する処理である。自動演奏楽器３０は、タイミング制御装置１０により供給される演奏命令に応じて自動的に（すなわち人間の操作無しに）演奏を行う楽器であり、一例としては自動演奏ピアノである。
【００１３】
まず、自動演奏楽器３０に対する演奏命令の出力処理における技術的な問題点について検討する。検討に先立ち、前提条件を明示する。自動演奏楽器３０における演奏を制御するための楽曲データは、Ｎ個（Ｎは自然数）のイベント（例えばＭＩＤＩイベント。より具体的には、ノートオンイベントおよびノートオフイベント等）から構成される。これらＮ個のイベントは、それぞれ、楽譜内（楽曲内）で進行する時間軸上の位置に配置される。楽譜内の時間軸は、現実時間とは異なる単位、一例としてはＭＩＤＩにおけるティックで表される。以下、楽譜内における時間軸上の位置を楽譜内位置ｓという。楽曲データに含まれるＮ個のイベントのうちｎ番目（ｎは、ｎ≦Ｎを満たす自然数）のイベントを、以下、単にイベントｎという。楽譜内位置ｓは、イベントｎおよび実時刻ｔに応じて決まる（すなわち、楽譜内位置ｓはｎおよびｔの関数である）。イベントｎとの関係を議論するときは、楽譜内位置ｓがｎの関数であることを強調するため楽譜内位置ｓ（ｎ）と記載する。現実時刻ｔとの関係を議論するときは、楽譜内位置ｓがｔの関数であることを強調するため楽譜内位置ｓ（ｔ）と記載する。
【００１４】
１曲の楽曲を通じて完全に同一のテンポで演奏をした場合、楽譜内位置ｓと現実時刻ｔとの関係は線形である。しかし実際には、音楽表現上の意図により、または演奏者Ｐの技術的な問題により、楽曲を通じてテンポが同一のままであり続けることはあり得ない。
【００１５】
図２は、楽譜内位置ｓ（ｔ）と現実時刻ｔとの関係を例示する図である。図２の例では、楽曲内の時間領域Ｄ１では相対的にテンポが速くなっており、時間領域Ｄ２ではテンポが遅くなっている。楽譜内位置ｓ（ｔ）の現実時刻ｔとがこのような関係にあるという前提の下、演奏命令の出力処理における技術的な問題点を説明する。
【００１６】
図３は、演奏命令の出力するタイミングを決定する処理を示す概念図である。図３は、演奏の途中の状態を示しており、このときｔ＝ｔｃである。演奏の途中であるので、ｔ≦ｔｃの範囲ではｓ（ｔ）は確定しているが、ｔ＞ｔｃの範囲ではｓ（ｔ）は未確定であり、この範囲のｓ（ｔ）はあくまで予測値である（図では破線で示される）。
【００１７】
ところで、自動演奏楽器３０は、演奏命令が入力されると直ちに演奏音を出力することが理想である。しかし、実際には、演奏命令が入力されてから演奏音が出力されるまでの間には遅延がある。この遅延は、例えば、自動演奏楽器を構成する物理ユニット（発音機構。例えばピアノにおいて弦を打つハンマー）の駆動に起因する。例えば自動演奏楽器３０がピアノである場合、自動演奏楽器３０は、演奏命令を受けてからハンマーを駆動して打弦する。ハンマーを駆動し始めてから打弦されるまでの時間が遅延に相当する。この例からわかるように、遅延は一定ではなく、イベントに応じて異なる。例えば、同じ鍵を打つ場合でも、打鍵速度が遅いとき遅延は長く、打鍵速度が速いとき遅延は短くなる。あるいは、同じ打鍵速度でも鍵によって遅延は異なる。そこで、イベントｎに対する遅延を遅延Ｔ（ｎ）と表す。
【００１８】
遅延Ｔ（ｎ）があるため、ｓ（ｔｃ）＝ｓ（ｎ）となった瞬間に自動演奏楽器３０に演奏命令を出力するのではイベントｎを演奏者Ｐの演奏と同期させることはできない。イベントｎを演奏者Ｐの演奏と同期させて発生させるには、タイミング制御装置１０は、イベントｎの楽譜内位置ｓ（ｎ）に対応する現実時刻ｔｎに対し、時刻（ｔｎ−Ｔ（ｎ））に演奏命令を出力する必要がある。このように、自動演奏楽器３０に対する演奏命令の出力処理とは、楽曲データ、時刻ｔにおいて再生すべき楽譜内位置ｓ（ｔ）、および遅延Ｔ（ｎ）が入力された（与えられた）場合に、演奏者Ｐの演奏と同期したタイミングで演奏音が出力されるように、適切なタイミングで演奏命令を出力する処理をいう。
【００１９】
実際には、タイミングの判断はある一定の時間間隔毎に行われる。この時間間隔をループ間隔ｄＴという。例えば、イベントｎ１に対しては（図３（Ａ））、現在時刻ｔｃに対して、時刻（ｔｃ＋Ｔ（ｎ１））から時刻（ｔｃ＋Ｔ（ｎ１）＋ｄＴ）に対応する楽譜内位置ｓ（ｔｃ＋Ｔ（ｎ１））からｓ（ｔｃ＋Ｔ（ｎ１）＋ｄＴ）の範囲Ｒ１内にイベントｎ１が配置されていた場合に、タイミング制御装置１０は演奏命令を出力する。あるいは、イベントｎ２に対しては（図３（Ｂ））、現在時刻ｔｃに対して、時刻（ｔｃ＋Ｔ（ｎ２））から時刻（ｔｃ＋Ｔ（ｎ２）＋ｄＴ）に対応する楽譜内位置ｓ（ｔｃ＋Ｔ（ｎ２））からｓ（ｔｃ＋Ｔ（ｎ２）＋ｄＴ）の範囲Ｒ２内にイベントｎ２が配置されていた場合に、タイミング制御装置１０は演奏命令を出力する。以下、この処理をより具体的に説明する。
【００２０】
図４は、関連技術に係る演奏命令の出力処理を示すフローチャートである。ステップＳ９１において、タイミング制御装置１０は、時刻ｔを初期化する。この例では、ｔ＝０に初期化される。これ以降、図４のフローは、ループ間隔ｄＴで繰り返し実行される（ループ処理される）。ステップＳ９２において、タイミング制御装置１０は、楽曲データに含まれるイベントのうち、対象となるイベント（以下「対象イベント」という）ｎｔを決定する。
【００２１】
ステップＳ９３において、タイミング制御装置１０は、対象イベントｎｔについて次式（１）の条件が満たされるか判断する。
【数１】
2018146782.tif 000003
式（１）の条件は、現在時刻から遅延Ｔ（ｎｔ）が経過した後の現実の時刻に対応する楽譜内位置ｓ（ｔ＋Ｔ（ｎｔ））から、次回の処理時における楽譜内位置ｓ（ｔ＋ｄＴ＋Ｔ（ｎｔ））までの間に、対象イベントｎｔが配置されているか否かを判断するための条件である。式（１）の条件が満たされると判断された場合（Ｓ９３：ＹＥＳ）、タイミング制御装置１０は、処理をステップＳ９４に移行する。式（１）の条件が満たされないと判断された場合（Ｓ９３：ＮＯ）、タイミング制御装置１０は、処理をステップＳ９５に移行する。
【００２２】
ステップＳ９４において、タイミング制御装置１０は、イベントｎｔを実行させるための演奏命令を自動演奏楽器３０に出力する。
【００２３】
ステップＳ９５において、タイミング制御装置１０は、楽曲データに含まれるすべてのイベントに対して処理が行われたか判断する。まだ対象イベントとなっていない処理が存在すると判断された場合（Ｓ９５：ＮＯ）、タイミング制御装置１０は、処理をステップＳ９２に移行する。ステップＳ９２において、タイミング制御装置１０は、対象イベントを次のイベントに更新する。すべてのイベントに対して処理が行われたと判断された場合（Ｓ９５：ＹＥＳ）、タイミング制御装置１０は、処理をステップＳ９６に移行する。
【００２４】
ステップＳ９６において、タイミング制御装置１０は、ステップＳ９２の処理を開始してから時間ｄＴが経過したか判断する。時間ｄＴが経過していないと判断された場合（Ｓ９６：ＮＯ）、タイミング制御装置１０は、時間ｄＴが経過するまで待機する。時間ｄＴが経過したと判断された場合（Ｓ９６：ＹＥＳ）、タイミング制御装置１０は、経過時間を計測するタイマーおよび対象イベントをリセットし、処理を再びステップＳ９２に移行する。
【００２５】
このように、演奏命令の出力タイミングを決定するためには、各イベントにつき２回ずつ、指定された時刻における楽譜内位置ｓを計算（予測）する必要がある。楽曲データにＮ個のイベントが含まれている場合、ループ間隔ｄＴの間に合計で２Ｎ回、楽譜内位置ｓ（ｔ）を計算しなければならない。既に説明したように、楽譜内位置ｓ（ｔ）は、演奏者Ｐの演奏に応じて動的に変化する。例えば、演奏者Ｐが演奏のテンポを速めたり遅くしたりすると、それに合わせて楽譜内位置ｓ（ｔ）は動的に変化する。一般に楽譜内位置ｓ（ｔ）を予測するには多くのコンピュータ資源を消費する。例えば、シミュレーションまたはインタプリタ言語を経由して楽譜内位置ｓ（ｔ）を予測には、無視できない負荷がプロセッサにかかる。また、図４のフローを実行している間にも、演奏者Ｐの演奏に応じて楽譜内位置ｓ（ｔ）は動的に変化し得るので、楽譜内位置ｓ（ｔ）を事前に計算しておくこともできない。本実施形態は、このような、タイミング制御装置１０のプロセッサに多大な計算負荷がかかるという問題に対処する。
【００２６】
上記の問題に対処するための技術的手段の一つは、楽譜内位置ｓ（ｔ）をより計算負荷の少ない関数で近似することである。この例では、次式（２）により楽譜内位置が線形近似される。
【数２】
2018146782.tif 000004
式（２）を用いることで、式（１）の条件は次式（３）のように書き替えられる。
【数３】
2018146782.tif 000005
なお、式（３）における係数ａおよびｂは、ループ（すなわち図４のフローのステップＳ９２〜Ｓ９５の処理）の前に計算される。例えば、遅延Ｔ（ｎ）の最小値Ｔｍｉｎおよび最大値Ｔｍａｘを用いて、ｓ（ｔ＋Ｔｍｉｎ）およびｓ（ｔ＋Ｔｍａｘ）の２点補間により線形近似すると、楽譜内位置ｓはループ間隔ｄＴの間に２回のみ計算すればよい。すなわち、計算負荷を１／Ｎにすることができる。
【００２７】
図３において、式（２）の近似による近似直線Ｌａを図示する。近似直線Ｌａは、ｔ＝ｔｃ＋Ｔｍｉｎおよびｔ＝ｔｃ＋Ｔｍａｘにおけるｓ（ｔ）の値を用いて得られたものである。この例で、ＴｍｉｎおよびＴｍａｘは、第１遅延時間および第２遅延時間の一例である。ｓ（ｔ＋Ｔｍｉｎ）およびｓ（ｔ＋Ｔｍａｘ）は、現在時刻から第１遅延時間および第２遅延時間がそれぞれ経過した場合の、シーケンス上の予想位置である第１位置および第２位置の一例である。ｓ（ｔｃ＋Ｔ（ｎｔ））は、現在時刻から対象イベントに対応する遅延時間が経過した第１時刻を近似関数に代入して得られる第３位置の一例である。ｓ（ｔｃ＋Ｔ（ｎｔ＋ｄＴ））は、第１時刻から基準時間が経過した第２時刻を近似関数に代入して得られる第４位置の一例である。
【００２８】
なお、係数ａおよびｂは毎ループ計算されなくてもよい。例えば、複数のループに１回、係数ａおよびｂが計算されてもよい。一例として、ｄＴ＝１０ｍｓの場合に係数ａおよびｂを１００ｍｓ毎に計算（更新）されてもよい。
【００２９】
上記の問題に対処するための別の技術的手段は、考慮するイベントの数を絞り込むことである。具体的には、タイミング制御装置１０は、楽曲データを読み込む際、すべての演奏時刻ｓに対し、その近傍のイベントの集合Ｅ（ｓ）を取得し、これを保持する。その上で、ステップＳ９２において対象イベントｎｔの候補となるイベントｎを、楽曲データに含まれるすべてのイベントではなく、
【数４】
2018146782.tif 000006
に限定する。ここで、本来、集合Ｅ（ｓ（ｔ））には、
【数５】
2018146782.tif 000007
を満たす楽譜位置ｓに配置されたイベントが含まれる必要がある。式（５）のmax_t(s(t+dT+Tmax)-s(t))の項は、次回の処理時における楽譜内位置ｓ（ｔ＋ｄＴ＋Ｔ（ｎｔ））に相当する楽譜内時間軸上の距離の最大値である。しかし、最大値ｍａｘ＿ｔを計算するのは煩雑である。そこで、ここでは、ｍａｘ＿ｔ（ｓ（ｔ＋ｄＴ＋Ｔｍａｘ）−ｓ（ｔ））を、マージンを考慮した固定値ｓｍに置換し、
Ｅ（ｓ）＝｛楽譜内位置ｓからｓ＋ｓｍの間に含まれるイベント｝      …（６）
とする。
【００３０】
また、集合Ｅ（ｓ）を、「ｓを含む一定の区間ｋ＝（ｂｋ，ｅｋ）」の間で同一の集合Ｆ（ｋ）になるようにし、保持すべき情報を減らすことができる。例えば、
（ｂ１，ｅ１）＝（０，１００）
（ｂ２，ｅ２）＝（１００，２００）
Ｆ（１）＝｛楽譜内位置０から１００＋９６０の間に含まれるイベント｝
Ｆ（２）＝｛楽譜内位置１００から２００＋９６０の間に含まれるイベント｝
とすると（この例でｓｍ＝９６０である）、
Ｅ（ｓ＝０）＝Ｅ（ｓ＝１）＝…＝Ｅ（ｓ＝９９）＝Ｆ（１）
Ｅ（ｓ＝１００）＝Ｅ（ｓ＝１０１）＝…＝Ｅ（ｓ＝１９９）＝Ｆ（２）
となるため保持すべき情報を低減することができる。
【００３１】
なお、既に処理済みのイベントが再度実行されることがないように（同じ音符が２度演奏されることがないように）、対応する演奏命令を出力済のイベントは、対象イベントの候補から除外される。これは、例えば、処理済／未済を示すフラグをイベント毎に保持することにより実現される。
【００３２】
本実施形態によれば、楽譜内位置ｓ（ｔ）の計算（予想）を呼び出す回数が１／Ｎに低減される。そのため、楽譜内位置ｓ（ｔ）の計算負荷を低減することができる。また、計算が呼び出される回数が低減されるため、楽譜内位置ｓ（ｔ）の計算を外部スクリプト言語またはゲームエンジンなど、比較的処理が遅い言語で実装することもでき、タイミング制御装置１０の拡張性を増大させることができる。さらに、楽譜内位置ｓ（ｔ）が簡単な関数で表せないもの（例えばディープラーニングで用いられるような多層ニューラルネット）、または解析的に記述できないもの（例えば、カオス系の解）で記述されていた場合であっても、比較的効率的にシーケンスを制御することができる。
【００３３】
２．構成
図５は、タイミング制御装置１０の機能構成を例示する図である。タイミング制御装置１０は、入力部１１、記憶部１２、推定部１３、予想部１４、出力部１５、および表示部１６を有する。入力部１１は、センサー群２０から音信号の入力を受け付ける。記憶部１２は、各種のデータを記憶する。この例で、記憶部１２は、楽曲データおよび遅延データを記憶する。楽曲データは、演奏者Ｐと合奏する楽曲の楽譜を示すデータである。楽曲データは、少なくとも、発音タイミングおよび音高を示す情報を含んでいる。発音タイミングは、楽譜において設定された単位時間（一例としては３２分音符）を基準として表される。楽曲データは、発音タイミングおよび音高に加え、音長、音色、および音量の少なくとも１つを示す情報を含んでもよい。一例として、楽曲データはＭＩＤＩ（Musical Instrument Digital Interface）形式のデータである。
【００３４】
図６は、遅延データの内容を例示する図である。遅延データは、自動演奏楽器３０における遅延を示すデータである。既に説明したように、自動演奏楽器３０において、演奏命令が入力されてから演奏音が出力されるまでの間には遅延がある。この遅延は一定ではなくイベントに応じて異なる。この例では、遅延データはテーブルの形式を有する。このテーブルには、演奏命令により駆動される鍵および演奏命令に含まれるベロシティ（発音を制御するためのパラメーターの一例）の値と対応付けて、それぞれ独自の遅延の値が記録される。
【００３５】
推定部１３は、入力された音信号を解析し、いま楽譜上のどの位置が演奏されているかを推定する。推定部１３は、まず、音信号からオンセット時刻（発音開始時刻）および音高に関する情報を抽出する。次に、推定部１３は、抽出された情報から、演奏がいま楽譜上のどの位置にいるかを示す確率的な推定値を計算する。推定部１３は、計算により得られた推定値を出力する。この例で、推定部１３が出力する推定値は、発音位置ｓ、観測ノイズｑ、および時刻ｔｃを含む。発音位置ｓは、前述の楽譜内位置ｓに相当し、発音された音の楽譜上の相対的な位置（例えば、５小節目の２拍目）を示す。ノイズｑは、発音位置の観測ノイズ（確率的な揺らぎ）を示す。発音位置ｕおよびノイズｑは、楽譜において設定された単位時間を単位とする。時刻Ｔは、発音が観測された時刻（実時間上の位置）を示す。
【００３６】
予想部１４は、推定部１３から供給される推定値を観測値として、自動演奏楽器３０による次の発音時刻の予想を行う。発音時刻の予想にはどのようなアルゴリズムが用いられてもよいが、例えば、いわゆるカルマンフィルタを用いた予想が行われる。発音時刻の予想モデルとしては例えば回帰モデルおよび動的モデルが知られており、予想部１４はこれらのいずれか一方または両方を組み合わせて発音時刻を予想する。回帰モデルは、演奏者Ｐおよび自動演奏楽器３０による発音時刻の履歴を用いて次の発音時刻を推定するモデルである。動的モデルは、観測値（発音位置ｓ等）の背後に、この観測値を定める状態変数があると仮定するモデルである。状態変数は状態空間をある規則で遷移し、さらにプロセスノイズが加算される。
【００３７】
出力部１５は、予想部１４から入力された予想時刻に応じて、次に発音すべき音符に対応する演奏命令を自動演奏楽器３０に出力する。タイミング制御装置１０は内部クロック（図示略）を有しており、時刻を計測している。この演奏命令は所定のデータ形式に従って記述されている。所定のデータ形式とは例えばＭＩＤＩであり、演奏命令は、ノートオンメッセージ、ノート番号、およびベロシティを含む。
【００３８】
図７は、出力部１５の機能構成を例示する図である。出力部１５は、取得部１５１、取得部１５２、取得部１５３、近似部１５４、および決定部１５５を有する。取得部１５１は、楽曲データを取得する。取得部１５２は、演奏音の出力タイミングに関する情報を取得する。演奏音の出力タイミングに関する情報は、例えば、現在時刻ｔｃに対応する楽譜内位置ｓ（ｔ）を含む。取得部１５３は、楽譜内位置ｓ（ｔ）の近似関数の決定に用いられる遅延の値を取得する。近似関数の決定には、少なくとも２つの異なる遅延の値、例えば最大値および最小値が用いられる。近似部１５４は、楽譜内位置ｓ（ｔ）の近似関数を決定する。近似関数の決定とは、近似関数における係数を決定することをいい、具体的には、式（２）の係数ａおよびｂを決定することをいう。決定部１５５は、現在時刻ｔに対応する楽譜内位置ｓ（ｔ）を基準とする所定の範囲に配置されたイベントの集合Ｅ（ｓ（ｔ））が、式（１）（この場合は式（３）と等しい）の条件を満たすイベントｎを含んでいた場合、そのイベントｎに対応する演奏命令を出力することを決定する。
【００３９】
表示部１６は、楽譜位置の推定および次の発音時刻の予想に関する情報を表示する。楽譜位置の推定に関する情報は、例えば、楽譜、入力された音信号の周波数スペクトログラム、および推定位置の確率分布のうち少なくとも１つを含む。次の発音時刻の予想に関する情報は、例えば、状態変数を含む。これらの情報を表示することにより、タイミング制御装置１０の操作者がシステムの動作状態を把握することができる。
【００４０】
図８は、タイミング制御装置１０のハードウェア構成を例示する図である。タイミング制御装置１０は、ＣＰＵ（Central Processing Unit）１０１、メモリ１０２、ストレージ１０３、入出力ＩＦ１０４、および表示装置１０５を有するコンピュータ装置である。ＣＰＵ１０１は、タイミング制御装置１０の各部を制御する制御装置である。メモリ１０２は、ＣＰＵ１０１がプログラムを実行する際のワークエリアとして機能する主記憶装置である。ストレージ１０３は、各種のプログラムおよびデータを記憶する不揮発性の記憶装置である。入出力ＩＦ１０４は、他の装置との間で信号または命令の入力または出力を行うためのインターフェースである。入出力ＩＦ１０４は、例えば、マイクロフォン入力およびＭＩＤＩ出力を含む。表示装置１０５は、各種の情報を出力する装置であり、例えばＬＣＤ（Liquid Crystal Display）を含む。
【００４１】
ストレージ１０３は、コンピュータ装置を合奏システム１におけるタイミング制御装置１０として機能させるためのプログラム（以下「タイミング制御プログラム」という）を記憶している。ＣＰＵ１０１がこのプログラムを実行することにより、図４に示した機能が実装される。このプログラムを実行しているＣＰＵ１０１は、入力部１１、推定部１３、予想部１４、および出力部１５の一例である。メモリ１０２およびストレージ１０３の少なくとも一方は、記憶部１２の一例である。表示装置１０５は、表示部１６の一例である。
【００４２】
３．動作
図９は、タイミング制御装置１０の動作の概要を例示するシーケンスチャートである。図９のフローは、例えば、タイミング制御プログラムが起動されたことを契機として開始される。なお、以下の説明において推定部１３等のソフトウェア要素を処理の主体として記載することがあるが、これは、タイミング制御プログラムを実行しているＣＰＵ１０１が他のハードウェア要素と協働して処理を実行することを意味する。
【００４３】
ステップＳ１において、推定部１３は、音信号の入力を受け付ける。この例で、音信号はアナログ信号であり、ＤＡ変換器（図示略）によりデジタル信号に変換される。
【００４４】
ステップＳ２において、推定部１３は、音信号を解析して、いま楽譜上のどの位置が演奏されているかを推定する。この処理は、例えば以下のとおり行われる。この例で、楽譜時系列（楽譜位置の遷移）は確率モデルを用いて記述される。確率モデルを用いることにより、演奏の誤り、繰り返しの省略、テンポの揺らぎ、および音高または発音時刻の不確実性等の問題に対処することができる。楽譜時系列を記述する確率モデルとしては、例えば、隠れセミマルコフモデル（Hidden Semi-Markov Model、ＨＳＭＭ）が用いられる。推定部１３は、音信号をフレームに分割して定Ｑ変換を施すことにより周波数スペクトログラムを得る。推定部１３は、この周波数スペクトログラムから、オンセット時刻および音高を抽出する。推定部１３は、現在の状態の事後分布をDelayed-decisionで逐次推定し、楽譜上でオンセットとみなされる位置を事後分布のピークが通過した時点で、事後分布のラプラス近似およびいくつか統計量を出力する。具体的には、推定部１３は、楽曲データ上に存在するｎ番目のイベントを検知すると、そのイベントが検知された時刻ｔｃ、事後分布により示される楽譜上の平均位置および分散を出力する。楽譜上の平均位置が発音位置ｓ（ｎ）の推定値であり、分散が観測ノイズｑ（ｎ）の推定値である。なお、発音位置の推定の詳細は、例えば特開２０１５−７９１８３号公報に記載されている。
【００４５】
ステップＳ３において、予想部１４は、演奏者Ｐの演奏タイミングに関する観測値および自動演奏楽器３０の演奏タイミングに関する観測値を用いて、自動演奏楽器３０による次の発音時刻の予想を行う。演奏者Ｐの演奏タイミングに関する観測値としては、例えば、演奏者Ｐによる発音位置ｓ（ｔ）および発音時刻ｔｃが用いられる。
【００４６】
予想部１４から入力された予想時刻になると、出力部１５は、次に発音すべき音符に対応する演奏命令を自動演奏楽器３０に出力する（ステップＳ４）。なお、実際には出力部１５および自動演奏楽器３０における処理の遅延を考慮して予想時刻よりも早い時刻に演奏命令を出力する必要があるが、詳細は後述する。自動演奏楽器３０は、タイミング制御装置１０から供給された演奏命令に従って発音すなわち演奏する（ステップＳ５）。
【００４７】
図１０は、出力部１５における処理の詳細を例示するシーケンスチャートである。図１１は、この処理を示すフローチャートである。ステップＳ４０１において、取得部１５１は、楽曲データを取得する。この例で、楽曲データは記憶部１２に記憶されている。取得部１５１は、記憶部１２から楽曲データを取得する。ステップＳ４０２において、取得部１５２は、推定部１３から現在時刻ｔｃに対応する楽譜内位置ｓ（ｔｃ）を取得する。ステップＳ４０３において、取得部１５３は、楽譜内位置ｓ（ｔ）の近似関数の決定に用いられる遅延の値を取得する。この例で、取得部１５３は、記憶部１２から最大値Ｔｍａｘおよび最小値Ｔｍｉｎを取得する。
【００４８】
ステップＳ４０４において、近似部１５４は、予想部１４に対し、時刻（ｔｃ＋Ｔｍｉｎ）および時刻（ｔｃ＋Ｔｍａｘ）における楽譜内位置の予想を要求する。予想部１４は、この要求により指定された時刻における楽譜内位置（この例ではｓ（ｔｃ＋Ｔｍｉｎ）およびｓ（ｔｃ＋Ｔｍａｘ））を計算する（ステップＳ４０５）。予想部１４は、計算された楽譜内位置を近似部１５４に出力する（ステップＳ４０６）。
【００４９】
ステップＳ４０７において、近似部１５４は、楽譜内位置ｓ（ｔ）の近似関数を決定する。この例では、近似式として式（２）が用いられるので、近似部１５４は、予想部１４から取得した、指定時刻における楽譜内位置の予想値を用いて、近似関数における係数（この例では式（２）の係数ａおよびｂ）を決定する。近似部１５４は、決定した係数の値を決定部１５５に出力する（ステップＳ４０８）。
【００５０】
ステップＳ４０９において、決定部１５５は、決定された近似関数を用いて、対象イベントの遅延およびループ間隔ｄＴを考慮して、演奏命令を出力すべきか判断する。判断のフローは例えば図４に例示したものが用いられる。ステップＳ９３における判断には、楽譜内位置ｓ（ｔｃ）、遅延の最大値Ｔｍａｘおよび最小値Ｔｍｉｎ、並びに係数ａおよびｂが用いられるので、図１０のフローのうち少なくともステップＳ４０２〜Ｓ４１０の処理はループ間隔ｄＴで繰り返し実行される。また、対象イベントｎｔの候補となるイベントは、式（６）の条件を満たすものに限定される。
【００５１】
演奏命令を出力すると判断された場合、決定部１５５は、演奏命令を出力する（ステップＳ４１０）。演奏命令を出力しないと判断された場合、決定部１５５は、演奏命令を出力しない。
【００５２】
４．変形例
本発明は上述の実施形態に限定されるものではなく、種々の変形実施が可能である。以下、変形例をいくつか説明する。以下の変形例のうち２つ以上のものが組み合わせて用いられてもよい。
【００５３】
４−１．変形例１
自動演奏楽器３０が例えばピアノである場合において、同一の鍵に対するノートオンイベントおよびノートオフイベントの組が短い間隔で繰り返し発生する場合（すなわち同じ鍵が連打される場合）、ノートオフイベントに応じて鍵が元の位置に戻る動作が、次のノートオンイベントに間に合わない可能性がある。このような問題に対応するため、タイミング制御装置１０は、同一の鍵に対するノートオンイベントおよびノートオフイベントの組が短い間隔で繰り返し発生することが予想される場合、ノートオフイベントの命令を出力するタイミングを、楽曲データから得られるタイミングよりも早める処理を行う。具体的には、タイミング制御装置１０は、ノートオフイベントから次のノートオンイベントまでの時間が、ノートオフイベントの遅延時間以上となるように、ノートオフイベントの命令を出力するタイミングを調整する。
【００５４】
一般化すると、タイミング制御装置１０は、自動演奏楽器３０の同一の物理ユニットに対して第１イベント（上記の例ではノートオンイベント）および第２イベント（上記の例ではノートオフイベント）の組が繰り返し発生することが予想されるときは、第２イベントの命令を出力するタイミングを早めるための処理を行う。
【００５５】
４−２．変形例２
楽譜内位置ｓ（ｔ）の近似関数は実施形態で例示した線形関数に限定されない。例えば、２次以上の多項式の近似関数が用いられてもよい。また、近似関数を決定するために用いられる遅延時間の値は、最大値Ｔｍａｘおよび最小値Ｔｍｉｎに限定されない。楽曲データに含まれる複数のイベントに関する遅延時間のうち大小異なる２つの値であれば、どの遅延時間が用いられてもよい。さらに、また、近似関数を決定するために用いられる遅延時間の値の数は２つに限定されない。３つ以上の遅延時間（例えば、最大、最小、および中間）の値を用いた区分線形近似により、近似関数が決定されてもよい。
【００５６】
４−３．変形例３
タイミング制御装置１０によるタイミング制御の対象となる外部装置は、自動演奏楽器３０に限定されない。タイミング制御の対象となるイベントは、自動演奏楽器における発音を制御するイベントに限定されない。外部装置は、演奏者Ｐの演奏と同期してダンス等の動作を行うロボットであってもよい。この場合、外部装置におけるシーケンスに係るイベントは、ロボットの四肢等の物理ユニットを駆動するためのイベントである。
【００５７】
別の例で、外部装置は、演奏者Ｐの演奏と同期して変化する映像を生成する装置（例えば、リアルタイムで変化するコンピュータグラフィックスを生成する装置）であってもよいし、演奏者Ｐの演奏と同期して映像を変化させる表示装置（例えば、プロジェクターまたは直視のディスプレイ）であってもよい。これらの装置における遅延は、物理ユニットの駆動に起因するものではなく、ソフトウェア処理に起因するものであってもよい。
【００５８】
このように、外部装置における複数のイベントのシーケンスを示すデータは楽曲データに限定されず、ロボットの動作シーケンスを示すデータ、または表示装置における表示シーケンスを示すデータ等であってもよい。
【００５９】
４−４．変形例４
演奏者Ｐは人間ではなくてもよい。すなわち、自動演奏楽器３０とは別の自動演奏楽器の演奏音をタイミング制御装置１０に入力してもよい。この例によれば、複数の自動演奏楽器による合奏において、一方の自動演奏楽器の演奏タイミングを、他方の自動演奏楽器の演奏タイミングにリアルタイムで追従させることができる。
【００６０】
４−５．変形例５
演奏者Ｐおよび自動演奏楽器３０の数は実施形態で例示したものに限定されない。合奏システム１は、演奏者Ｐおよび自動演奏楽器３０の少なくとも一方を２人（２台）以上、含んでいてもよい。
【００６１】
４−６．変形例６
タイミング制御装置１０の機能構成は実施形態で例示したものに限定されない。図５に例示した機能要素の一部は省略されてもよい。例えば、タイミング制御装置１０は、予想部１４を有さなくてもよい。この場合において、ネットワーク上のサーバ装置等の他の装置が、予想部１４に相当する機能を有してもよい。サーバ装置が予想部１４に相当する機能を有する場合においてタイミング制御装置１０がｓ（ｔ）の近似関数を用いない場合、ループ間隔ｄＴの間に合計で２Ｎ回、サーバ装置にアクセスする必要がある。しかし、式（２）で例示したような近似関数を用いれば、サーバ装置へのアクセス回数をループ間隔ｄＴの間に合計で２回に低減することができる。これにより、ネットワークアクセスによる処理の遅延、ネットワークのトラフィックの増加、およびサーバ装置における処理負荷の増大を抑制することができる。
【００６２】
また、タイミング制御装置１０のハードウェア構成は実施形態で例示したものに限定されない。例えば、タイミング制御装置１０は、それぞれ推定部１３、予想部１４、および出力部１５としての機能を有する複数のプロセッサを有してもよい。また、物理的に複数の装置が協働してタイミング制御装置１０としての機能を有していてもよい。複数の装置に機能が分散される場合において、少なくとも一部の装置はネットワークを介して接続された装置であってもよい。
【００６３】
タイミング制御装置１０のＣＰＵ１０１により実行されるプログラムは、光ディスク、磁気ディスク、半導体メモリなどの記憶媒体により提供されてもよいし、インターネット等の通信回線を介してダウンロードされてもよい。また、このプログラムは、図９および図１０のすべてのステップを備える必要はない。これらのステップの一部が省略されてもよい。
【符号の説明】
【００６４】
１…合奏システム、１０…タイミング制御装置、１１…入力部、１２…記憶部、１３…推定部、１４…予想部、１５…出力部、１６…表示部、２０…センサー群、３０…自動演奏楽器、１０１…ＣＰＵ、１０２…メモリ、１０３…ストレージ、１０４…入出力ＩＦ、１０５…表示装置、１５１…取得部、１５２…取得部、１５３…取得部、１５４…近似部、１５５…決定部
【図１】
2018146782.tif 000008
【図２】
2018146782.tif 000009
【図３】
2018146782.tif 000010
【図４】
2018146782.tif 000011
【図５】
2018146782.tif 000012
【図６】
2018146782.tif 000013
【図７】
2018146782.tif 000014
【図８】
2018146782.tif 000015
【図９】
2018146782.tif 000016
【図１０】
2018146782.tif 000017
【図１１】
2018146782.tif 000018