mimic-sussex / sema

Sema – A Playground for Live Coding Music and Machine Learning
https://sema.codes
MIT License
151 stars 51 forks source link

moNote doesn't call from within a lambda #401

Closed chriskiefer closed 2 years ago

chriskiefer commented 2 years ago

brute:(t:@{t:, 1, 9, 43, 127}moNote);

k:{{1}clp, [3,3,3,3]}rsq; {k:, 1, 9, 36, 127}moNote; hh:{{4}clp, [2,2,4]}rsq; {hh:, 1, 9, 42, 127}moNote; ho:{{4,0.25}clp, [1]}rsq; //{ho:, 1, 9, 43, 127}moNote; {ho:}brute:;

connected with scope of this.createMIDISender?

chriskiefer commented 2 years ago

yes, looks like a scope issue

DEBUG:treeToCode
logger.js:60 () => {let q=this.newq(); 
                            q.b0u41 = () => {
                                let lq = {};
                                 lq.b0u40On = this.createMIDISender(0x90);lq.b0u40Off = this.createMIDISender(0x80);;
                                return (t, mem) => {
                                    return 
        lq.b0u40On.play(t, 1, 9, 43, this.MIDIUmap(127), this.getCurrentTime());
        lq.b0u40Off.play(1.0 -t, 1, 9, 43, 0, this.getCurrentTime())

                                }
                            }
                         q.b0u42 = new Module.maxiOsc();
                      q.b0u42.phaseReset(0);;; return q;}
logger.js:60 (q, inputs, mem) => {(mem[0] = q.b0u41);(
                                ((
                                    (() => {
                                        if (q.b0u43 == undefined) {
                                            q.b0u43 = (mem[0] != undefined ? mem[0] : 0)();
                                        }
                                        return q.b0u43(q.b0u42.square(1), mem);
                                    })
                                    ()
                                ))
                                )
                            ;}
logger.js:70 
brute:(t:@{t:, 1, 9, 43, 127}moNote);
{{1}sqr}brute:;
chriskiefer commented 2 years ago

{}MIDIInfo; brute:(t:@{{t:,1,9,43,127}moNote}poll); {{1}imp}brute:;

//{{1}sqr, 1, 9, 43, 127}moNote;

this works only when the poll is in place, which must force the function to get evaluated

    ((()=>{
        ${o}On.play(${p[0].loop}, ${p[1].loop}, ${p[2].loop}, ${p[3].loop}, this.MIDIUmap(${p[4].loop}), this.getCurrentTime());
        ${o}Off.play(1.0 -${p[0].loop}, ${p[1].loop}, ${p[2].loop}, ${p[3].loop}, 0, this.getCurrentTime());
        return ${p[0].loop};
    })())

so, some sort of explicit evaluation is needed = apply or call?

chriskiefer commented 2 years ago

solved - issue was a newline at start of loop definition. when put after return, the closure returned undefined