From bb711332242313a2ab64f3be4b85e6efcd2d23b4 Mon Sep 17 00:00:00 2001 From: Bubobubobubobubo Date: Sat, 9 Sep 2023 08:40:49 +0000 Subject: [PATCH] deploy: 5ce89dbaf2b391ff2bc46385872ca3e1881377f8 --- assets/{index-c2defad4.js => index-bae5625d.js} | 2 +- index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename assets/{index-c2defad4.js => index-bae5625d.js} (99%) diff --git a/assets/index-c2defad4.js b/assets/index-bae5625d.js similarity index 99% rename from assets/index-c2defad4.js rename to assets/index-bae5625d.js index 0a3df97..ddd4f31 100644 --- a/assets/index-c2defad4.js +++ b/assets/index-bae5625d.js @@ -185,7 +185,7 @@ mod(.5) :: snd('arpy').note( constructor(\${params}) { \${} } -}`,{label:"class",detail:"definition",type:"keyword"}),Sn('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Sn('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],DS=new sC,GC=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function ks(n){return(e,t)=>{let r=e.node.getChild("VariableDefinition");return r&&t(r,n),!0}}const Hw=["FunctionDeclaration"],zw={FunctionDeclaration:ks("function"),ClassDeclaration:ks("class"),ClassExpression:()=>!0,EnumDeclaration:ks("constant"),TypeAliasDeclaration:ks("type"),NamespaceDeclaration:ks("namespace"),VariableDefinition(n,e){n.matchContext(Hw)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function $C(n,e){let t=DS.get(e);if(t)return t;let r=[],i=!0;function a(s,o){let l=n.sliceString(s.from,s.to);r.push({label:l,type:o})}return e.cursor(Rt.IncludeAnonymous).iterate(s=>{if(i)i=!1;else if(s.name){let o=zw[s.name];if(o&&o(s,a)||GC.has(s.name))return!1}else if(s.to-s.from>8192){for(let o of $C(n,s.node))r.push(o);return!1}}),DS.set(e,r),r}const xS=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,QC=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName",".","?."];function Ww(n){let e=Mt(n.state).resolveInner(n.pos,-1);if(QC.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&xS.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let r=[];for(let i=e;i;i=i.parent)GC.has(i.name)&&(r=r.concat($C(n.state.doc,i)));return{options:r,from:t?e.from:n.pos,validFor:xS}}const ai=is.define({name:"javascript",parser:c0.configure({props:[Yo.add({IfStatement:xl({except:/^\s*({|else\b)/}),TryStatement:xl({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:E0,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),r=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:r?1:2)*n.unit},Block:O0({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":xl({except:/^{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),Go.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":SC,BlockComment(n){return{from:n.from+2,to:n.to-2}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),qC={test:n=>/^JSX/.test(n.name),facet:Wm({commentTokens:{block:{open:"{/*",close:"*/}"}}})},VC=ai.configure({dialect:"ts"},"typescript"),HC=ai.configure({dialect:"jsx",props:[Xm.add(n=>n.isTop?[qC]:void 0)]}),zC=ai.configure({dialect:"jsx ts",props:[Xm.add(n=>n.isTop?[qC]:void 0)]},"typescript"),Xw="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(n=>({label:n,type:"keyword"}));function em(n={}){let e=n.jsx?n.typescript?zC:HC:n.typescript?VC:ai;return new _o(e,[ai.data.of({autocomplete:J0(QC,NC(Vw.concat(Xw)))}),ai.data.of({autocomplete:Ww}),n.jsx?Jw:[]])}function Zw(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function LS(n,e,t=n.length){for(let r=e==null?void 0:e.firstChild;r;r=r.nextSibling)if(r.name=="JSXIdentifier"||r.name=="JSXBuiltin"||r.name=="JSXNamespacedName"||r.name=="JSXMemberExpression")return n.sliceString(r.from,Math.min(r.to,t));return""}function Kw(n){return n&&(n.name=="JSXEndTag"||n.name=="JSXSelfCloseEndTag")}const jw=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Jw=Pe.inputHandler.of((n,e,t,r)=>{if((jw?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||r!=">"&&r!="/"||!ai.isActiveAt(n.state,e,-1))return!1;let{state:i}=n,a=i.changeByRange(s=>{var o;let{head:l}=s,c=Mt(i).resolveInner(l,-1),d;if(c.name=="JSXStartTag"&&(c=c.parent),!(c.name=="JSXAttributeValue"&&c.to>l)){if(r==">"&&c.name=="JSXFragmentTag")return{range:fe.cursor(l+1),changes:{from:l,insert:">"}};if(r=="/"&&c.name=="JSXFragmentTag"){let p=c.parent,m=p==null?void 0:p.parent;if(p.from==l-1&&((o=m.lastChild)===null||o===void 0?void 0:o.name)!="JSXEndTag"&&(d=LS(i.doc,m==null?void 0:m.firstChild,l))){let _=`/${d}>`;return{range:fe.cursor(l+_.length),changes:{from:l,insert:_}}}}else if(r==">"){let p=Zw(c);if(p&&!Kw(p.lastChild)&&i.sliceDoc(l,l+2)!="`}}}}return{range:s}});return a.changes.empty?!1:(n.dispatch(a,{userEvent:"input.type",scrollIntoView:!0}),!0)}),kS={attack:{name:"attack",category:"synthesis",description:"ADSR envelope attack time (in seconds)",example:"sound('sawtooth').attack(.5).out()"},decay:{name:"decay",category:"synthesis",description:"ADSR envelope decay time (in seconds)",example:"sound('sawtooth').decay(.5).out()"},sustain:{name:"sustain",category:"synthesis",description:"ADSR envelope sustain level (0-1)",example:"sound('sawtooth').sustain(.5).out()"},release:{name:"release",category:"synthesis",description:"ADSR envelope release time (in seconds)",example:"sound('sawtooth').release(.5).out()"},fmwave:{name:"fmwave",category:"synthesis",description:"FM synth modulator waveform",example:"sound('fm').fmwave('sine').out()"},fmi:{name:"fmi",category:"audio",description:"FM synth modulator index",example:"sound('fm').fmi([1,2].beat()).out()"},fmh:{name:"fmh",category:"audio",description:"FM synth modulator ratio",example:"sound('fm').fmi(2).fmh(2).out()"},fmattack:{name:"fmattack",category:"synthesis",description:"FM synth modulator ADSR envelope attack time (in seconds)",example:"sound('sine').fmi(2).fmattack(.5).out()"},fmdecay:{name:"fmdecay",category:"synthesis",description:"FM synth modulator ADSR envelope decay time (in seconds)",example:"sound('sine').fmi(2).fmdecay(.5).out()"},fmsustain:{name:"fmsustain",category:"synthesis",description:"FM synth modulator ADSR envelope sustain level (0-1)",example:"sound('sine').fmi(2).fmsustain(.5).out()"},fmrelease:{name:"fmrelease",category:"synthesis",description:"FM synth modulator ADSR envelope release time (in seconds)",example:"sound('sine').fmi(2).fmrelease(.5).out()"},repeatAll:{name:"repeatAll",category:"patterns",description:"Repeat every array elements n times",example:"[0,1,2,3].repeatAll(2)"},quant:{name:"quant",category:"functions",description:"Quantize a value in the given array",example:"quant(30, [0,1,2,3])"},log:{name:"log",category:"javascript",description:"Log a value in the console",example:"log('Hello, world')"},div:{name:"div",category:"patterns",description:"Returns next value every n beats or true and false alternatively",example:"div(4, 50) // 2 beats of true, 2 beats of false, 50/50."},n:{name:"n",category:"audio",description:"Sample number or synth oscillator partials count",example:"sound('dr').n([1,2].beat()).out()"},note:{name:"note",category:"patterns",description:"MIDI note number (0-127)",example:"sound('jvbass').note(50).out()"},vel:{name:"vel",category:"audio",description:"Velocity or sound volume (0-1)",example:"sound('cp').vel(.5).out()"},palindrome:{name:"palindrome",category:"patterns",description:"Returns palindrome of the current array",example:"[0,1,2,3].palindrome()"},cutoff:{name:"cutoff",category:"filter",description:"Lowpass filter cutoff frequency",example:"sound('cp').cutoff(1000).out()"},resonance:{name:"resonance",category:"filter",description:"Lowpass filter resonance",example:"sound('cp').resonance(1).out()"},hcutoff:{name:"hcutoff",category:"filter",description:"Highpass filter cutoff frequency",example:"sound('cp').hcutoff(1000).out()"},hresonance:{name:"hresonance",category:"filter",description:"Highpass filter resonance",example:"sound('cp').hresonance(1).out()"},bandf:{name:"bandf",category:"filter",description:"Bandpass filter cutoff frequency",example:"sound('cp').bandf(1000).out()"},bandq:{name:"bandq",category:"filter",description:"Bandpass filter resonance",example:"sound('cp').bandq(1).out()"},vowel:{name:"vowel",category:"filter",description:"Vowel filter type",example:"sound('cp').vowel('a').out()"},coarse:{name:"coarse",category:"synthesis",description:"Artificial sample-rate lowering",example:"mod(.5)::snd('pad').coarse($(1) % 16).clip(.5).out();"},crush:{name:"crush",category:"synthesis",description:"Bitcrushing effect. 1 is extreme, superior values are more subtle.",example:""},speed:{name:"speed",category:"sampling",description:"Sample playback speed",example:"sound('cp').speed(.5).out()"},shape:{name:"shape",category:"synthesis",description:"Waveshaping distorsion",example:"sound('cp').shape(.5).out()"},delay:{name:"delay",category:"effect",description:"Delay effect dry/wet",example:"sound('cp').delay(.5).out()"},delayfb:{name:"delayfb",category:"effect",description:"Delay effect feedback amount (0-1)",example:"sound('cp').delay(0.2).delayfb(.5).out()"},delaytime:{name:"delaytime",category:"effect",description:"Delay effect delay time (in seconds)",example:"sound('cp').delay(0.2).delaytime(.5).out()"},gain:{name:"gain",category:"audio",description:"Playback volume",example:"sound('cp').gain(.5).out()"},bar:{name:"bar",category:"patterns",description:"Returns list index for the current bar (with wrapping)",example:"[0,1,2,3].bar()"},beat:{name:"beat",category:"patterns",description:"Returns list index for the current beat (with wrapping)",example:"[0,1,2,3].beat()"},room:{name:"room",category:"effect",description:"Reverb effect room amount",example:"sound('cp').room(.5).out()"},size:{name:"size",category:"effect",description:"Reverb effect room size",example:"sound('cp').size(.5).out()"},usine:{name:"usine",category:"modulation",description:"Unipolar sinusoïdal low-frequency oscillator",example:"usine(5) // 5 hz oscillation"},sine:{name:"usine",category:"modulation",description:"Sinusoïdal low-frequency oscillator",example:"usine(5) // 5 hz oscillation"},utriangle:{name:"utriangle",category:"modulation",description:"Unipolar triangular low-frequency oscillator",example:"utriangle(5) // 5 hz oscillation"},triangle:{name:"triangle",category:"modulation",description:"Triangular low-frequency oscillator",example:"triangle(5) // 5 hz oscillation"},usaw:{name:"usaw",category:"modulation",description:"Unipolar sawtooth low-frequency oscillator",example:"usaw(5) // 5 hz oscillation"},saw:{name:"saw",category:"modulation",description:"Sawtooth low-frequency oscillator",example:"saw(5) // 5 hz oscillation"},square:{name:"square",category:"modulation",description:"Square low-frequency oscillator",example:"square(5) // 5 hz oscillation"},usquare:{name:"usquare",category:"modulation",description:"Unipolar square low-frequency oscillator",example:"usquare(5) // 5 hz oscillation"},rhythm:{name:"rhythm",category:"rhythm",description:"Variant of the euclidian algorithm function",example:"rhythm(.5, 3, 8) // time, pulses, steps"},let:{name:"let",category:"javascript",description:"Variable assignation",example:"let baba = 10"},onbeat:{name:"onbeat",category:"rhythm",description:"Return true when targetted beat(s) is/are reached",example:"onbeat([1,2,3]) // true on beats 1, 2 and 3"},oncount:{name:"oncount",category:"rhythm",description:"Return true when targetted beat(s) is/are reached in the given period",example:"oncount([1,2,3], 4) // true on beats 1, 2 and 3 in a 4 beats period"},mod:{name:"mod",category:"rhythm",description:"return true every n pulsations.",example:"mod(1) :: log(rand(1,5))"},modp:{name:"modp",category:"rhythm",description:"return true every n ticks.",example:"modp(8) :: log(rand(1,5))"},euclid:{name:"euclid",category:"rhythm",description:"Iterator-based euclidian rhythm generator",example:"euclid($(1), 3, 8) // iterator, pulses"},oneuclid:{name:"oneuclid",category:"rhythm",description:"Variant of the euclidian rhythm generator",example:"oneuclid(3, 8) // iterator, pulses"},bin:{name:"bin",category:"rhythm",description:"Convert a decimal number to binary rhythm generator",example:"bin($(1), 9223) // iterator, number to convert"},binrhythm:{name:"binrhythm",category:"rhythm",description:"Binary rhythm generator",example:"binrhythm(.5, 9223) :: sound('cp').out()"},prob:{name:"prob",category:"randomness",description:"Return true with a probability of n %",example:"prob(50) // 50% probability"},rand:{name:"rand",category:"randomness",description:"random floating point number between x and y",example:"rand(1, 10) // between 1 and 10"},irand:{name:"irand",category:"randomness",description:"random integer number between x and y",example:"irand(1, 10) // between 1 and 10"},pick:{name:"pick",category:"randomness",description:"Pick a value in the given array",example:"[1,4,10].pick()"},sound:{name:"sound",category:"audio",description:"Base function to play audio (samples / synths)",example:"sound('bd').out()"},snd:{name:"snd",category:"audio",description:"Base function to play audio (samples / synths). Alias for sound.",example:"sound('bd').out()"},bpm:{name:"bpm",category:"time",description:"Get or set the current beats per minute.",example:"bpm(135) // set the bpm to 135"},out:{name:"out",category:"audio",description:"Connect the sound() chain to the output",example:"sound('clap').out()"},script:{name:"script",category:"core",description:"Execute one or more local scripts",example:"mod(1) :: script(1)"},warp:{name:"warp",category:"core",description:"jumps to the n tick of the clock.",example:"warp(1) :: log('back to the big bang!')"},beat_warp:{name:"beat_warp",category:"core",description:"jumps to the n beat of the clock.",example:"beat_warp(1) :: log('back to the first beat!')"},divbar:{name:"divbar",category:"time",description:"works just like div but at the level of bars instead of beats",example:"divbar(2)::mod(1)::snd('kick').out()"},onbar:{name:"onbar",category:"time",description:"return true when targetted bar(s) is/are reached in period",example:"onbar(4, 4)::mod(.5)::snd('hh').out();"},begin:{name:"begin",category:"sampling",description:"Audio playback start time (0-1)",example:"sound('cp').begin(.5).out()"},end:{name:"end",category:"sampling",description:"Audio playback end time (0-1)",example:"sound('cp').end(.5).out()"},mouseX:{name:"mouseX",category:"mouse",description:"Mouse X position (big float)",example:"log(mouseX())"},mouseY:{name:"mouseY",category:"mouse",description:"Mouse Y position (big float)",example:"log(mouseY())"},noteX:{name:"noteX",category:"mouse",description:"Mouse X position (as MIDI note)",example:"log(noteX())"},noteY:{name:"noteY",category:"mouse",description:"Mouse Y position (as MIDI note)",example:"log(noteY())"},cut:{name:"cut",category:"sampling",description:"Cutting sample when other sample met on same orbit (0 or 1)",example:"sound('cp').cut(1).out()"},pan:{name:"pan",category:"audio",description:"Stereo panning (-1 to 1)",example:"sound('cp').pan(-1).out()"},zrand:{name:"zrand",category:"synthesis",description:"ZzFX randomisation factor",example:"sound('zzfx').zrand(.5).out()"},curve:{name:"curve",category:"synthesis",description:"ZzFX waveshaping (0-3)",example:"sound('zzfx').curve(1).out()"},slide:{name:"slide",category:"synthesis",description:"ZzFX pitch slide",example:"sound('zzfx').slide(1).out()"},deltaSlide:{name:"deltaSlide",category:"synthesis",description:"ZzFX pitch delta slide",example:"sound('zzfx').deltaSlide(1).out()"},pitchJump:{name:"pitchJump",category:"synthesis",description:"ZzFX pitch jump",example:"sound('zzfx').pitchJump(1).out()"},pitchJumpTime:{name:"pitchJumpTime",category:"synthesis",description:"ZzFX pitch jump time (time before jump)",example:"sound('zzfx').pitchJumpTime(1).out()"},zcrush:{name:"zcrush",category:"synthesis",description:"ZzFX bitcrushing",example:"sound('zzfx').zcrush(1).out()"},zdelay:{name:"zdelay",category:"synthesis",description:"ZzFX delay",example:"sound('zzfx').zdelay(1).out()"},tremolo:{name:"tremolo",category:"synthesis",description:"ZzFX weird tremolo effect",example:"sound('zzfx').tremolo(1).out()"},speak:{name:"speak",category:"synthesis",description:"Text to speech synthesizer",example:"mod(2) :: speak('Topos!','fr',irand(0,5))"},midi_outputs:{name:"midi_outputs",category:"midi",description:"List of available MIDI outputs",example:"midi_outputs()"},midi_output:{name:"midi_output",category:"midi",description:"Set the current MIDI output",example:"midi_output('IAC Driver Bus 1')"},midi:{name:"midi",category:"midi",description:"Send a MIDI message",example:"midi(144, 60, 100)"},control_change:{name:"control_change",category:"midi",description:"Send a MIDI control change message",example:"control_change({control: 1, value: 60, channel: 10})"},program_change:{name:"program_change",category:"midi",description:"Send a MIDI program change message",example:"program_change(1, 10)"},sysex:{name:"sysex",category:"midi",description:"Send a MIDI sysex message",example:"sysex(0xF0, 0x7D, 0x00, 0x06, 0x01, 0xF7)"},midi_clock:{name:"midi_clock",category:"midi",description:"Send a MIDI clock message",example:"midi_clock()"},degrade:{name:"degrade",category:"patterns",description:"Removes n% of the given array randomly",example:"[0,1,2,3].degrade(20)"},loop:{name:"loop",category:"patterns",description:"Loop over the given array using an iterator",example:"[0,1,2,3].loop($(1))"},$:{name:"$",category:"patterns",description:"Iterator",example:"[0,1,2,3].loop($(1))"},shuffle:{name:"shuffle",category:"patterns",description:"Shuffle the given array",example:"[0,1,2,3].shuffle()"},rotate:{name:"rotate",category:"patterns",description:"Rotate the given array to the right for n indexes",example:"[0,1,2,3].rotate(2)"},unique:{name:"unique",category:"patterns",description:"Remove duplicates from the given array",example:"[0,1,2,3,3,3].unique()"},add:{name:"add",category:"patterns",description:"Add a value to each element of the given array",example:"[0,1,2,3].add(1)"},sub:{name:"sub",category:"patterns",description:"Substract a value to each element of the given array",example:"[0,1,2,3].sub(1)"},mul:{name:"mul",category:"patterns",description:"Multiply each element of the given array by a value",example:"[0,1,2,3].mul(2)"},division:{name:"div",category:"patterns",description:"Divide each element of the given array by a value",example:"[0,1,2,3].division(2)"}},MS=Jv((n,e,t)=>{let{from:r,to:i,text:a}=n.state.doc.lineAt(e),s=e,o=e;for(;s>r&&/\w/.test(a[s-r-1]);)s--;for(;o0?null:{pos:s,end:o,above:!0,create(l){if(!(a.slice(s-r,o-r)in kS))return{dom:document.createElement("div")};let c=kS[a.slice(s-r,o-r)]||{},d=` +}`,{label:"class",detail:"definition",type:"keyword"}),Sn('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Sn('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],DS=new sC,GC=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function ks(n){return(e,t)=>{let r=e.node.getChild("VariableDefinition");return r&&t(r,n),!0}}const Hw=["FunctionDeclaration"],zw={FunctionDeclaration:ks("function"),ClassDeclaration:ks("class"),ClassExpression:()=>!0,EnumDeclaration:ks("constant"),TypeAliasDeclaration:ks("type"),NamespaceDeclaration:ks("namespace"),VariableDefinition(n,e){n.matchContext(Hw)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function $C(n,e){let t=DS.get(e);if(t)return t;let r=[],i=!0;function a(s,o){let l=n.sliceString(s.from,s.to);r.push({label:l,type:o})}return e.cursor(Rt.IncludeAnonymous).iterate(s=>{if(i)i=!1;else if(s.name){let o=zw[s.name];if(o&&o(s,a)||GC.has(s.name))return!1}else if(s.to-s.from>8192){for(let o of $C(n,s.node))r.push(o);return!1}}),DS.set(e,r),r}const xS=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,QC=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName",".","?."];function Ww(n){let e=Mt(n.state).resolveInner(n.pos,-1);if(QC.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&xS.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let r=[];for(let i=e;i;i=i.parent)GC.has(i.name)&&(r=r.concat($C(n.state.doc,i)));return{options:r,from:t?e.from:n.pos,validFor:xS}}const ai=is.define({name:"javascript",parser:c0.configure({props:[Yo.add({IfStatement:xl({except:/^\s*({|else\b)/}),TryStatement:xl({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:E0,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),r=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:r?1:2)*n.unit},Block:O0({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":xl({except:/^{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),Go.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":SC,BlockComment(n){return{from:n.from+2,to:n.to-2}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),qC={test:n=>/^JSX/.test(n.name),facet:Wm({commentTokens:{block:{open:"{/*",close:"*/}"}}})},VC=ai.configure({dialect:"ts"},"typescript"),HC=ai.configure({dialect:"jsx",props:[Xm.add(n=>n.isTop?[qC]:void 0)]}),zC=ai.configure({dialect:"jsx ts",props:[Xm.add(n=>n.isTop?[qC]:void 0)]},"typescript"),Xw="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(n=>({label:n,type:"keyword"}));function em(n={}){let e=n.jsx?n.typescript?zC:HC:n.typescript?VC:ai;return new _o(e,[ai.data.of({autocomplete:J0(QC,NC(Vw.concat(Xw)))}),ai.data.of({autocomplete:Ww}),n.jsx?Jw:[]])}function Zw(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function LS(n,e,t=n.length){for(let r=e==null?void 0:e.firstChild;r;r=r.nextSibling)if(r.name=="JSXIdentifier"||r.name=="JSXBuiltin"||r.name=="JSXNamespacedName"||r.name=="JSXMemberExpression")return n.sliceString(r.from,Math.min(r.to,t));return""}function Kw(n){return n&&(n.name=="JSXEndTag"||n.name=="JSXSelfCloseEndTag")}const jw=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Jw=Pe.inputHandler.of((n,e,t,r)=>{if((jw?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||r!=">"&&r!="/"||!ai.isActiveAt(n.state,e,-1))return!1;let{state:i}=n,a=i.changeByRange(s=>{var o;let{head:l}=s,c=Mt(i).resolveInner(l,-1),d;if(c.name=="JSXStartTag"&&(c=c.parent),!(c.name=="JSXAttributeValue"&&c.to>l)){if(r==">"&&c.name=="JSXFragmentTag")return{range:fe.cursor(l+1),changes:{from:l,insert:">"}};if(r=="/"&&c.name=="JSXFragmentTag"){let p=c.parent,m=p==null?void 0:p.parent;if(p.from==l-1&&((o=m.lastChild)===null||o===void 0?void 0:o.name)!="JSXEndTag"&&(d=LS(i.doc,m==null?void 0:m.firstChild,l))){let _=`/${d}>`;return{range:fe.cursor(l+_.length),changes:{from:l,insert:_}}}}else if(r==">"){let p=Zw(c);if(p&&!Kw(p.lastChild)&&i.sliceDoc(l,l+2)!="`}}}}return{range:s}});return a.changes.empty?!1:(n.dispatch(a,{userEvent:"input.type",scrollIntoView:!0}),!0)}),kS={toss:{name:"toss",category:"randomness",description:"Toss a coin, true or false",example:"toss() : log('heads')"},attack:{name:"attack",category:"synthesis",description:"ADSR envelope attack time (in seconds)",example:"sound('sawtooth').attack(.5).out()"},decay:{name:"decay",category:"synthesis",description:"ADSR envelope decay time (in seconds)",example:"sound('sawtooth').decay(.5).out()"},sustain:{name:"sustain",category:"synthesis",description:"ADSR envelope sustain level (0-1)",example:"sound('sawtooth').sustain(.5).out()"},release:{name:"release",category:"synthesis",description:"ADSR envelope release time (in seconds)",example:"sound('sawtooth').release(.5).out()"},fmwave:{name:"fmwave",category:"synthesis",description:"FM synth modulator waveform",example:"sound('fm').fmwave('sine').out()"},fmi:{name:"fmi",category:"audio",description:"FM synth modulator index",example:"sound('fm').fmi([1,2].beat()).out()"},fmh:{name:"fmh",category:"audio",description:"FM synth modulator ratio",example:"sound('fm').fmi(2).fmh(2).out()"},fmattack:{name:"fmattack",category:"synthesis",description:"FM synth modulator ADSR envelope attack time (in seconds)",example:"sound('sine').fmi(2).fmattack(.5).out()"},fmdecay:{name:"fmdecay",category:"synthesis",description:"FM synth modulator ADSR envelope decay time (in seconds)",example:"sound('sine').fmi(2).fmdecay(.5).out()"},fmsustain:{name:"fmsustain",category:"synthesis",description:"FM synth modulator ADSR envelope sustain level (0-1)",example:"sound('sine').fmi(2).fmsustain(.5).out()"},fmrelease:{name:"fmrelease",category:"synthesis",description:"FM synth modulator ADSR envelope release time (in seconds)",example:"sound('sine').fmi(2).fmrelease(.5).out()"},repeatAll:{name:"repeatAll",category:"patterns",description:"Repeat every array elements n times",example:"[0,1,2,3].repeatAll(2)"},quant:{name:"quant",category:"functions",description:"Quantize a value in the given array",example:"quant(30, [0,1,2,3])"},log:{name:"log",category:"javascript",description:"Log a value in the console",example:"log('Hello, world')"},div:{name:"div",category:"patterns",description:"Returns next value every n beats or true and false alternatively",example:"div(4, 50) // 2 beats of true, 2 beats of false, 50/50."},n:{name:"n",category:"audio",description:"Sample number or synth oscillator partials count",example:"sound('dr').n([1,2].beat()).out()"},note:{name:"note",category:"patterns",description:"MIDI note number (0-127)",example:"sound('jvbass').note(50).out()"},vel:{name:"vel",category:"audio",description:"Velocity or sound volume (0-1)",example:"sound('cp').vel(.5).out()"},palindrome:{name:"palindrome",category:"patterns",description:"Returns palindrome of the current array",example:"[0,1,2,3].palindrome()"},cutoff:{name:"cutoff",category:"filter",description:"Lowpass filter cutoff frequency",example:"sound('cp').cutoff(1000).out()"},resonance:{name:"resonance",category:"filter",description:"Lowpass filter resonance",example:"sound('cp').resonance(1).out()"},hcutoff:{name:"hcutoff",category:"filter",description:"Highpass filter cutoff frequency",example:"sound('cp').hcutoff(1000).out()"},hresonance:{name:"hresonance",category:"filter",description:"Highpass filter resonance",example:"sound('cp').hresonance(1).out()"},bandf:{name:"bandf",category:"filter",description:"Bandpass filter cutoff frequency",example:"sound('cp').bandf(1000).out()"},bandq:{name:"bandq",category:"filter",description:"Bandpass filter resonance",example:"sound('cp').bandq(1).out()"},vowel:{name:"vowel",category:"filter",description:"Vowel filter type",example:"sound('cp').vowel('a').out()"},coarse:{name:"coarse",category:"synthesis",description:"Artificial sample-rate lowering",example:"mod(.5)::snd('pad').coarse($(1) % 16).clip(.5).out();"},crush:{name:"crush",category:"synthesis",description:"Bitcrushing effect. 1 is extreme, superior values are more subtle.",example:""},speed:{name:"speed",category:"sampling",description:"Sample playback speed",example:"sound('cp').speed(.5).out()"},shape:{name:"shape",category:"synthesis",description:"Waveshaping distorsion",example:"sound('cp').shape(.5).out()"},delay:{name:"delay",category:"effect",description:"Delay effect dry/wet",example:"sound('cp').delay(.5).out()"},delayfb:{name:"delayfb",category:"effect",description:"Delay effect feedback amount (0-1)",example:"sound('cp').delay(0.2).delayfb(.5).out()"},delaytime:{name:"delaytime",category:"effect",description:"Delay effect delay time (in seconds)",example:"sound('cp').delay(0.2).delaytime(.5).out()"},gain:{name:"gain",category:"audio",description:"Playback volume",example:"sound('cp').gain(.5).out()"},bar:{name:"bar",category:"patterns",description:"Returns list index for the current bar (with wrapping)",example:"[0,1,2,3].bar()"},beat:{name:"beat",category:"patterns",description:"Returns list index for the current beat (with wrapping)",example:"[0,1,2,3].beat()"},room:{name:"room",category:"effect",description:"Reverb effect room amount",example:"sound('cp').room(.5).out()"},size:{name:"size",category:"effect",description:"Reverb effect room size",example:"sound('cp').size(.5).out()"},usine:{name:"usine",category:"modulation",description:"Unipolar sinusoïdal low-frequency oscillator",example:"usine(5) // 5 hz oscillation"},sine:{name:"usine",category:"modulation",description:"Sinusoïdal low-frequency oscillator",example:"usine(5) // 5 hz oscillation"},utriangle:{name:"utriangle",category:"modulation",description:"Unipolar triangular low-frequency oscillator",example:"utriangle(5) // 5 hz oscillation"},triangle:{name:"triangle",category:"modulation",description:"Triangular low-frequency oscillator",example:"triangle(5) // 5 hz oscillation"},usaw:{name:"usaw",category:"modulation",description:"Unipolar sawtooth low-frequency oscillator",example:"usaw(5) // 5 hz oscillation"},saw:{name:"saw",category:"modulation",description:"Sawtooth low-frequency oscillator",example:"saw(5) // 5 hz oscillation"},square:{name:"square",category:"modulation",description:"Square low-frequency oscillator",example:"square(5) // 5 hz oscillation"},usquare:{name:"usquare",category:"modulation",description:"Unipolar square low-frequency oscillator",example:"usquare(5) // 5 hz oscillation"},rhythm:{name:"rhythm",category:"rhythm",description:"Variant of the euclidian algorithm function",example:"rhythm(.5, 3, 8) // time, pulses, steps"},let:{name:"let",category:"javascript",description:"Variable assignation",example:"let baba = 10"},onbeat:{name:"onbeat",category:"rhythm",description:"Return true when targetted beat(s) is/are reached",example:"onbeat([1,2,3]) // true on beats 1, 2 and 3"},oncount:{name:"oncount",category:"rhythm",description:"Return true when targetted beat(s) is/are reached in the given period",example:"oncount([1,2,3], 4) // true on beats 1, 2 and 3 in a 4 beats period"},mod:{name:"mod",category:"rhythm",description:"return true every n pulsations.",example:"mod(1) :: log(rand(1,5))"},modp:{name:"modp",category:"rhythm",description:"return true every n ticks.",example:"modp(8) :: log(rand(1,5))"},euclid:{name:"euclid",category:"rhythm",description:"Iterator-based euclidian rhythm generator",example:"euclid($(1), 3, 8) // iterator, pulses"},oneuclid:{name:"oneuclid",category:"rhythm",description:"Variant of the euclidian rhythm generator",example:"oneuclid(3, 8) // iterator, pulses"},bin:{name:"bin",category:"rhythm",description:"Convert a decimal number to binary rhythm generator",example:"bin($(1), 9223) // iterator, number to convert"},binrhythm:{name:"binrhythm",category:"rhythm",description:"Binary rhythm generator",example:"binrhythm(.5, 9223) :: sound('cp').out()"},prob:{name:"prob",category:"randomness",description:"Return true with a probability of n %",example:"prob(50) // 50% probability"},rand:{name:"rand",category:"randomness",description:"random floating point number between x and y",example:"rand(1, 10) // between 1 and 10"},irand:{name:"irand",category:"randomness",description:"random integer number between x and y",example:"irand(1, 10) // between 1 and 10"},pick:{name:"pick",category:"randomness",description:"Pick a value in the given array",example:"[1,4,10].pick()"},sound:{name:"sound",category:"audio",description:"Base function to play audio (samples / synths)",example:"sound('bd').out()"},snd:{name:"snd",category:"audio",description:"Base function to play audio (samples / synths). Alias for sound.",example:"sound('bd').out()"},bpm:{name:"bpm",category:"time",description:"Get or set the current beats per minute.",example:"bpm(135) // set the bpm to 135"},out:{name:"out",category:"audio",description:"Connect the sound() chain to the output",example:"sound('clap').out()"},script:{name:"script",category:"core",description:"Execute one or more local scripts",example:"mod(1) :: script(1)"},warp:{name:"warp",category:"core",description:"jumps to the n tick of the clock.",example:"warp(1) :: log('back to the big bang!')"},beat_warp:{name:"beat_warp",category:"core",description:"jumps to the n beat of the clock.",example:"beat_warp(1) :: log('back to the first beat!')"},divbar:{name:"divbar",category:"time",description:"works just like div but at the level of bars instead of beats",example:"divbar(2)::mod(1)::snd('kick').out()"},onbar:{name:"onbar",category:"time",description:"return true when targetted bar(s) is/are reached in period",example:"onbar(4, 4)::mod(.5)::snd('hh').out();"},begin:{name:"begin",category:"sampling",description:"Audio playback start time (0-1)",example:"sound('cp').begin(.5).out()"},end:{name:"end",category:"sampling",description:"Audio playback end time (0-1)",example:"sound('cp').end(.5).out()"},mouseX:{name:"mouseX",category:"mouse",description:"Mouse X position (big float)",example:"log(mouseX())"},mouseY:{name:"mouseY",category:"mouse",description:"Mouse Y position (big float)",example:"log(mouseY())"},noteX:{name:"noteX",category:"mouse",description:"Mouse X position (as MIDI note)",example:"log(noteX())"},noteY:{name:"noteY",category:"mouse",description:"Mouse Y position (as MIDI note)",example:"log(noteY())"},cut:{name:"cut",category:"sampling",description:"Cutting sample when other sample met on same orbit (0 or 1)",example:"sound('cp').cut(1).out()"},pan:{name:"pan",category:"audio",description:"Stereo panning (-1 to 1)",example:"sound('cp').pan(-1).out()"},zrand:{name:"zrand",category:"synthesis",description:"ZzFX randomisation factor",example:"sound('zzfx').zrand(.5).out()"},curve:{name:"curve",category:"synthesis",description:"ZzFX waveshaping (0-3)",example:"sound('zzfx').curve(1).out()"},slide:{name:"slide",category:"synthesis",description:"ZzFX pitch slide",example:"sound('zzfx').slide(1).out()"},deltaSlide:{name:"deltaSlide",category:"synthesis",description:"ZzFX pitch delta slide",example:"sound('zzfx').deltaSlide(1).out()"},pitchJump:{name:"pitchJump",category:"synthesis",description:"ZzFX pitch jump",example:"sound('zzfx').pitchJump(1).out()"},pitchJumpTime:{name:"pitchJumpTime",category:"synthesis",description:"ZzFX pitch jump time (time before jump)",example:"sound('zzfx').pitchJumpTime(1).out()"},zcrush:{name:"zcrush",category:"synthesis",description:"ZzFX bitcrushing",example:"sound('zzfx').zcrush(1).out()"},zdelay:{name:"zdelay",category:"synthesis",description:"ZzFX delay",example:"sound('zzfx').zdelay(1).out()"},tremolo:{name:"tremolo",category:"synthesis",description:"ZzFX weird tremolo effect",example:"sound('zzfx').tremolo(1).out()"},speak:{name:"speak",category:"synthesis",description:"Text to speech synthesizer",example:"mod(2) :: speak('Topos!','fr',irand(0,5))"},midi_outputs:{name:"midi_outputs",category:"midi",description:"List of available MIDI outputs",example:"midi_outputs()"},midi_output:{name:"midi_output",category:"midi",description:"Set the current MIDI output",example:"midi_output('IAC Driver Bus 1')"},midi:{name:"midi",category:"midi",description:"Send a MIDI message",example:"midi(144, 60, 100)"},control_change:{name:"control_change",category:"midi",description:"Send a MIDI control change message",example:"control_change({control: 1, value: 60, channel: 10})"},program_change:{name:"program_change",category:"midi",description:"Send a MIDI program change message",example:"program_change(1, 10)"},sysex:{name:"sysex",category:"midi",description:"Send a MIDI sysex message",example:"sysex(0xF0, 0x7D, 0x00, 0x06, 0x01, 0xF7)"},midi_clock:{name:"midi_clock",category:"midi",description:"Send a MIDI clock message",example:"midi_clock()"},degrade:{name:"degrade",category:"patterns",description:"Removes n% of the given array randomly",example:"[0,1,2,3].degrade(20)"},loop:{name:"loop",category:"patterns",description:"Loop over the given array using an iterator",example:"[0,1,2,3].loop($(1))"},$:{name:"$",category:"patterns",description:"Iterator",example:"[0,1,2,3].loop($(1))"},shuffle:{name:"shuffle",category:"patterns",description:"Shuffle the given array",example:"[0,1,2,3].shuffle()"},rotate:{name:"rotate",category:"patterns",description:"Rotate the given array to the right for n indexes",example:"[0,1,2,3].rotate(2)"},unique:{name:"unique",category:"patterns",description:"Remove duplicates from the given array",example:"[0,1,2,3,3,3].unique()"},add:{name:"add",category:"patterns",description:"Add a value to each element of the given array",example:"[0,1,2,3].add(1)"},sub:{name:"sub",category:"patterns",description:"Substract a value to each element of the given array",example:"[0,1,2,3].sub(1)"},mul:{name:"mul",category:"patterns",description:"Multiply each element of the given array by a value",example:"[0,1,2,3].mul(2)"},division:{name:"div",category:"patterns",description:"Divide each element of the given array by a value",example:"[0,1,2,3].division(2)"}},MS=Jv((n,e,t)=>{let{from:r,to:i,text:a}=n.state.doc.lineAt(e),s=e,o=e;for(;s>r&&/\w/.test(a[s-r-1]);)s--;for(;o0?null:{pos:s,end:o,above:!0,create(l){if(!(a.slice(s-r,o-r)in kS))return{dom:document.createElement("div")};let c=kS[a.slice(s-r,o-r)]||{},d=`

${c.name} [${c.category}]

${c.description}

${c.example}
diff --git a/index.html b/index.html index e3bc902..ab77913 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - +