ボイス・アサイナ (1)

タイトルの「(ダイナミック) ボイス・アサイナ」(Dynamic Voice Assigner) とは、限られた数の「発音エレメント」(これをこの話題では「ボイス」と呼ぶことにします)を、各チャンネルの MIDI ノートオン・メッセージに対して、固定的ではなく、動的に柔軟に割り当てる機構のことです。
MIDI 演奏データの全チャンネルのトータルの同時発音数がハードウェアの制限以下ならばすべての音が発音されるように機能します。
しかし、入力データの発音数が増えてハードウェアの制限を越えた場合、足りなくなる分の音は出せなくなりますが、どの音を消すかは、アサイナのアルゴリズムにより選択されることになります。
FM音源プログラムは DWM 誌 2006 年 3 月号付属の ADuC7026 基板から作り始めましたが、この段階では同時発音数が 3 とか 4 の程度でしたから、「実用的」ではなく、ボイス・アサイナの必要性もありませんでした。
いろいろな付属基板にFM音源プログラムを移植していって、

  • STM32 ではサンプリング周波数 18 kHz で同時発音数 16
  • SH-2A ではサンプリング周波数 48 kHz で同時発音数 16

を実現できて、「実用性」も出てきました。
General MIDI (level 1) では、メロディ音の同時発音数は 16 以上と規定されているので、同時発音数だけで言えば GM1 音源相当ということになります。
新しい基板に対するプログラムの移植は、機種依存の部分を変更し、CPU の能力が上がっていればサンプリング周波数や同時発音数を増やすだけで、プログラム本体は、もう何年もの間変更していませんでした。
同時発音数では「実用性」が出てきたので、ボイス・アサイナを搭載して、さらに実用的なプログラムを目指すことにしました。
といっても、プログラム本体をいじる前に、FM音源プログラムは現状そのままで、MIDI 演奏データの方を変更する PC 上のプログラムで、ボイス・アサイナのアルゴリズムを検討することを始めました。
現状のFM音源プログラムは、簡単のため、各 MIDI チャンネルで発音可能なのは1音だけ、つまり、マルチティンバー・モノフォニック音源が 16 チャンネル分集まって同時発音数 16 という形になっています。
たとえば、MIDI チャンネル 1 で同時発音数 4 の演奏データがあるとすると、同時に発音する 4 つの音を全部出したい場合には、それぞれのノートオン・メッセージを MIDI チャンネル 1、2、3、4 などに振り分けてFM音源プログラム側に送信する必要があります。
FM音源プログラム側の「16 ch モノフォニック入力」を「16 ボイス」(16 発音エレメント) と考えれば、ボイス・アサイン・アルゴリズムの検討を PC のプログラム上で行うことができます。
つまり、通常の「ポリ音源」用の SMF (Standard MIDI File) を読み込んでボイス・アサインを行って「16 ch モノ」音源用の SMF に変換するプログラムを作って検討すれば良いことになります。
PC 上のプログラムの基本部分はうまく動作したので、次回以降で説明して行きたいと思います。