グラニュラーシンセは、録音したデータをとても細かい単位で分割して、クロスフェードさせながら再生する技術です。グラニュラーは、小さな単位のグレイン(粒)という意味をもち、録音された音の情報の小さな単位を意味します。
録音したデータを再生する一般的なイメージでは、一定方向の時間軸に最後まで進めていくことで、再生します。
しかし、音の一部だけを再生したり、時間を飛ばしたり、逆再生したり。録音した音を素材として使って、全く異なる音に変えるシンセです。
ベースとなるPdのパッチです。単純にサンプリングデータを再生するものです。
これをもとに、グラニュラーシンセを作っていきます。
まず原理を理解するために、音の鳴る時間を固定し「100ミリ秒のループ」を作ってみます。
ここでは音のサンプリングレートは全て44100bpsとします。
このとき、100ミリ秒ぶんのサンプリングデータは、0.1秒 × 44100 bps = 4410 個になります。
これをphasor~で考えると、1秒 ÷ 0.1秒 = 10 なので(10ヘルツ)、
ベースとなるPdのパッチから、
[ expr 44100/$f1 ] を削除し、
[ phasor~ 10 ]
[ *~ 4410 ]
に変更します。
うす緑色のスライダーは、音量の調整です。右に動かすと音が聞こえるはずです。
ここまでで音は鳴りますが、気になることはありませんか?
サンプリング音をぶつ切りで鳴らすと、ループする際に、ブチブチとしたノイズが発生します。これをクリックノイズと言います。
このクリックノイズは、2-1. 音を出す基本のパッチでも取り上げましたが、単純に耳障りなだけではなく、音量が瞬間的にオーバーすることもあり、大音響で鳴らしたりすると、スピーカーを痛めたりする原因にもなります。
そこで、ループする際に、常にきれいにつながる工夫をします。工夫は2段階あります。
「loop_breakfast.wav」をフリーの波形エディタAudacityでみた画面です。
Pdのパッチ「pdws6-1-2.pd」では、
[ phasor~ 10 ]・[ *~ 4410 ] を使って、
「最初の0.1秒」の音を再生していました。
Audacityで拡大表示した「最初の0.1秒」です。
さらにPdでは繰り返し再生されていたので、波形エディタで、「最初の0.1秒」をコピー&ペーストして、つないでみたところです。
これで、擬似的にPdのパッチの音を再現できました。
コピー&ペーストした音の、つなぎめを拡大してみます。
すると、ループのおわりとはじまりの、音の粒が途切れてしまっています。
この音の途切れは「クリックノイズ」になります。耳障りなノイズになるだけでなく、スピーカーを痛めてしまう理由にもなります。
グラニュラーシンセでは、音の粒を再生する際に、このノイズを如何にきれいに取り除くか、が隠れたポイントになります。
クリックノイズを取り除くため、2-1. 音を出す基本のパッチの「pdws2-1-4.pd」では、[ line~ ]オブジェクトを使って、時間で0〜1に変化する値をつくり、音の出力に掛け算しました。すると音量を0〜1に変化させることになります。
ここでも同様に考えますが、たとえば「サンプリングした音は1秒のみとする」と限定すれば同じ[ line~ ] をつかう方法でもよいかもしれません。
しかし、特にグラニュラーシンセには時間の変化が欠かせないので、時間の限定はせず、いろんな時間のサンプリングファイルに対応したいところです。
そこで「窓かけ」による、音量をきれいにフェードイン・フェードアウトする方法を使います。
この変化だけを確認するため、「pdws6-phasor+cos.pd」を用意しました。
[ phasor~ 1 ] で、1秒で0〜1まで変化する数値をつくり、
[ cos~ ] に与えます。
このままだと、[ phasor~ 1 ] の開始のタイミングで、+1〜-1〜+1の変化になるので、
[ phasor~ 1 ]の値に、0.5を足した値を [cos~ ] に与え、反転させます。
さらに、-1〜+1〜-1となった値を、
[ *~ 0.5 ]
[ +~ 0.5 ]
として、0〜1〜0の変化に整えます。
これで、[ phasor~ ] に同期して、0〜1〜0と変化する数値をつくることができます。
コサインで変化する数値をつかって、音量が変化するようにしたものです。
[ tabread~ soundfile1 ] の次に [*~ ] をつかって、音の信号に掛け算します。
波形でみてみると、音のつなぎ目をフェードイン・フェードアウトさせた状態になります。
これでひとまずどんなサウンドファイルでも、音量が0〜1〜0になり、フェードイン・フェードアウトするようになります。
しかし、音量変化がおおげさで、音が聞こえなくなる瞬間が、逆に目立ってしまいます。そこで次なる工夫を施します。
次は、コサインで音量変化する音を2つ用意し、1つはそのまま、もう1つはちょうど半周期の時間差をつけて同時に鳴らすことで、音が聞こえなくなる瞬間を補う工夫を行います。
こうすることで、音が持続して聞こえるようになります。
先に、波形のイメージを確認しておきます。ちょうど、1つの音の音量が下がる時に、もう1つの音量が上がるようにします。
1つの音の開始と、もう1つの音の開始を、ちょうど半周期ずらすには、[ phasor~ ] を半周期ずらします。
その半周期ずれた[ phasor~ ] からコサインで0〜1〜0を作ります。
後半のコサイン部分は先ほどと同じですので、[ phasor~ ] をずらす説明をします。
この変化だけを確認するため、「pdws6-phasor+wrap.pd」を用意しました。
[ wrap~ ] オブジェクトは、小数のみを取り出して出力します。
[ phasor~ ] に、[+~ 0.5] することで、0.5〜1.5になります。
小数部分だけを考えると、0.5〜0.99..〜0.0..〜0.5という変化になります。
これはちょうどノコギリ波が半周期ずれたものと同じです。
半周期ずらした[ phasor~ ] から、1つめの音と同じように [ cos~ ] を組み合わせたフェードイン・アウトする音を作ります。
その2つの音を、同時に[ dac~ ] で出力します。
ここまでのまとめ
ここまでで、グラニュラーシンセの原理を説明してきました。しかしこのままでは、まだ音の表現の幅が狭いと感じるでしょう。
次は、音の再生位置や再生速度を変化させ、もっと音の粒をコントロールすることで、表現の幅を広げていきます。