Z-Frame String Instrument

Sign in
user

Dette blir et spennende prosjekt! Jeg lager et interaktivt Z-ramme strengeinstrument med følgende funksjoner:

  • En gyllen Z-ramme med øvre/nedre horisontale bjelker og diagonal skråbjelke
  • Master-streng permanent plassert til høyre
  • Dra fra master-strengens topp-anker for å opprette nye strenger
  • Horisontalt dra for å finjustere plassering
  • Dra tilbake mot høyre for å slette (merge med master)
  • Visuell feedback med triggerområder over og under diagonalen

Strenglengdene beregnes geometrisk basert på hvor de krysser diagonalen - kortere strenger til venstre gir høyere oktav, lengre til høyre gir lavere oktav.

Z-Frame String Instrument
Generated
Rewritten
Generated
Generated
Generated
Generated
Generated
Generated
user

Denne feilen oppstår når ResizeObserver-oppdateringer trigger nye layout-endringer i en løkke. Jeg fikser dette ved å bruke requestAnimationFrame for å debounce oppdateringene, noe som forhindrer at observasjonsløkken blir avbrutt.

Fix ResizeObserver Error
Rewritten
user

Nå implementerer jeg audio- og trigger-logikken for instrumentet. Dette inkluderer:

  • Web Audio API for lydgenerering med oscillatorer
  • Tre trigger-soner per streng: øvre segment (overtone), nedre segment (grunntone), og hele strengen (begge)
  • Frekvensberegning basert på segmentlengder (f ∝ 1/L)
  • Visuell feedback med glow-effekt når strenger spilles
  • Dimming-funksjon for å deaktivere øvre segment

Klikk på de forskjellige delene av strengene for å høre hvordan geometrien påvirker tonehøyden!

Audio og Trigger-logikk
Rewritten
Rewritten
Rewritten
Rewritten
Rewritten
Generated
user

Jeg ser problemene. La meg fikse alt:

  1. Audio-kontekst må initialiseres ved første brukerinteraksjon (nettleser-krav)
  2. SVG event handlers trenger bedre håndtering med pointer events
  3. Master-strengen skal nå også kunne spilles
  4. Dragging fikses med bedre mouse/touch-håndtering

Jeg forenkler og fikser hele systemet nå.

Fiks Interaksjon og Master
Rewritten
Rewritten
Rewritten
Rewritten
Rewritten
Rewritten
Rewritten