import { type Editor } from "../../main"; import { makeExampleFactory } from "../Documentation"; export const mouse = (app: Editor): string => { let makeExample = makeExampleFactory(app); return ` # Mouse Using the mouse is a fun way to control your code. It's basically an X/Y controller that you don't have to pay for! There are clever actions you can do with the mouse from generating notes to activating scripts conditionally! ## Mouse position You can get the current position of the mouse on the screen by using the following functions: - mouseX(): the horizontal position of the mouse on the screen (as a floating point number). - mouseY(): the vertical position of the mouse on the screen (as a floating point number). ${makeExample( "Vibrato controlled by mouse", ` beat(.25) :: sound('sine') .note([0,4,5,10,11,15,16] .palindrome() .scale('pentatonic', 50).beat(.25) + [-12, 0, 12].beat(0.25)) .vib(mouseX()/700).vibmod(mouseY()/200) .pan(r(0, 1)) .room(0.35).size(4).out() `, true, )}
Current mouse position can also be used to generate notes: - noteX(): returns a MIDI note number (0-127) based on the horizontal position of the mouse on the screen. - noteY(): returns a MIDI note number (0-127) based on the vertical position of the mouse on the screen. ${makeExample( "Using the mouse to output a note!", ` beat(.25) :: sound('sine') .lpf(7000) .delay(0.5).delayt(1/6).delayfb(0.2) .note(noteX()) .room(0.35).size(4).out()`, true, )} ## Mouse and Arrays You can use the mouse to explore the valuesq contained in an Array: - mouseX(): returns a value from a list by splitting the horizontal space of the screen in _n_ sections. - mouseY(): returns a value from a list by splitting the vertical space of the screen in _n_ sections. ${makeExample( "Taking values out of an Array with the mouse", ` log([1,2,3,4].mouseX()) log([4,5,6,7].mouseY()) `, true, )} `; };