バーチャル楽器を支える技術 - DTMプログラミング言語探訪番外編


## 1. はじめに

[DTMプログラミング言語探訪](https://qiita.com/aike@github/items/77b3eccc6861de09513a)をまとめるにあたり、現代的なサンプラーソフトにどういう需要や要件があるのか説明した方がよさそうなので書いてみます。

## 2. 音楽における「サンプリング」

音楽が多様化して「サンプリング」という言葉も複数の意味や用途を持つようになりました。本項で簡単にまとめます。

### 引用

ミュージックコンクレートや昔のヒット曲のアレンジをほぼそのまま弾き直すような「引用」の文脈でもサンプリングという言葉が使われますが、これらは本稿の対象ではありません。

### ワンショットサンプリング

サンプリングと聞いて一番思い浮かべやすいのがワンショットサンプリングかもしれません。
フェアライトCMIやEmu Emulatorのような1980年代に登場した最初期のサンプリング機能をもつデジタル楽器も、オーケストラヒットなどローファイで不自然なワンショットサンプリングが代表的な音色となっています。

[Splice](https://splice.com/home)でキックやスネアの音素材を購入してDAWに貼り付けるような音楽制作スタイルも普通になりました。YouTuberが[効果音ラボ](https://soundeffect-lab.info/)の音素材を動画に貼り付けるのも近いかもしれません。

DAWに直接貼り付ける以外にも、MPCやMaschineに割り当ててフィンガードラムとして演奏したり効果音再生機として使用する例もよく目にします。

### サンプリングループ

ACIDのような、もともとループシーケンサーと呼ばれていたDAWにおける利用法。今人気の高いAbleton Liveもループ再生機能が充実したDAWです。
リズム楽器やコード楽器などの１～数小節の比較的長いサンプリング音を繰り返し再生して曲を作っていく使い方です。
これも[Loopcloud](https://www.loopcloud.com/cloud/)や[Splice](https://splice.com/home)で素材を入手することが多いです。


### スライス

1～数小節分のサンプリングをそのまま使うのではなく、無音部分やアタック部分でサンプリングデータをバラバラに切ってそれぞれの音を好きなタイミングで鳴らせるようにすることをスライスと言います。音色や雰囲気はそのままで独自のフレーズを作れるメリットがあります。
アーメンブレイクをスライスしてグルーヴ感はそのままに独自のリズムを作ったり、購入したボーカルフレーズ素材をバラバラにしてピッチを変えて別のメロディにするようなボーカルチョップという技法もよくおこなわれています。


### バーチャル楽器[^1]

ここでようやく本題のバーチャル楽器（バーチャルインストゥルメンツ）としてのサンプラーの説明です。
90年代くらいまでの楽器メーカーはシンセサイザーを進化させることで、オーケストラ、室内楽、バンドサウンド、グランドピアノ、民族楽器といった生楽器の音を再現しようとしていました。しかし、オシレーターの発音方式を工夫するには限界があり、一方でメモリやハードディスクの大容量低価格化、高速化が進んだ結果、生楽器のリアルな音を再現するには音程ごとにバリエーションも含めて全部サンプリングしたものを鳴らすのが良いということが認識されていきました。

※ MODO BASS登場以降、その流れも少し変わってきていて物理モデリング音源も見直されつつあります。

音楽制作で生楽器の演奏をレコーディングするには、優秀な演奏家、状態の良い楽器、録音環境、録音機材とエンジニアなどをそろえる必要があり、予算的にも時間的にも難しい場合がよくあります。
また最終的には本物の生楽器で演奏するとしても、事前にプロトタイプとして簡易的に曲を聴きたい場合もあります。
バーチャル楽器はそういう需要にこたえてきました。良い環境で録音した楽器音と次項で説明する各種の技術を使ってサンプラーライブラリを作成することで、一聴するとサンプラーとわからないような高品質の生楽器の演奏を得ることができます。
特に昨今のゲーム音楽や劇伴は生楽器の演奏を必要とする場面が多く、サンプラーライブラリの主要なユーザーとなっています。

ここまで説明するとわかるように、サンプラーといってもユーザー自身が録音して再生するというものではなく、再生に特化したソフトウェアになります。そしてまた、ライブラリを切り替えることで別の楽器になるプラットフォームとしての役割を持っています。そのため、サンプラーではなく「ソフトウェア音源エンジン」と呼ばれることもあります。
Native Instrument社のKONTAKTがもっとも有名でサードパーティーライブラリも多く出ています。UVI社のUVI Workstationやその上位版のFalconも各社からライブラリがリリースされています。また、Garritan社のライブラリ再生に使われるARIA PLAYER、Ueberschall社のElastikエンジン、EastWest社のPLAY EngineとOPUS Engine、UJAM社のGorilla Engine、Vienna Instruments社のSynchron Playerなど独自エンジンを持つサンプル音源デベロッパーもあります。


## 3. バーチャル楽器用サンプラーの機能

バーチャル楽器のプラットフォームとなるサンプラーソフトウェアは、人間が演奏したようなリアリティを表現するために多くの技術が考案され搭載されてきました。以下にその技術を示します。

### キーマッピング（ゾーン）

サンプラーソフトの一番基本になる機能。サンプリングされたwavやaiffファイルをどの鍵盤（ノートナンバー）に割り当てるかという設定です。割り当てた範囲はゾーンと呼ばれます。
サンプルデータの録音状態はさまざまなのでゾーンごとに音量を調整できる機能は必須です。
複数の鍵盤に割り当てた場合は、鍵盤ごとに自動的に再生速度を変えて適切なピッチで再生されるようにします。大きくピッチを変えると不自然になるために必然的に使用するサンプルファイルも増えていきます。サンプルファイルが何千個にもなることもあるので管理のしやすさも重要になります。
また民族楽器などはあえて鍵盤の音程とは異なる音程のサンプルを割り当てることもあります。

### リリース設定

サンプルを鳴らすときに、押したキーを離しても音が鳴り続けるかどうかの設定です。
打楽器のワンショットの場合、キーを押したままでも離しても減衰カーブは変わりません。ピアノの場合はキーを離すとすぐに減衰しますが、押したままでもゆっくりと減衰します。オルガンの場合はキーを押している間は音が鳴り続けます。
これらを正しく設定できる必要があります。

### ループポイント

上記のオルガンのような持続音は、キーを押している間サンプルデータのある区間をループして再生することで実現します。この区間の両端をループポイントと呼び、適切なループポイントを設定する機能が用意されています。
しかし、単純なループだと不自然になることも多いため、ループ時に区間の終端の音と先頭の音をクロスフェードすることで自然に聞こえるようにする技術もあります。

### ボイスグループ

ドラムセットのバーチャル楽器を作るときに必要な機能です。クローズハイハットを鳴らすときは、もしオープンハイハットが鳴っていたらその音を止める必要があります。そういった排他的に鳴らす音を同一のボイスグループに指定して管理する機能です。
チョーク、アサイン・グループなどと呼ばれることもあります。

### ベロシティレイヤ

鍵盤を叩く強さ（実際には速度）に応じてサンプルを切り替える機能です。多くの楽器は強く弾くと音量だけでなく音色変化もおこります。そのため強く弾いた音、弱く弾いた音、中くらいの強さで弾いた音など何段階もサンプリングしておき、入力のベロシティによって切り替えて鳴らす機能です。
また、このベロシティによる切り替えも不自然にならないように、ベロシティの値によって強く弾いた音と弱く弾いた音をブレンドするようなクロスフェード設定をする場合もあります。

ここまででわかるように、ゾーンとベロシティレイヤで二次元的なサンプル管理が必要になります。

### ベロシティカーブ

鍵盤の機種や演奏者の好みによって、弱く弾いたつもりが強めの音が出たりして、ベロシティレイヤの設定が演奏しづらいと感じることもあります。
その対策として、入力ベロシティと鳴らす音の対応カーブを調整できるようにすることがあります。

### キースイッチ（グループ切り替え）

生楽器は、通常の奏法以外にもさまざまな特殊な奏法（アーティキュレーション）があり、奏法を切り替えるのにキースイッチがよく使われます。アーティキュレーションとしては、バイオリン音源だとピチカートやトレモロ、ギター音源のミュートなどが典型的です。
キースイッチは、楽器の音域より低い低音鍵盤などを演奏用ではなくスイッチとして使用するものです。もともとはハモンドオルガンにも搭載されていた機能でもありますが、ソフトウェア音源でも切り替えタイミングをDAWのピアノロールで緻密に設定できて便利なので多用されています。

とはいえ、キースイッチはわかりづらくなる要因でもあるので、アーティキュレーションごとに別ライブラリを起動するのを好む人もいます。これはこれでフレーズの中で違う奏法がでてきたとき、DAWのピアノロールが別々になってしまうというデメリットもあり、一長一短です。

アーティキュレーション切り替えの仕組みとしてはグループAに通常演奏のサンプルデータ、グループBにピチカートのサンプルデータというようにサンプルデータ群をグループ化する機能を用意しておいて、スイッチの状態によってどのグループのデータを有効にするかという処理をおこないます。

### エンベロープジェネレーター

サンプラー音源でエンベロープを極端に変えることはあまりありませんが、ストリングス音源でアタック感を調整したいようなことはよくあるので、ほとんどのサンプラーはADSRのエンベロープジェネレーター機能を搭載しています。

### ラウンドロビン

サンプラーの不自然な音といえばマシンガン効果が有名です。アタックの強い音を連続で鳴らすと人間の演奏とはかけはなれたマシンガンのような音になってしまうものです。
これを避けるために、同じ音程の音を何種類もサンプリングしておき、順番にあるいはランダムに鳴らす方法が考案されました。この順番にローテーションして鳴らす方法をラウンドロビンと呼びます。
ラウンドロビンは自然な音を得るには効果的ですが、サンプリング作業もディスクやメモリの容量も数倍必要という欠点もあります。

### マイキング

ドラム音源などは、複数マイクで録音した音をブレンドすることがよくあります。
そのため、マイクの種類や距離を変えたサンプルデータを複数用意しておいて、利用者の好みでミックスできるようにする場合があります。これもマイクの分だけディスクやメモリの容量を必要とします。

### ディスクストリーミング

ここまでで述べたように、ゾーン、ベロシティレイヤ、アーティキュレーション、ラウンドロビン、マイキングなどを実現するたびにサンプルデータが積算式に増えていき、結果的に大きな容量になってしまいます。

大量のサンプルデータを使うと、データがメモリ上に乗らなかったり、他のソフトウェアのメモリを圧迫したりします。そのためサンプルデータ全体をメモリに読み込まず、ディスク上のサンプルデータを読みながら再生する機能がディスクストリーミングです。
音の鳴りはじめはシビアなタイミングが要求されるので、全データの先頭部分だけメモリに読み込んでおくような工夫をしています。

### リリーストリガ

鍵盤を押したときだけでなく、離したタイミングで音を鳴らすことでリアリティを出す手法です。
ピアノのハンマーが戻る音や、ギターの弦から指が離れるときのノイズが典型的な利用例です。

また、オルゴールのギアやレスリースピーカーが回転するノイズなどを再現するために、鍵盤の状態に関係なく常に鳴り続ける音を出せるものもあります。

### レガート、スライド、ポルタメント

サンプラーが比較的苦手な表現として、レガートやスライド、ポルタメントといった、元の音が次の音に滑らかにつながる演奏があります。
レガートの場合、元の音、音程移動中の音、次の音の三種類をクロスフェードでつなげたり、EGでアタックを削ることで表現することがあります。
ポルタメントは、次の音をトリガーせずに元の音の再生速度を途中から変えることで実現することもあります。

### エフェクト

サンプラーはプラグインのひとつなので、DAWで後段に別のプラグインを挿入すればいくらでもエフェクトをかけることができますが、それでも楽器音と切り離せないほど一体化したエフェクトは存在するので、最近のサンプラーソフトは多くのエフェクトを内蔵しています。
代表的なのがIRリバーブで、ホールの残響を付加することでオーケストラ楽器は聴きなじんだ音になります。
また、エレキギターも各種ストンプやアンプシミュレーターを内蔵していた方が出音をイメージしやすいので、サンプラーソフトはそれらを搭載する傾向にあります。

### GUI

上記のようなさまざまな機能を実装すると、その調整のためにGUIが必要になってきます。
結果的にサンプラーソフトはライブラリごとに独自のGUIが作成できるような機能を持つようになりました。

## 4. バーチャル楽器に実装するロジックの例

前項のようにさまざまな機能が必要なサンプラーソフトですが、もっと複雑なロジックを作れるようにプログラミング言語を搭載しているものがあります。そういった内蔵プログラミング言語を使って実現する機能をいくつか例示します。

### レガート判定

ギター音源の場合、同じレガート指示でも上昇フレーズの場合はハンマリング、下降フレーズのときはプリングというように音色を変えて鳴らす機能です。高速なタッピングフレーズでもハンマリングとプリングを意識せずに入力できるので便利です。

### オーバーラップ奏法判定

レガート奏法を入力するときにキースイッチだと煩雑になるので、前の音を離す前に次の鍵盤を押したら自動でレガートになる機能を用意することがあります。これだと鍵盤からでも少し練習するだけで自然に通常の音とレガート音を切り替えながら演奏することができます。

### 自動ベロシティ調整

ピアノロールでベタ打ちしてもベロシティをランダマイズなどして機械的にならないようにします。小節の頭は強めに鳴らすなど文脈を読んで自動で表情づけする場合もあります。

### 自動コード展開

ギターなど和音の構成音に物理的な制限がある楽器をリアルに鳴らす機能です。入力された複数の音から和音を推定して、同じ和音でもその楽器らしい構成音に展開しなおして鳴らします。

### 弦推定

ギターやベースなど異なる弦で同じ音程を鳴らせる楽器の場合、直前に鳴らした音からフレット移動が自然になるような手の位置を推定して適切な弦のサンプル音を鳴らす機能です。

### ストラミング

同時に鍵盤を押しても、ピックで掻き鳴らしたように複数の音をタイミングを少しずつずらして鳴らす機能です。
これも表拍は低い弦から高い弦へ、裏拍は高い弦から低い弦へというように文脈を判定することもあります。

### オルタネイトピッキング

ギターの場合、スローなフレーズだとダウンピッキングのみで、音符の細かいフレーズが出てくるとダウンとアップ交互にピッキングすることがあります。それを再現するために、直前の音からの時間や小節の頭か否かなどの情報からダウンかアップかを判断して適切なサンプルを鳴らす機能です。

### スウィング

スウィング機能は裏拍のタイミングを遅らせることでジャズ特有の半分跳ねたようなグルーヴ感を再現する機能です。DAWにも大抵用意されていますが、ランダムで遅らせ方を揺らしたり、四拍目の裏だけ他より遅れるクセを再現するなど人間的な演奏を表現するために実装することがあります。


## 5. おわりに

以上、ゲーム音楽や劇伴などで多用されているKONTAKTなどのバーチャル楽器プラットフォームとしてのサンプラーソフト／ライブラリの現状とそこに含まれる機能について解説しました。
サンプラーソフトが現状重視される理由、そしてサンプラーソフトがプログラミング言語を含めた複雑な機能を持つ理由、各種用語などの共通認識の手助けになればと思います。


[DTMプログラミング言語探訪](https://qiita.com/aike@github/items/77b3eccc6861de09513a)


[^1]: 英語圏も含め業界的にVirtual Instrumentsという呼称が普及しているのでそれに倣いますが、VRの楽器が登場して以降、誤解を生みやすい名前かもしれません