波形博物館
このページは?
JavaScriptで作った
「数式シンセ」
で作成された、数式と波形とスペクトルたちです。画像はリンクになっており、クリックすると、そのように調律された音色と音階にジャンプできます。
ではさっそくどうぞ。
sin波いじり系
絶対値(全波整流)
T = 2*pi*ph
wave = abs(sin(0.5*T))
x = wave
wave*0.8
ひとこと:スペクトルだけ見るとノコギリ波的ですが、音はかなり丸くなっています。倍音控えめなのかも。
ごらんのとおり、並進対称性がさらに増えるため、波長が半分になります。
sin(0.5*T)としたのはそのためです。
後半のないsin(半波整流)
T = 2*pi*ph
wave = max(sin(T),0)
x = wave
wave*1.0
ひとこと:なぜか、2,4,6,…と、偶数次が目立ちます。
というのは、実はこのグラフは、 \( \text{max}(\text{sin}~t,0) =
\frac{1}{2}\text{sin}~t + \frac{1}{2}|\text{sin}~t| \)
と書くことが出来るからだそうです。た、確かに……。つまり、上で書いた全波整流が混ざっていることになります。
全波整流 \( |\text{sin}~t| \)
は周波数が2倍になります。そのため、偶数次の成分が目立つのだと……。
一回置きに位相を変更する正弦波
off = 0.5 # 0..1(1=360°, 0.25=90°)
p = ph*2
a = p - floor(p) # 0..1
k = floor(p) # 0 or 1
wave = sin(2*pi*(a + k*off))
(wave*0.8)
ひとこと:今度は奇数次しかないです。つまり矩形波にかなり似た音になります。
後半の位相を変えていくと、今度は2倍音が現れるものの、それ以降の偶数次は現れません。
変調波が矩形波になっているため、
「時間軸をn等分した離散的な周期信号はn倍音を含まない」法則が影響しているようです。
三周期で位相を変化させる正弦波
N = 3
p = ph*N
k = floor(p)
a = p - k
off0 = 0.00
off1 = 0.333
off2 = 0.666
off = (k==0 ? off0 : (k==1 ? off1 : off2))
wave = (sin(2*pi*(a + off)))
wave*0.8
ひとこと:今度は3倍, 6倍, 9倍……がなくなります。わかりやすいですね。
これはステップ波形のスペクトルによく似ています。
位相のオフセットは0.333おきにすると3倍音が最小化されるようでした。
1周期ごとに正弦波と矩形波が切り替わる波形
(ph < 0.5) ? sin(4*pi*ph) : ((ph < 0.75) ? 1 : -1)
ひとこと:想像されているよりもかなり複雑な倍音が出ます。
1周期ごとに正弦波とノコギリ波が切り替わる波形
(ph < 0.5) ? sin(4*pi*ph) : (2*((( (ph-0.5)*2 ) + 0.5) % 1) - 1)
ひとこと:こちらも同じく。
可算合成an-b系
1n-0波 / 可算合成ノコギリ波(5-limit JI)
aa = 2
ab = 3
ac = 4
ad = 5
ae = 6
af = 7
ag = 8
ah = 9
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:第n倍音をどんどん足しつつ、各振幅を1/nにすると、ノコギリ波になります。
これを原音として、フィルターをかけていくと、ちょっとだけピアノっぽくなったりします。
実際のところ、ピアノの弦というのは低音弦になるにつれ叩く場所が固定端に近くなり高次倍音が出やすく、
高音弦になるにつれ叩く場所がどんどん中央に寄っていくため高音ほど偶数倍音が少ない、という特性があるようです。
これがシンセで言うと(すごくざっくり言うと)ローパスフィルター+フィルターエンベロープっぽい挙動になるのだ……とか……?
(実際は低音部が倍音が整数倍からズレるとか、高音部は何本も弦を使っているとかで更に複雑だそうですが)
ちなみに、こちらのJSSでなら、ノコギリ波は可算合成ではなく、識別子
ph と、剰余演算子
% で書いた方が綺麗に書けます。
こちら
で試してみてください。
2n-1波 / 可算合成矩形波(5-limit JI)
aa = 3
ab = 5
ac = 7
ad = 9
ae = 11
af = 13
ag = 15
ah = 17
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:第(2n-1)倍音をどんどん足しつつ、各振幅を 1/(2n-1)
にすると、矩形波になります。閉管で出がちな、管楽器などでよく聞かれる音です。
ちなみに、矩形波も識別子
ph と、剰余演算子
% と、三項演算子
? で書いた方が綺麗に書けます。
こちら
で試してみてください。
3n-2波(5-limit JI)
aa = 4
ab = 7
ac = 10
ad = 13
ae = 16
af = 19
ag = 22
ah = 25
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:1,4,7,10,13,…,25という倍音列を可算合成したものです。ナイフのような何かのような、なんとも言えない形をしています。
現実ではこのような音を出す楽器を設計するのは難しいようです。フィルターを物理的に設計するような感じなのかな。
可算合成はクリップしやすく、別の倍音もスペクトルに出てきています。
4n-3波(5-limit JI)
aa = 5
ab = 9
ac = 13
ad = 17
ae = 21
af = 25
ag = 29
ah = 33
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:結構綺麗な形です。個人的には、440Hzでは13倍音が主張してくるように聞こえます。
5n-4波(5-limit JI)
aa = 6
ab = 11
ac = 16
ad = 21
ae = 26
af = 31
ag = 36
ah = 41
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:何とも言えない形です。高調波成分が強調されているだけあって、ベルのような音ですね。
11倍音が面白かったので、音色とよく合うように16:19:22:25:28:31とかが試せるJIスケールも作りました。
ご興味の方は、
こちら
で試して見てください。a d g j k l …
と弾くとそれっぽくなります。差音として3が現れますし、3/2とかをいい感じで混ぜるとまた面白かったりして?
6n-5波(5-limit JI)
aa = 7
ab = 13
ac = 19
ad = 25
ae = 31
af = 37
ag = 43
ah = 49
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:変な形です! こうなるのか……。
7n-6波(5-limit JI)
aa = 8
ab = 15
ac = 22
ad = 29
ae = 36
af = 43
ag = 50
ah = 57
T = 2*pi*ph
wave = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
x = wave
wave*0.15
ひとこと:変な形です(コメントがネタ切れしましたw)この後、高調波になっていくとナイキストで折り返してヘンな音が入りつつも、サイン波に近づいていくのです。
標本系
位相を粗くサンプリングする階段波
N = 12
q = floor(ph*N)/N
sin(2*pi*q)
ひとこと:
ph を12段階に丸めてからサイン波に突っ込んでる形です。ビットクラッシャーの時間方向版です。
正弦波からサンプル点を線形補完する
N = 5
u = ph*N
i = floor(u)
a = sin(2*pi*(i/N))
b = sin(2*pi*((i+1)/N))
f = u - i
a + (b-a)*f
ひとこと:
ph を5段階に丸めて、直線でつないで再構成します。
ホールドと線形補完の中間
N = 10
u = ph*N
i = floor(u)
f = u - i
a = sin(2*pi*(i/N))
b = sin(2*pi*((i+1)/N))
mix = 0.35
hold = a
lin = a + (b-a)*f
hold*(1-mix) + lin*mix
ひとこと:
mix = 0 なら階段化、
mix = 1なら線形補完です。
今回は
mix = 0.35 なので、どちらとも言えず溶けています。
見たところ、サンプリング数(今回は
N)の一つ上と一つ下の倍音が顕在化しているみたいですね。
トリガー信号が一定以上のときだけ波を出す
N = 3
gate = step(sin(2*pi*ph*N))
sin(2*pi*ph) * gate
ひとこと:
N = 3 のゲート用の波形(0または1)を得て、それによって発音するかどうかを決めています。
N を自由に変えても色んな面白い形の波が出てきます。やはりNの前後の周波数が強くなる感じ?
トリガーでサンプリングしたような段階的変調
N = 7
k = floor(ph*N)
held = sin(2*pi*(k/N)*3)
sin(2*pi*ph) * (0.5 + 0.5*held)
ひとこと:
held は
このような波形で、それによって音量を変動させています。
ChatGPTいわく「モジュラーシンセによくある」ということなのですが、当の私が例によって無知なのであまりわからないです(苦笑)
ふしぎなことに、こちらは
N = 7の前後である6,8で倍音が消えるようです。なんでなんだろう?
部分音合成によるn平均律用波形
12平均律ノコギリ波
#Formula
T = 2*pi*ph
wave1 = sin(T)
tanh(0.8*wave1)
#Partials
#ratio amp
1 1
2^(12/12) 0.5
2^(19/12) 0.333
2^(24/12) 0.25
2^(28/12) 0.20
2^(31/12) 0.166
2^(34/12) 0.14
2^(36/12) 0.125
2^(38/12) 0.11
2^(40/12) 0.10
2^(42/12) 0.09
2^(43/12) 0.083
2^(44/12) 0.07
ひとこと:ノコギリ波の上に乗っかってくるスペクトルを、12平均律上にクォンタイズ(?)したものです。
新機能のPartialを使って、非周期的な(Inharmonicな)部分音を追加しています。
波形を見ても、周期は壊れてしまっていて「らしきもの」になっており、
最大値と最小値自体がゆらいでいる=うなりが可視化されているようです。
倍音が少し高くなっていく分、明るさが目立つような気がしますね。Resynthesisとかすれば色んな音をこういう風に出来たりするのかしら。
13平均律ノコギリ波
#Formula
T = 2*pi*ph
wave1 = sin(T)
tanh(0.8*wave1)
#Partials
#ratio amp
1 1
2^(13/13) 0.5
2^(20/13) 0.333
2^(26/13) 0.25
2^(30/13) 0.20
2^(43/13) 0.166
2^(36/13) 0.14
2^(39/13) 0.125
2^(41/13) 0.11
2^(43/13) 0.10
2^(45/13) 0.09
2^(46/13) 0.083
2^(48/13) 0.07
ひとこと:今度は13平均律上にクォンタイズ(?)したものです。結構な変わり種です。
詳しくは
Xenharmonic Wikiの13edoのページを見てみてください。 あえて3/2にあたる音程として、6\13 =
646.15centsを拾って加算しているのは、 その五度を持つスケール、
Oneirotonic
=
5L3s,
LLsLLsLsが好きだからです。
良かったら、上の画像をクリックし、「adgqet134」をいい感じに弾いてみてください。特に「t134」のところが、憂鬱で切なくておすすめです。
12EDOで言うと、メロディックメジャー = LLsLsLL と ディミニッシュ = LsLsLsLs
の間みたいなセンスだと思うんですよね。
13平均律調整ノコギリ波
#Formula
T = 2*pi*ph
wave1 = sin(T)
tanh(0.8*wave1)
#Partials
#ratio amp
1 1 // 1
2^(13/13) 0.5 // 2
2^(20/13) 0.15 // 3
2^(26/13) 0.25 // 4
2^(30/13) 0.20 // 5
2^(33/13) 0.00 // 6x
2^(36/13) 0.09 // 7
2^(39/13) 0.00 // 8x
2^(45/13) 0.03 // 9
ひとこと:上の波形の高調波がちょっときつかったので調整したものです。同じくスケールも13平均律に調整してあります。
デューティ波+拡張加算合成
#Formula
wave1 = ( (ph % 1) < 0.2 ? 1 : -1 )
tanh(0.8*wave1)
#Partials
#ratio amp
1 1
3 0.333 // 2*(3/2)
9/2 0.222 // 3*(3/2)
6 0.166 // 4*(3/2)
15/2 0.200 // 5*(3/2)
9 0.111 // 6*(3/2)
21/2 0.100 // 7*(3/2)
12 0.083 // 8*(3/2)
ひとこと:上音の第一音が2/1から3/1になるようにPartialsの上音列を乗算しています。
デューティ波にするとどうなるかな~と思って試してみたところ、
ファミコン感に非整数次倍音(4.5, 7.5, 10.5)が足されてなかなか面白いです。
つまり、非整次のデューティ波がいっぱい複製されてこんな感じになっています。
オクターブ感強めのノンオクターブ純正音階に調律してあるので弾いてみると楽しいかも?
その他日々作ったもの
6n-5波+AM変調
aa = 7
ab = 13
ac = 19
ad = 25
ae = 31
af = 37
ag = 43
ah = 49
T = pi*ph
wave1 = sin(T) + (sin(T*aa)) / aa + (sin(T*ab)) / ab + (sin(T*ac)) / ac + (sin(T*ad)) / ad + (sin(T*ae)) / ae + (sin(T*af)) / af + (sin(T*ag)) / ag + (sin(T*ah)) / ah
wave2 = (wave1)*sin(T)
tanh(0.8*wave2 -0.3)
ひとこと:2025/12/07作成。とりあえずAM変調を試してみたところ、なんか変な形が誕生。
2,5,8,11,...(3n-1)...の倍音が少なめという謎の特徴を持っており、
なら3倍音とか7倍音が綺麗に響く感じならどうかと、15ED3(1902centsを15等分する音階)などを試してみることに。