いろいろな音を作る
scilabを使うと音を自由自在に操ることができる。今後さまざまなことを学ぶことで、どのようなことができるようになるか、実感してもらうため、いくつかの例を示そう。
1.UFO
stacksize(1e7);
fs=22050;
t=0:1/fs:2;
f400=sin(2*%pi*400*t);
f600=sin(2*%pi*600*t);
p2=(1+sin(2*%pi*4*t))* .5;
n2=(1-sin(2*%pi*4*t))* .5;
w=f400 .* p2 + f600 .* n2;
analyze(w,300,700,fs,2^15);
sound(w,fs);scilabは万能シンセサイザーとして使うことができる。scilabと楽器の音を理解すれば、およそどんなへんな音でも合成することができる。
2.不思議との遭遇
stacksize(1e7);
fs=22050;
t=0:1/fs:2;
a=100000;
f1=sin(2*%pi*1000*t);
f2=sin(2*%pi*1000*5/4*t);
f3=sin(2*%pi*1000*3/2*t) * 1.5;
p11=exp(-a*( t- 0.1)^2) .* f1;
p12=p11+exp(-a*(t-0.2)^2) .* f2;
p13=p12+exp(-a*(t-0.4)^2) .* f3;
p2=exp(-100000*(sin(log(20*t+1)*500+sin(t)))^2) .* exp(-t* 4.0);
w2=convol(p2,p13) * 0.3;
sound(w2,fs);大きな空間の音場を感じさせる効果も数学的に理解することができる。
yahoo.wavをダウンロードしてから実行してください。
x=loadwave("yahoo.wav");
w3=convol(p2,x) * 0.5;
sound(w3,fs);声にエコーをかけるのも自由自在だ。
4.telephone
flt1=ffilt("bp",1000,0.07,0.12);
w4=convol(x ^ 3, flt1) * 20;
sound(w4,fs);電話などの特徴ある音も、原理がわかっていえればごく簡単に合成することができる。
5. 宇宙人の歌
stacksize(1e7);
fs=44100;
r1 = 1;
r2 = 1;
for n=0:99;
f1=440 * exp( int( 1 + 12 * sin( 2 * %pi * 0.12 * n )) * log(2) / 12);
f2=440*2/3 * exp( int( 1 + 12 * sin( 2 * %pi * 0.025 * n )) * log(2) / 12);
m=n * fs * .1;
mm=1:fs*0.1;
x1(m+mm)=r1 * exp(2 * %pi * %i * mm / fs * f1);
r1 = x1(m+fs*0.1);
x2(m+mm)=r2 * exp(2 * %pi * %i * mm / fs * f2);
r2 = x2(m+fs*0.1);
end;
x3=(real(x1)+real(x2))*0.3;
sound(x3,fs);もう少し工夫すれば、コード進行などもプログラムとして組むことができる。
この授業の最後の2回では、scilabを使って音の自主制作にチャレンジする。どんな音を作りたいか、考えながら授業を理解しよう。
音や音楽についてはすでにピタゴラスの時代から数学の手法を用いた理解が進んできた。音を自在に扱うには数学的理解は不可欠だ。
本講義は少し難しい内容を含んでいるが、できるだけ簡単に実用的に、音に関するいろいろな数学手法を使いこなせるようになることを目標に進めるつもりだ。授業の内容を習得して、こういったプログラムが自由自在に操れるようになることを目指そう。
また、理論が多少わからなくても、恐れずに、サンプルとして例示したscilabのプログラムを自分なりにいろいろ改造して、どのようなことが起こるか試してみよう。道具を使いこなすには、理屈がわかることだけでなく、試行錯誤を繰り返すことも、とても役に立つ。