kenban nikki    archives   tags   

音をつくる その1

2019-11-04

久しぶりの更新ですが、今回は音づくりをしてみます。

というのも、『シンセサイザー入門Rev.2』という本がとても面白く、これまで私にとって大きな謎であったアナログシンセサイザーというものを分かった気にさせてくれたため、実際に試してみようというわけです。

ただ、アナログシンセサイザーの実機は持っていないし、近い将来に入手する予定もないので、ここではSuperColliderという音響合成用のプログラミング言語でシンセサイザーをシミュレートし、音を作っていきます。また、簡単のため、演奏はSonic Piで行います。

『シンセサイザー入門Rev.2』では、前半部分で発音原理について分かりやすく説明した上で、第4章では観念上のシンセサイザーを使って多種多様な音を作り出す方法を教えてくれています。ざっと列挙するだけでも、イニシャル・プログラム、リードシンセ、ピアノ、クラビネット/エレキギター、シンセベース、ストリングス、ブラス、シーケンス・サウンド1、シーケンス・サウンド2–3、スウィープ・シンセ、パッド・サウンド、ベル、ドラム・サウンド1(キック&タム)、ドラム・サウンド2(スネア&ハイハット)、未確認飛行物体、という充実っぷりです。

1回でこれらを全部カバーすることはできないので、今回はまず、Sonic Piで自作シンセを使う方法をまとめてから、「イニシャル・プログラム」の再現に挑戦したいと思います。

Sonic Piで自作シンセを使う

Sonic Piには、OvertoneかSuperColliderで定義したシンセファイルを読み込ませることができます。これまでのプリセットはどうやらOvertoneで書かれていたようですが、今後はSuperColliderで直接定義することが推奨されています。

自作シンセの指定方法は、こちらこちらに詳しいですが、要はシンセファイルを置いているフォルダを指定して、ファイル名でシンセを指定してロードするだけです。

load_synthdefs "/path/to/synths/"
use_synth :my_synth

ファイルが見つからないと言われたら、Sonic Piの設定パネルで「Enable external synths and FX」がオンになっているかチェックしてみましょう。

イニシャル・プログラム

さて、準備ができたところでイニシャル・プログラムを書いていきます。これは、オシレーターを1つだけ使う、(観念上の)鍵盤を押すとノコギリ波の「ブー」という音が鳴るだけのシンセです。

SuperColliderではエンベロープのレベルと時間の両方を指定できますが、文中の「ADSR」に対応しているのは時間の方です。また、文中では A = 0, D = 0, S = 10, R = 0 として鍵盤を押している間は音が持続するということを表していますが、Sonic Piでは sustain の値で鍵盤を押している時間を指定するので、ここではSonic Piからコントロールできるように変数にしています。

(
SynthDef("init", {
	arg out_bus = 0, note = 52, amp = 1,
	    attack = 0, decay = 0, sustain = 1, release = 0,
	    env_curve = 2;
	var freq = note.midicps;
	
	var osc1 = Saw.ar(freq);
	var env1 = Env.new(levels: [1, 1, 1, 1], 
                       times: [attack, decay, sustain, release],
                       curve: env_curve);
	
	var mix = osc1 * EnvGen.kr(env1, doneAction: 2);
	Out.ar(out_bus, mix);
}).writeDefFile("/path/to/synths/");
)

音ができたら、Sonic Piで鳴らしてみましょう。

load_synthdefs "/path/to/synths/"
use_synth :init

play 60, sustain: 0.25 + 0.25/2
sleep 0.5

play 48, sustain: 0.25/2
sleep 0.25

play 52, sustain: 0.25/2
sleep 0.25

play 55, sustain: 0.1
sleep 0.2

play 60, sustain: 0.1
sleep 0.2

play 64, sustain: 0.1
sleep 0.2

play 67, sustain: 0.1
sleep 0.2

play 72, sustain: 0.25
sleep 0.5

play 60, sustain: 0.25 + 0.25/2
play 64, sustain: 0.25 + 0.25/2
play 76, sustain: 0.25 + 0.25/2
sleep 0.75

play 59, sustain: 0.25
play 62, sustain: 0.25
play 71, sustain: 0.25
sleep 0.5

play 57, sustain: 0.25
play 60, sustain: 0.25
play 69, sustain: 0.25
sleep 0.5

こんな感じで鳴りました。素晴らしいですね。

この調子で次回は「リードシンセ」の音を作りたいと思います。