Skip to content

Instantly share code, notes, and snippets.

@chriskiefer
Created April 15, 2020 19:32
Show Gist options
  • Save chriskiefer/00f9d0f4414bf6dc1506f7999e9c065d to your computer and use it in GitHub Desktop.
Save chriskiefer/00f9d0f4414bf6dc1506f7999e9c065d to your computer and use it in GitHub Desktop.
sema test environment
[{"drag":{"top":null,"left":null,"dragging":false},"resize":{"width":null,"height":null,"resizing":false},"responsive":{"valueW":0},"static":false,"resizable":true,"draggable":true,"min":{},"max":{},"x":0,"y":0,"w":7,"h":3,"id":"_uj7tdlhe0","type":"liveCodeEditor","name":"hello-world","background":"#151515","lineNumbers":true,"hasFocus":false,"theme":"icecoder","data":"{0.11}clfreq;\n{1}barfreq;\n\n\t\t\t \n:k1:{{16}clp,<1,3>}rsq;\n:k2:{{8}clp,<2,2,1,2,1>}rsq;\n:kk:{{1}clp,<3,1>,<:k1:,:k2:>}rsq;\n:kick1:{:kk:,{{{:kk:,100}line,5,0.1}ulin,-0.1}add,0}\\909b;\n:kick1:{{:kk:,{{{:kk:,20}line,1,1}ulin,0}add,0}\\909b, :kick1:}mix;\n:t4:{:kick1:,20}dist;\t \n\n:hh:{{{16,0.5}clp,<1,3>}rsq,0.9,0.03}\\909open;\n:hh:{:hh:,3}dist;\n\t\t \n\n:tr:{{32}clp,<1,1>}rsq;\n:pit:{{24}clp,<1,2>,<40,20,60,1,40,20,1,20>}rsq;\n:cut:{{1}clp,300,300}uexp;\n:slide:{{32}clp,<1>,<1,0,0,0,0>}rsq;\t\t\t\n:a:{:tr:,{:pit:,10}add,:slide:,0,1,:cut:,90,100,10,50}o303;\n:a:{{:a:,500,3}hpz,12}dist;\n:a:{:a:,0.8}mul;\n\t\t\t\t\n:trb:{{16,0.5}clp,<1>}rsq;\n:noteoff:{{16,0.8}clp,<1>}rsq;\n:pitb:{{16}clp,<1>,<20>}rsq;\n:cutb:{{1}clp,600,600}uexp;\n:slideb:{{16}clp,<1>,<0>}rsq;\t\t\t\n:b:{:trb:,{:pitb:,12}add,0,:noteoff:,0,:cutb:,10,100,1,40}o303;\n:b:{{:b:,100,2}hpz,2}dist;\n\n:verb:{{:a:,0.3,0.1}freeverb,0.02}mul;\t\t\t\n{{:t4:,:hh:}sum,0.3}mul"},{"drag":{"top":null,"left":null,"dragging":false},"resize":{"width":null,"height":null,"resizing":false},"responsive":{"valueW":0},"static":false,"resizable":true,"draggable":true,"min":{},"max":{},"x":7,"y":0,"w":3,"h":7,"id":"_az0k7631f","name":"hello world","type":"liveCodeParseOutput","lineNumbers":false,"hasFocus":false,"theme":"shadowfox","background":"#ebdeff","data":""},{"drag":{"top":null,"left":null,"dragging":false},"resize":{"resizing":false,"width":0,"height":0},"responsive":{"valueW":2},"static":false,"resizable":true,"draggable":true,"min":{},"max":{},"x":0,"y":3,"w":9,"h":5,"id":"_xre5b2pth","name":"hello world","type":"grammarEditor","lineNumbers":true,"hasFocus":false,"theme":"monokai","background":"#AAAAAA","data":"\n# Lexer [or tokenizer] definition with language lexemes [or tokens]\n@{%\n\n/*\nExamples:\n\nSaw wave:\n\n{100}saw\n\nPlay a sample:\n\n{{2}imp}\\909closed\n\nState variable filter:\n\n:speed:{{1}pha,100,500}uexp;\n{{100}saw,:speed:, 5, 0,1,0,0}svf\n\nSequencing with idx and lists:\n\n - grabbing a single fixed element\n:x:{{10}imp,0,<200,400,600,1000>}idx;\n{:x:}saw\n\n:x:{{10}imp,{4}pha,<200,400,600,1000>}idx;\n{:x:}saw\n\nLists with variable elements:\n:x:{{10}imp,{4}pha,<200,400,600,{{{0.1}sin}abs,100}mul>}idx;\n{:x:}saw\n\n:x:{{10}imp,{0.4}pha,<{{{0.15}sin}abs,300}mul,{{{0.1}sin}abs,100}mul>}idx;\n{:x:}sawn\n\n*/\n\n\nconst lexer = moo.compile({\n separator: /,/,\n paramEnd: /}/,\n paramBegin: /{/,\n listEnd: /\\>/,\n listBegin: /\\</,\n variable: /:[a-zA-Z0-9]+:/,\n sample: { match: /\\\\[a-zA-Z0-9]+/, lineBreaks: true, value: x => x.slice(1, x.length)},\n slice: { match: /\\|[a-zA-Z0-9]+/, lineBreaks: true, value: x => x.slice(1, x.length)},\n stretch: { match: /\\@[a-zA-Z0-9]+/, lineBreaks: true, value: x => x.slice(1, x.length)},\n clockTrig: /0t-?(?:[0-9]|[1-9][0-9]+)(?:\\.[0-9]+)?\\b/,\n\tnumber: /-?(?:[0-9]|[1-9][0-9]+)(?:\\.[0-9]+)?\\b/,\n semicolon: /;/,\n funcName: /[a-zA-Z][a-zA-Z0-9]*/,\n\tstring:\t\t\t\t\t{match: /'[a-zA-Z0-9]+'/, value: x=>x.slice(1,x.length-1)},\n comment: /\\/\\/[^\\n]*/,\n ws: { match: /\\s+/, lineBreaks: true},\n});\n\n%}\n\n# Pass your lexer object using the @lexer option\n@lexer lexer\n\n# Grammar definition in the Extended Backus Naur Form (EBNF)\nmain -> _ Statement _\n{% d => ( { '@lang' : d[1] } ) %}\n\nStatement ->\n Expression _ %semicolon _ Statement\n {% d => [ { '@spawn': d[0] } ].concat(d[4]) %}\n |\n Expression\n {% d => [ { '@sigOut': { '@spawn': d[0] }} ] %}\n\t|\n\t%comment _ Statement\n\t{% d => d[2] %}\n\n\nExpression ->\n ParameterList _ %funcName\n {% d => sema.synth( d[2].value, d[0]['@params'] ) %}\n |\n ParameterList _ %sample\n {% d => sema.synth( 'sampler', d[0]['@params'].concat( [ sema.str( d[2] ) ] ) ) %}\n |\n ParameterList _ %slice\n {% d => sema.synth( 'slice', d[0]['@params'].concat( [ sema.str( d[2] ) ] ) ) %}\n |\n ParameterList _ %stretch\n {% d => sema.synth( 'stretch', d[0]['@params'].concat( [ sema.str( d[2] ) ] ) ) %}\n |\n %variable _ Expression\n {% d => sema.setvar( d[0], d[2] ) %}\n\nParameterList ->\n %paramBegin Params %paramEnd\n {% d => ( { 'paramBegin': d[0], '@params': d[1], 'paramEnd': d[2] } ) %}\n\t\n\n\nParams ->\n ParamElement\n {% d => ( [ d[0] ] ) %}\n |\n ParamElement _ %separator _ Params\n {% d => [ d[0] ].concat(d[4]) %}\n\nParamElement ->\n %number\n {% d => ( { '@num': d[0] } ) %}\n\t|\n\t%string\n {% d => ( { '@string': d[0] } ) %}\n |\n Expression\n {% id %}\n |\n %variable\n {% d => sema.getvar( d[0] ) %}\n |\n %listBegin Params %listEnd\n {% d => ( { '@list': d[1] } )%}\n\t\n\n# Whitespace\n\n_ -> wschar:*\n{% function(d) {return null;} %}\n\n__ -> wschar:+\n{% function(d) {return null;} %}\n\nwschar -> %ws\n{% id %}"},{"drag":{"dragging":false,"top":0,"left":0},"resize":{"resizing":false,"width":0,"height":0},"responsive":{"valueW":8},"static":false,"resizable":true,"draggable":true,"min":{},"max":{},"x":7,"y":7,"w":11,"h":4,"id":"_j6gk87ylc","name":"hello world","type":"modelEditor","lineNumbers":true,"hasFocus":false,"theme":"monokai","background":"#f0f0f0","data":"sema.env.saveLocal('test')\n_____\nsema.env.saveToPB()\n________\nsema.env.loadLocal('test')\n\n______\n\n\n//route the test data into the model\nvar w = 0;\ninput = (value, channel) => { console.log(\">toModel: \"+[value, channel]);};\n__________\n\n//route the model predictions back to the live coding environment \noutput = (x) => { p = test(w); console.log(\">fromModel: \"+p); return p;}\n\n\n\n________\n\noutput(80, 0)\n\n_____\n\nsema.pbcopy([1,2,3])\n\n\n_____\n\nvar reader = new FileReader();\n//reader.onloadstart = fr.loadStart(f);\n//reader.onprogress = fr.progress(f);\n//reader.onload = fr.load(f);\n//reader.readAsDataURL(f);\n\n_____\n\nsema.peerinfo()\t\n"}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment