静寂の音
一般的に音楽は、静寂に対して音を配置していくことによって作られる。真っ白な世界に絵を描いていく感じ。音楽がこういう構成になっている理由は、人間がいる世界には基本的には音があまりない方が普通で、音がある場合もその音が変化せずに永続することはないからだと思う。変化があるから音楽ができる。当たり前か。
変化が音楽を作るってことで考えると、普通とは逆にずーっと一定の音が鳴っている世界では、鳴っている音に対して静寂の区間を配置していけば音楽を作ることができる。*1
自分で実験。下のピアノロールで緑のバーのところは音が鳴っている区間を表す。緑のバーをところどころ遮る短い区間がその音に対する静寂。
ChucKのプログラム。
Gain g => dac; .4 => g.gain; [Std.mtof(60), Std.mtof(64), Std.mtof(65), Std.mtof(67), Std.mtof(69), Std.mtof(70), Std.mtof(72), Std.mtof(74)] @=> float freqs[]; .65::second => dur T; // 単位時間 .2*T => dur S; // 静寂の持続時間 [[9*T,25*T,57*T], [12*T,28*T,60*T], [4.5*T,7*T,11*T,12.5*T,16.5*T,20.5*T,23*T,27*T,28.5*T,33*T,46.5*T,55*T,59*T,60.5*T,63*T], [4*T,5*T,13*T,16*T,17*T,20*T,21*T,29*T,32*T,46*T,47*T,49*T,54*T,62*T], [3*T,6*T,15*T,19*T,22*T,31*T,36*T,41*T,45*T,48*T,53*T,61*T], [36.5*T], [14*T,30*T,35*T,37*T,39*T,43*T,44.5*T,51*T,52.5*T], [38*T,44*T,52*T]] @=> dur timing[][]; // 静寂の開始時刻 fun void line(float f, dur t[]) { SinOsc s => ADSR e => g; 2*f => s.freq; e.set(10::ms, 0::ms, 1, 10::ms); .3 => e.gain; 1 => e.keyOn; 0*T => dur pre; for (int i; i < t.cap(); i++) { t[i] - pre => now; 1 => e.keyOff; S => now; 1 => e.keyOn; t[i] + S => pre; } while(ms => now); } for (int i; i < freqs.cap(); i++) { spork ~ line(freqs[i], timing[i]); } while(ms => now);
音のオン・オフにエンベロープ・ジェネレータを使っている理由は、信号変化をなめらかにするため。エンベロープを使わず、オシレータとGainを直に接続して、静寂の区間だけ接続を切る、という方法だと、接続を切ったときにそれまでオシレータからGainへと流れていた信号が一瞬でゼロになって、それが原因でノイズが発生してしまう。
録音したもの。複数の音高の音が鳴りっぱなしの中でも、静寂の区間があった音高の音をはっきり知覚することができる。
ついでに静寂に対して音を配置した一般的なバージョンも。上のChucKのプログラムにある.keyOn/.keyOffを全て反転させて実行・録音したもの。
当然、静寂に対して音を配置した方が聴きやすい。