
フォルマント兄弟の「和音平均化旋律・運指法計画」で用いられている制約プログラミングについて(3)
フォルマント兄弟の「和音平均化旋律・運指法計画」
2013.2.24 大垣、ソフトピアジャパン:フォルマント兄弟(三輪眞弘+佐近田展康)、山崎雅史
「MIDIアコーディオンによる合成音声の発話及び歌唱の研究」総括報告・シンポジウム
2014.2.22 大垣、ソフトピアジャパン: フォルマント兄弟(三輪眞弘+佐近田展康)、久保田晃弘、福田貴成、山崎雅史
「MIDIアコーディオンによる合成音声の発話及び歌唱の研究」(新しい時空間における表現研究)
日本学術振興会科学研究費補助金研究・基礎研究(C)研究課題番号23520175
2014.2.22の総括報告における発表用スライドは以下からダウンロードできます。
フォルマント兄弟の「和音平均化旋律・運指法計画」への制約プログラミングの適用
2013.2.23の中間報告での発表用スライド・補足資料は以下からダウンロードできます。
フォルマント兄弟の「和音平均化旋律・運指法計画」(スライド)
フォルマント兄弟の「和音平均化旋律・運指法計画」(補足資料)
3.制約プログラミングの運指決定問題への適用
3.1.一般の運指決定問題の場合
今回の問題である「和声平均化旋律」における運指の自動決定は、それでは制約プログラミングに適した問題なのかと言えば、 恐らく答えはYesであろうと考えられる。まず一般に運指というのは、(今回は適用される楽器がアコーディオンで あることから)例えば対象を右手の5本の指に限定したとして、楽譜に記載された音を5本のどの指に割り当てるかを 決める問題である。親指から小指までの指に1から5の番号を付与すると、記譜された音毎に1~5の数のどれかを 割り当てる問題として形式化するのは直感的にできるだろう。そして、(例外がないことはないが)1本の指では 1つのキーしか押せないとか、指が広げられる音程の幅の条件、同時にキーを複数の指で押し下げる際の制約、 時間方向の変化に対して、演奏可能なように指を割り当てる必要がある、といった様々な条件を、楽音毎の割当られる 指番号の変数間の制約として記述してやればいいことになる。これは典型的な離散的組み合わせ問題であり、 しかも有限整数領域の領域変数と変数間の制約によって記述できるから、一般に運指の問題は、上述の狭義での 制約プログラミングに適した問題であると、まずは言っていいように思われる。
3.2.「和声平均化旋律」における運指決定問題の場合
更に「和声平均化旋律」における運指への適用を考えると、既に述べたように、「和声平均化アルゴリズム」では、 一つのピッチを実現するためのキーの割当の候補が複数ある点が、通常の運指の問題と異なる部分である。 つまり例えばMIDIコードの60のピッチを実現するための手段は、60のピッチのキー一つを押し下げること以外にも、 59のキーと61のキーを同時に押し下げるなど、複数の選択肢が存在しうるのである。従って実現されるピッチをではなく、 ピッチを実現するために使用するキーの組み合わせと押し下げ・解放のタイミングを記譜したものが楽譜であるとするならば、 「和声平均化アルゴリズム」を用いて或る一つの旋律を実現する場合、楽譜そのものが複数存在しうることになる。
3.3.楽器の特性と運指の制約
これは鍵盤楽器では通常はありえないことであるが、例えばヴァイオリンでは、ある単一の音を4本ある弦のどれを用いて 出すかについてはG線でしか出せない低音と、E線でしか出せない高音を除けば一般に選択肢が存在するから、 寧ろそちらを思い浮かべればいいのかも知れない。ただしヴァイオリンの場合には弦によって音色の特性が異なるから、 逆にどの弦を用いて演奏するかが予め指定されていることがありうるのに対し、「和声平均化旋律」の場合にはそうした ことはないから、同一ピッチの実現に対して複数存在するキーの組み合わせの候補の選択は、純粋に運指のし易さの 観点から選択すれば良いことになる。
一方で鍵盤楽器であっても、ピアノのようにキーを押し下げ続けなくても打鍵の残響の効果が残る打楽器的な楽器もあれば、 オルガンやアコーディオンのように、指を離せば音が出なくなる楽器もある。 更に「和声平均化アルゴリズム」を用いる場合には、複数の指によって或るピッチを生成する際に、或る指が遅れたり、 或る指だけ早く離してしまえば、そこで音程の変化が生じてしまうことになるから、記譜された音の持続を正確に実現できる ような運指を選択する必要がある。
また音程の跳躍に対応するポジションの移動は、記譜上は記載されていなくても音と音の間に極小幅の休止が存在していることを 前提としているが、「和声平均化旋律」が演奏対象として典型的に 想定している楽曲は、音程の変化や揺らぎを含み持つ長大なフレーズを、途中ほとんと息継ぎなしで一息に歌う必要があり、 その区間内の音の変化は、いわば(弦楽器であればポルタメント奏法によって)連続的に変化するように補間されていると 見做さなくてはならないから、その区間内では全ての指が同時に離れる瞬間を生じさせることなく、ポジションの 移動が必要な大きな音程変化に対しては、親指を潜らせることによって実現する必要がある。
更に一般には、同じピッチを 実現するキーの組み合わせが複数あるとき、同時に使うキーの数は少ない方が、複数使う場合には、ピッチ幅が狭い方が 演奏の困難さが低くなると考えられるが、例えば同一音が持続している区間に1/3半音の「うなり」が入るような場合、 「うなり」を実現する運指を考えたときに、あえて半音を2つのキーで実現して、もう一つのキーを追加して1/3半音の 変化を実現した方が人間にとって自然な運指になるといったような条件もある。
これらの条件が、1つのキーを複数の指で押すことはないといった自明の制約、1本の指では同時に1つの キーしか押さないといった基本的な制約、親指以外の指どうしが交差することを禁じる制約、親指を潜らせる ポジション移動時には、親指のみがキーに割り当たるといった制約に加えて、指を広げられる幅や指を潜らせるときの 幅といった、奏者の身体的な条件にも依存するパラメトリックな条件ともに運指の制約条件となる。
3.4.前処理としてのピッチの離散化による規格化
一方で、連続的な音高の変化を、弦楽器のようなグリサンド、ポルタメントによって自然に実現するのではなく、 離散化された音高しか持たないキーボードで実現する場合、「和声平均化アルゴリズム」を用いて微分音程を 実現する場合であっても、連続的なピッチの規格化による離散化のプロセスが、いわば前処理として必要になる。
例えば同時に押し下げする指の数を3つまでに限定した条件下では、「和声平均化アルゴリズム」の下で 実現可能な微分音程は1/3半音,1/2半音に限定される。従って、実現されるピッチの系列は、半音、1/3半音, 1/2半音の微分音程を用いた系列に離散化してピッチを規格化する必要が出てくる。
3.5.時間方向の離散化(量子化)の問題
上記以外にも、制約プログラミングで解を求めることができるようなモデルに現実の問題を適用するにあたって 問題になることはある。例えば、サンプリングした歌唱を解析してピッチの系列を求め、それに対する運指を 自動決定する問題を考えてみよう。
キーボードでの演奏を前提にしている以上、既述の通りのピッチの離散化・ 規格化も必要だが、時間方向の量子化もまた必要になる。1ミリ秒毎のピッチ変化をサンプリングしたデータが 与えられたとして、このピッチ変化を忠実に楽譜化しても早すぎて人間には演奏不可能である。そこで人間が 演奏可能な単位にまで、時間軸の変化を量子化してやる必要がある。
このとき単純に区間内のピッチの算術平均を その区間の代表ピッチとして計算してしまうと、もともと区間内に含まれていた極小値・極大値といったピークを 平滑化してしまう。特に同じ音高がしばらく持続している最中に、1/3半音程度の「うなり」が挟まっている場合にも 算術平均をしてしまえば、「うなり」は制約プログラミングで運指を決める以前の段階で喪われてしまい、 そもそも入力データの中には存在しないことになってしまう。
3.5.時間方向の離散化(量子化)の問題
上記以外にも、制約プログラミングで解を求めることができるようなモデルに現実の問題を適用するにあたって 問題になることはある。例えば、サンプリングした歌唱を解析してピッチの系列を求め、それに対する運指を 自動決定する問題を考えてみよう。
キーボードでの演奏を前提にしている以上、既述の通りのピッチの離散化・ 規格化も必要だが、時間方向の量子化もまた必要になる。1ミリ秒毎のピッチ変化をサンプリングしたデータが 与えられたとして、このピッチ変化を忠実に楽譜化しても早すぎて人間には演奏不可能である。そこで人間が 演奏可能な単位にまで、時間軸の変化を量子化してやる必要がある。
このとき単純に区間内のピッチの算術平均を その区間の代表ピッチとして計算してしまうと、もともと区間内に含まれていた極小値・極大値といったピークを 平滑化してしまう。特に同じ音高がしばらく持続している最中に、1/3半音程度の「うなり」が挟まっている場合にも 算術平均をしてしまえば、「うなり」は制約プログラミングで運指を決める以前の段階で喪われてしまい、 そもそも入力データの中には存在しないことになってしまう。
3.6.実際に構築したモデルの概要
そこで今回は、与えられた10ミリ秒単位のサンプリング結果を入力として受け取り、演奏可能な区間(概ねMM.4分音符=60で 32分音符相当)で量子化し、1/2半音、1/3半音までを許容する前提でピッチを離散化して規格化された入力ピッチの系列を計算し、 このピッチを実現する区間内の算術平均を取るのではなく、極値を取って区間の代表値とすることにした( 極値が複数あれば、再び、今度は極値間の算術平均をとる)。ピッチの規格化にあたっては、同じ音高が(概ね4分音符 1つ程度)しばらく持続している区間については、1/3半音として規格化する幅を広めにとって、変化の乏しい区間には 「うなり」を取り入れられるようにした。
その結果求まったピッチに対して、一般に複数存在するそのピッチを実現するキーの組み合わせ候補の中から、 既述の運指の制約を充足するようなキーの組を選ぶわけだが、これについても同じ音高が(概ね4分音符 1つ程度)しばらく持続している区間については、「うなり」の演奏に配慮して、半音を2つのキーの組み合わせで 実現することとし、その他の区間では、特に音程変化が激しく、親指を潜らせることによるポジション変更に 配慮して、半音はキー1つ、2つの候補のいずれかを選択できるようにし、1/2半音、1/3半音ともども、指を拡げる 幅の最大値の範囲内で可能な全てのキーの組み合わせを候補として、3.3.に記載したような制約の下で条件を充足する 運指を探索させることにした。モデル上、運指の探索はサンプルされた音の系列が持っている時間の方向に対して 対称性を持っているので、時系列に対して順方向、が逆方向の探索を行わせることができる。これが認知的に妥当か どうかは別に議論があるだろうが、J.S.バッハの対位法的作品においては作品自体が逆行、反行、蟹行等の対称性を 備えている場合があり、一般に楽譜を後ろから逆向きに演奏することがないからといって、必ずしも運指の決定自体が 音楽の流れの方向に対して非可逆的であるとする根拠はないとは言いうるように思われる。
3.7.求解実験の概要
上記のように構築したモデルに基づき、C言語でプログラムを作成した。制約処理系としては、日本国内で開発され、無償で 利用できるC言語ライブラリとして提供されている(株)NTTデータセキスイシステムズのiZを用いた。検証は フォルマント兄弟より提供された約40秒の持続を持つ山唄のサンプリング結果を入力として実施した。 最初に求まった制約充足解を結果として採用することにし、規格化・量子化などの条件を変えて幾つかの問題を 解かせた。各問題における制約のhardnessにより計算時間は様々だが、概ねIntel Celeron 1.4GHz、RAM896MのPC上で、 数秒以内に答えを得ることができている。(例を含む詳細な結果は、研究成果報告等で別途なされるので、そちらを参照されたい。)
(2014.2.2初稿, 2.9, 11改訂, 2.11公開, 2.14, 2.19加筆・修正, 2025.1.20 noteにて公開)