- {/* White keys */}
- {whites.map((k, i) => (
+ {whiteKeys.map((k, i) => (
handleTouch(k.note, true)}
- onPointerUp={() => handleTouch(k.note, false)}
- onPointerLeave={() => handleTouch(k.note, false)}
+ key={k.note}
+ className={`keyboard-fs-white ${activeNotes.has(k.note) ? 'pressed' : ''}`}
+ onPointerDown={() => play(k.note)}
+ onPointerUp={() => stop(k.note)}
+ onPointerLeave={() => stop(k.note)}
+ onPointerCancel={() => stop(k.note)}
>
-
- {NOTE_NAMES[k.note % 12]}
-
+ {k.name}{oct}
))}
- {/* Black keys */}
- {blackPositions.map((bp, i) => (
+ {blackKeys.map((k) => (
handleTouch(bp.note, true)}
- onPointerUp={() => handleTouch(bp.note, false)}
- onPointerLeave={() => handleTouch(bp.note, false)}
- />
+ key={k.note}
+ className={`keyboard-fs-black ${activeNotes.has(k.note) ? 'pressed' : ''}`}
+ style={{ left: `${(k.after + 0.65) * (100 / 7)}%`, width: `${(100 / 7) * 0.65}%` }}
+ onPointerDown={() => play(k.note)}
+ onPointerUp={() => stop(k.note)}
+ onPointerLeave={() => stop(k.note)}
+ onPointerCancel={() => stop(k.note)}
+ >
+ {k.name}
+
))}