Sound resource:

https://samplefocus.com/samples/japanese-percussive-sound-falling-hit?page=3

Visual:

https://editor.p5js.org/Siming2024/sketches/VCRrlpJsU

(color palett) https://www.google.com/search?sca_esv=c64f92f75d6f9f24&rlz=1C5CHFA_enUS1004US1004&sxsrf=ADLYWIJAlO4RrGeFIRmMa_amAvcdFMIHLg:1732167987715&q=能剧+能装束&udm=2&fbs=AEQNm0AbzhUJjXv6jRup8eVc0BvPyH5PazCaW205cG-Bd0in0SeU-Q4GVbDidOCCAlv8ddwnuh7lPh3aYhqMJdmlhqKO8rDglsPvyMjbq9rCVLJ_yLz05yoyCj0IoTno93uYggnfsWN1FM92F-TFvqgBlLlmP8zrNwNJEd3LcLFp9n7dqviEvbckZCE_JI4OCNw2SzCBq6GPkqgWkri4s4r_BLQYM2Jsmw&sa=X&ved=2ahUKEwjfjOXM3OyJAxVRMlkFHUYzHBUQtKgLegQIFBAB&biw=1143&bih=733&dpr=2

Code references:

https://p5js.org/reference/p5/int/

function setGradient(x, y, w, h, c1, c2) { noFill(); for (let i = y; i <= y + h; i++) { let inter = map(i, y, y + h, 0, 1); let c = lerpColor(c1, c2, inter); stroke(c); line(x, i, x + w, i);

https://editor.p5js.org/pattvira/sketches/mutDHiETf

https://www.youtube.com/watch?v=lPgscmgxcH0

// assign different colors to different fan according to the position let colorIndex = (row * cols + col) % 5; fill(getFanColor(colorIndex));