Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Canvasでピアノロールを作る ピアノロールを自作してみてわかった音楽と座標の関係 / We...

Canvasでピアノロールを作る ピアノロールを自作してみてわかった音楽と座標の関係 / Web Audio tokyo 7

2019/1/25、WebAudio.tokyo #7で発表した資料です。

OKUNOKENTARO

January 25, 2019
Tweet

More Decks by OKUNOKENTARO

Other Decks in Programming

Transcript

  1. ͳʹ͛ʹߴػೳ w Ի੍ָ࡞༻ιϑ τ %"8 ͸ઐ໳ੑ͕ߴ͍ͨΊಛԽͨ͠ػೳ͕ଟ͍ w ςΩε τΤσΟ λʹൺ΂Δͱང͔ʹಛघͳ࣮૷

    w طଘͷ΋͋Δ͚Ͳʜ w (6*࣮૷Λੜۀͱ͢Δϑϩϯ τΤϯ υ ɾ ΤϯδχΞͱͯ͠
 ͜ΕΛͪΌΜͱ࣮૷Ͱ͖ΔͱεΩϧΞοϓ͢ΔͷͰ͸
  2. ίʔ υͷߏ଄ export default function App() { // ͻͨ͢Β useState()

    const canvasRef = useRef < HTMLCanvasElement > null; useEffect(() => { // ॳظඳը࣌ॲཧ }, []); useEffect(() => { // Իූ௥Ճ࣌ͷॲཧ }, [notes]); useEffect(() => { // εΫϩʔϧҐஔมߋ࣌ͷॲཧ }, [scrollLeft, scrollTop]); const onDragHorizontalScrollBarKnob = useCallback((ev: React.MouseEvent) => { // ਫฏεΫϩʔϧόʔυϥοά࣌ͷϋϯυϦϯά }, [originXY, mediator]); const onDragVerticalScrollBarKnob = useCallback((ev: React.MouseEvent) => { // ਨ௚εΫϩʔϧόʔυϥοά࣌ͷϋϯυϦϯά }, [originXY, mediator]); const onDragScreen = useCallback((ev: React.MouseEvent) => { // Canvas಺υϥοά࣌ͷૢ࡞ʢԻූ௕ͷมߋʣ }, [scrollBarCoord, currentUuid, originXY, notes]); const onMouseDown = useCallback((ev: React.MouseEvent) => { // Canvas಺ͰͷmousedownϋϯυϦϯά }, [ currentUuid, originXY, notes, scrollBarCoord, isDraggingHorizontalScrollBarKnob, isDraggingVerticalScrollBarKnob ]); const onMouseMove = useCallback((ev: React.MouseEvent) => { // canvas಺ͰͷmousemoveϋϯυϦϯά }, [ currentUuid, originXY, notes, isDraggingHorizontalScrollBarKnob, isDraggingVerticalScrollBarKnob ]); return ( <div className="App"> <canvas onMouseDown={ev => onMouseDown(ev)} onMouseMove={ev => onMouseMove(ev)} ref={canvasRef} width="600" height="400" /> </div> ); }
  3. ઈର࣌ؒ૬ର࣌ؒ w ઈର࣌ؒ w ඵ w ඵͱ͍͏௕͞͸ࠃࡍ୯ҐܥͰఆٛ͞Ε͓ͯΓ
 ਓʹΑͬͯҧ͏ɺ ࠃʹΑͬͯҧ͏ɺ ۂʹΑͬͯҧ͏ɺ

    ͳΜͯ͜ͱ͸ͳ͍ w ૬ର࣌ؒ w ഥ w ഥͷ௕͞͸ۂʹΑͬͯҟͳΔ
 ͳͥͳΒۂʹ͸ςϯϙͱ͍͏֓೦͕͋Γɺ ςϯϙͷ਺஋͕େ͖͍΄Ͳഥͷ௕͞͸୹͘ ͳΔ
  4. ෼ղೳͱ͍͏ج४͕͋Δ w .*%* ʢݫີʹ͸4.'ʣ Ͱ͸جຊతʹ૬ର࣌ؒͰه࿥͞ΕΔ w ૬ର࣌ؒΛઈର࣌ؒʹม׵͢ΔͨΊͷج४Λه࿥͍ͯ͠Δ w ෼ղೳ w

    .5IE ʢ.*%*ϔομνϟϯΫʣ ͷ όΠ τ໨ʹه࿥͞ΕΔ஋ w ૬ର࣌ؒΛઈର࣌ؒʹม׵͢ΔͨΊͷج४
  5. $BOWBTͷඳըʹ൓ө w ಛఆͷԻූ͕Կখઅ໨ͷԿഥ໨ ɾ ԿςΟ οΫ໨ͳͷ͔Λܭࢉ w ͦͷԻූ͸খઅ໨ഥ໨ςΟ οΫ໨͔Βܭࢉͯ͠Ԇ΂ԿςΟ οΫ໨ͳͷ͔ܭࢉ


    ʢ૬ର͚࣌ؒͩͰ͍͍৔߹͜͜·Ͱʣ  w ςϯϙνΣϯδ͕ೖΔͱɺ ςϯϙνΣϯδૠೖςΟ οΫҎ߱͸
 ςΟ οΫͷ௕͕͞มΘΔͷͰͦΕ΋ߟྀ w Ԇ΂ςΟ οΫ਺ͱςϯϙνΣϯδ৘ใ͔ΒͦͷԻූ͸Կඵ໨ͳͷ͔ܭࢉ w $BOWBTͷݱࡏͷදࣔഒ཰Ͱ͸ࠨ୺͔Βӈ୺·Ͱ͕Կඵ͔ΒԿඵ·Ͱ͔ܭࢉ w ಛఆͷԻූ͕ݱࡏͷ$BOWBTͰYԿϐΫηϧ໨ɺ ZԿϐΫηϧ໨ͳͷ͔ܭࢉ w ͦͷԻූͷ௕͕͞ͲΕ͚ͩͳͷ͔ಉ༷ʹܭࢉ͠XJEUIԿϐΫηϧɺ IFJHIUԿϐΫηϧͳͷ͔ܭࢉ w Α ͏΍͘ඳըͰ͖Δ ʂ ʂ