Sinewave Shotgun
完全プロシージャル
GLSLでは当然フィルターなんて実装できないので、
代わりに大量のサイン波を用いて不協和音をばら撒き、それっぽいハイハット音を作り出す サイン波を大量に生成しなければならない都合上、CPUでの生成はやや不適 code:glsl
vec2 shotgun( float t, float spread, float snap ) {
vec2 sum = vec2( 0.0 );
for ( int i = 0; i < 64; i ++ ) {
vec3 dice = pcg3df( vec3( i ) );
float partial = exp2( spread * dice.x );
partial = mix( partial, floor( partial + 0.5 ), snap );
sum += vec2( sin( TAU * t * partial ) ) * rotate2D( TAU * dice.y );
}
return sum / 64.0;
}
pcg3df はpcg3dをfloat vec3で入出力できるようにしたもの 要はseeded randomが作れれば良い
snap というパラメータを上げていくと、ばら撒かれた不協和音が整数倍に近づき、整った音に近づく
Dittytoy