数式による音楽の表現


この曲を聞いて見て下さい。  (お手元のPCが、音の聞ける環境にあることを仮定します)

この演奏は、数式を Mathematica で音に変換したものです。

以下に記した2つの関数 truck1[t]truck2[t] を試行錯誤を経て考案しました。
Mathematica で、Playコマンドを実行すると音が鳴ります。



truck1[t_] :=
UnitStep[-(t - 6.6)]*UnitStep[t - 6.0]* Cos[2 Pi 440*2^(11/12) t] +
UnitStep[-(t - 5.9)]*UnitStep[t - 5.6]* Cos[2 Pi 440*2^(11/12) t] +
UnitStep[-(t - 5.5)]*UnitStep[t - 5.2]* Cos[2 Pi 440*2^(9/12) t] +
UnitStep[-(t - 5.1)]*UnitStep[t - 4.5]* Cos[2 Pi 440*2^(5/12) t] +
UnitStep[-(t - 4.4)]*UnitStep[t - 4.1]* Cos[2 Pi 440*2^(5/12) t] +
UnitStep[-(t - 4.0)]*UnitStep[t - 3.7]* Cos[2 Pi 440*2^(2/12) t] +
UnitStep[-(t - 3.6)]*UnitStep[t - 3.0]* Cos[2 Pi 440*2^(7/12) t] +
UnitStep[-(t - 2.9)]*UnitStep[t - 2.6]* Cos[2 Pi 440*2^(7/12) t] +
UnitStep[-(t - 2.5)]*UnitStep[t - 2.2]* Cos[2 Pi 440*2^(4/12) t] +
UnitStep[-(t - 2.1)]*UnitStep[t - 1.5]* Cos[2 Pi 440*2^(4/12) t] +
UnitStep[-(t - 1.4)]*UnitStep[t - 1.1]* Cos[2 Pi 440*2^(4/12) t] +
UnitStep[-(t - 1.0)]*UnitStep[t - 0.7]* Cos[2 Pi 440*t]

truck2[t_] :=
UnitStep[-(t - 3.6)]*UnitStep[t - 0.7]* Cos[2 Pi 440*2^(-12/12) t] +
UnitStep[-(t - 6.6)]*UnitStep[t - 3.7]* Cos[2 Pi 440*2^(-10/12) t]

Play[{truck1[t], truck2[t]}, {t, 0.6, 6.6}]

式中のUnitStep[t] は階段関数で、鍵盤を押す時刻と離す時刻を調整することに対応。
Cos[2πf t] は 振動数 f ヘルツの正弦波。例えば f=440ヘルツ は ラ の音。振動数が2倍
の880ヘルツは1オクターブ高いラの音になります。1オクターブは鍵盤では12個、ギターでは
12フレットあります。そのため、半音高い音は、もとの振動数に 2の1/12乗をかけれた値の振動数
になります。音の強弱に関しては、正弦波の振幅に相当する数値をかけることで調整可能です。
例えばUnitStep[t]の代わりに 時刻t に関して緩やかに増大する関数をかけると、ヴァイオリン
のような弓で奏でる弦楽器に似た音を得ることも可能なはずです。また、truck1[t]truck2[t] は、
それぞれにステレオの左右のスピーカーから出力される波形になっています。このステレオ機能を
利用して、次のように

Play[{truck1[t]*Cos[2 Pi t], truck2[t]*Sin[2 Pi t]}, {t, 0.6, 6.6}]

とすると、左右からの出力が1秒周期で入れ替わり、音源が空間的に回る感じに聞こえ、
フェイズ・シフターとよばれるエフェクターと似た効果が得られます。

位相のずれ
(phase shift) は、波動性が本質的である多くの現象を理解するうえで基本的な量であり、 
ここでも重要な役割を果たしています。