GLSLでキックを鳴らします
サイン波を高いところから50Hzに叩きつけろ
基本形
ピッチエンベロープの 5.0 と 40.0 はパラメタなので気持ちい値を見つけるんだよ
https://scrapbox.io/files/64dceae6dde09a001ba5d224.ogg
code:glsl
float kick( float t ) {
float env = exp( -10.0 * t );
float phase = 50.0 * t;
phase -= 5.0 * exp( -40.0 * t );
return env * sin( TAU * phase );
}
ディケイの低音がよりメリハリ良く聞こえるように
https://scrapbox.io/files/64dd999fc4994d001c3b2822.ogg
code:glsl
float kick( float t ) {
float env = smoothstep( 0.3, 0.1, t );
float phase = 50.0 * t;
phase -= 5.0 * exp( -40.0 * t );
return env * sin( TAU * phase );
}
ピッチエンベロープ2度がけ
ピッチの自然減衰を2つにすることでアタックがより鋭く
https://scrapbox.io/files/64dd99ff3ffc11001b27530d.ogg
code:glsl
float kick( float t ) {
float env = exp( -5.0 * t );
float phase = 50.0 * t;
phase -= 5.0 * exp( -40.0 * t );
phase -= 3.0 * exp( -200.0 * t );
return env * sin( TAU * phase );
}
Hard Clip
https://scrapbox.io/files/64dd9a4bbcfe39001b30067d.ogg
code:glsl
float clip( float x ) {
return clamp( x, -1.0, 1.0 );
}
float kick( float t ) {
float env = exp( -5.0 * t );
float phase = 50.0 * t;
phase -= 6.0 * exp( -40.0 * t );
return clip( 20.0 * env * sin( TAU * phase ) );
}
Fold
倍音が豊かに ハリが出ます
https://scrapbox.io/files/64dd9ab9c6b8ad001b286dae.ogg
code:glsl
float fold( float x ) {
return ( 1.0 - 4.0 * abs( fract( x / 4.0 + 0.25 ) - 0.5 ) );
}
float kick( float t ) {
float decay = exp( -5.0 * t );
float phase = 50.0 * t;
phase -= 6.0 * exp( -40.0 * t );
return fold( 1.8 * decay * sin( TAU * phase ) );
}
Noise足してみる
ノイズでフェーズモジュレーション 空気感が出る
noise 関数はホワイトノイズをサンプリングしているもんだと思ってくださいな
FBMとかでも良いと思います
https://scrapbox.io/files/64dd9b12f35dd4001ced21e1.ogg
code:glsl
float kick( float t ) {
float decay = exp( -5.0 * t );
float phase = 50.0 * t;
phase -= 3.0 * exp( -40.0 * t );
return decay * sin( TAU * phase + noise( 0.004 * t ) );
}
本来はフィルターとレゾナンスでやらなければいけないものだと思うけれども、まあサイン波重ねればそうなるよね
https://scrapbox.io/files/64dd9b43609d40001c649104.ogg
code:glsl
float kick( float t ) {
float decay = exp( -5.0 * t );
float phase = 50.0 * t;
phase -= 5.0 * exp( -40.0 * t );
float decay2 = exp( -40.0 * t );
float phase2 = 1000.0 * t;
phase2 -= 10.0 * exp( -700.0 * t );
return clip(
20.0 * decay * sin( TAU * phase ) +
290.0 * decay2 * sin( TAU * phase2 )
);
}
See also