1
- /* ByteBeat@1.0.5 , license MIT */
1
+ /* ByteBeat@1.0.6 , license MIT */
2
2
class WrappingStack {
3
3
constructor ( stackSize = 256 ) {
4
4
let sp = 0 ;
@@ -274,10 +274,32 @@ class ByteBeatCompiler {
274
274
} ;
275
275
}
276
276
277
+ static addGlobals ( object , name , filter = ( ) => true ) {
278
+ return `
279
+ var console = {
280
+ log() {},
281
+ info() {},
282
+ error() {},
283
+ warn() {},
284
+ };
285
+ var ${ Object . getOwnPropertyNames ( object ) . filter ( filter ) . map ( key => {
286
+ const value = object [ key ] ;
287
+ return ( typeof value === 'function' )
288
+ ? `${ key } = ${ name } .${ key } `
289
+ : `${ key } = ${ name } .${ key } ` ;
290
+ } ) . join ( ',\n' ) } ;
291
+ ` ;
292
+ }
277
293
278
294
static s_fnHeader = ( function ( ) {
279
295
const keys = { } ;
280
- const filter = ( ) => true ;
296
+ const windowKeep = new Set ( [
297
+ 'parseInt' ,
298
+ 'parseFloat' ,
299
+ 'Array' ,
300
+ 'isNaN' ,
301
+ ] ) ;
302
+ const filter = n => ! windowKeep . has ( n ) ;
281
303
//const filter = n => n === 'scroll' || n === 'sin';
282
304
Object . getOwnPropertyNames ( globalThis ) . filter ( filter ) . forEach ( ( key ) => {
283
305
keys [ key ] = true ;
@@ -286,28 +308,25 @@ class ByteBeatCompiler {
286
308
delete keys [ 'window' ] ;
287
309
return `
288
310
var ${ Object . keys ( keys ) . sort ( ) . join ( ',\n' ) } ;
289
- var ${ Object . getOwnPropertyNames ( Math ) . map ( key => {
290
- const value = Math [ key ] ;
291
- return ( typeof value === 'function' )
292
- ? `${ key } = Math.${ key } .bind(Math)`
293
- : `${ key } = Math.${ key } ` ;
294
- } ) . join ( ',\n' ) } ;
311
+ ${ ByteBeatCompiler . addGlobals ( Math , 'Math' ) }
295
312
` ;
296
313
} ( ) ) ;
297
314
315
+ // ${ByteBeatCompiler.addGlobals(globalThis, 'globalThis', n => n === 'parseInt' || n === 'parseFloat')}
316
+
317
+
298
318
static expressionStringToFn ( evalExp , extra , test ) {
299
319
// eslint-disable-next-line no-new-func
300
320
const fp = new Function ( 'stack' , 'window' , 'extra' , evalExp ) ;
301
321
let f = fp ( undefined , undefined , undefined ) ;
302
322
const ctx = ByteBeatCompiler . makeContext ( ) ;
303
-
304
323
const stack = new WrappingStack ( ) ;
305
324
const tempExtra = Object . assign ( { } , extra ) ;
306
325
// check function
307
- let v = f ( 0 , 0 , stack , ctx , tempExtra ) ;
326
+ let v = f . call ( ctx , 0 , 0 , stack , ctx , tempExtra ) ;
308
327
if ( typeof v === 'function' ) {
309
328
f = f ( ) ;
310
- v = f ( 0 , 0 , stack , ctx , tempExtra ) ;
329
+ v = f . call ( ctx , 0 , 0 , stack , ctx , tempExtra ) ;
311
330
}
312
331
const array = ByteBeatCompiler . is2NumberArray ( v ) ;
313
332
@@ -399,7 +418,7 @@ class ByteBeatProcessor {
399
418
// case 0: // bytebeat
400
419
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
401
420
for ( let i = 0 ; i < lastSample ; ++ i ) {
402
- const s = fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
421
+ const s = fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
403
422
buffer0 [ time % buffer0 . length ] = ( s [ 0 ] & 255 ) / 127 - 1 ;
404
423
buffer1 [ time % buffer1 . length ] = ( s [ 1 ] & 255 ) / 127 - 1 ;
405
424
++ time ;
@@ -408,7 +427,7 @@ class ByteBeatProcessor {
408
427
// case 1: // floatbeat
409
428
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
410
429
for ( let i = 0 ; i < lastSample ; ++ i ) {
411
- const s = fn0 ( ( time / divisor ) , undefined , stack0 , ctx0 , extra ) ;
430
+ const s = fn0 . call ( ctx0 , ( time / divisor ) , undefined , stack0 , ctx0 , extra ) ;
412
431
buffer0 [ time % buffer0 . length ] = s [ 0 ] ;
413
432
buffer1 [ time % buffer1 . length ] = s [ 1 ] ;
414
433
++ time ;
@@ -417,7 +436,7 @@ class ByteBeatProcessor {
417
436
// case 2: // signed bytebeat
418
437
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
419
438
for ( let i = 0 ; i < lastSample ; ++ i ) {
420
- const s = fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
439
+ const s = fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
421
440
int8 [ 0 ] = s [ 0 ] ;
422
441
buffer0 [ time % buffer0 . length ] = int8 [ 0 ] / 128 ;
423
442
int8 [ 0 ] = s [ 1 ] ;
@@ -430,24 +449,24 @@ class ByteBeatProcessor {
430
449
// case 0: // bytebeat
431
450
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
432
451
for ( let i = 0 ; i < lastSample ; ++ i ) {
433
- buffer0 [ time % buffer0 . length ] = ( fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) & 255 ) / 127 - 1 ;
434
- buffer1 [ time % buffer1 . length ] = ( fn1 ( ( time ) / divisor , undefined , stack1 , ctx1 , extra ) & 255 ) / 127 - 1 ;
452
+ buffer0 [ time % buffer0 . length ] = ( fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) & 255 ) / 127 - 1 ;
453
+ buffer1 [ time % buffer1 . length ] = ( fn1 . call ( ctx1 , ( time ) / divisor , undefined , stack1 , ctx1 , extra ) & 255 ) / 127 - 1 ;
435
454
++ time ;
436
455
}
437
456
} ,
438
457
// case 1: // floatbeat
439
458
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
440
459
for ( let i = 0 ; i < lastSample ; ++ i ) {
441
- buffer0 [ time % buffer0 . length ] = fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
442
- buffer1 [ time % buffer1 . length ] = fn1 ( ( time ) / divisor , undefined , stack1 , ctx1 , extra ) ;
460
+ buffer0 [ time % buffer0 . length ] = fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
461
+ buffer1 [ time % buffer1 . length ] = fn1 . call ( ctx1 , ( time ) / divisor , undefined , stack1 , ctx1 , extra ) ;
443
462
}
444
463
} ,
445
464
// case 2: // signed bytebeat
446
465
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
447
466
for ( let i = 0 ; i < lastSample ; ++ i ) {
448
- int8 [ 0 ] = fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
467
+ int8 [ 0 ] = fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
449
468
buffer0 [ time % buffer0 . length ] = int8 [ 0 ] / 128 ;
450
- int8 [ 0 ] = fn1 ( ( time ) / divisor , undefined , stack1 , ctx1 , extra ) ;
469
+ int8 [ 0 ] = fn1 . call ( ctx1 , ( time ) / divisor , undefined , stack1 , ctx1 , extra ) ;
451
470
buffer1 [ time % buffer1 . length ] = int8 [ 0 ] / 128 ;
452
471
++ time ;
453
472
}
@@ -457,21 +476,21 @@ class ByteBeatProcessor {
457
476
// case 0: // bytebeat
458
477
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
459
478
for ( let i = 0 ; i < lastSample ; ++ i ) {
460
- buffer0 [ time % buffer0 . length ] = ( fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) & 255 ) / 127 - 1 ;
479
+ buffer0 [ time % buffer0 . length ] = ( fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) & 255 ) / 127 - 1 ;
461
480
++ time ;
462
481
}
463
482
} ,
464
483
// case 1: // floatbeat
465
484
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
466
485
for ( let i = 0 ; i < lastSample ; ++ i ) {
467
- buffer0 [ time % buffer0 . length ] = fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
486
+ buffer0 [ time % buffer0 . length ] = fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
468
487
++ time ;
469
488
}
470
489
} ,
471
490
// case 2: // signed bytebeat
472
491
function ( buffer0 , buffer1 , fn0 , fn1 , time , divisor , stack0 , stack1 , ctx0 , ctx1 , extra , lastSample ) {
473
492
for ( let i = 0 ; i < lastSample ; ++ i ) {
474
- int8 [ 0 ] = fn0 ( ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
493
+ int8 [ 0 ] = fn0 . call ( ctx0 , ( time ) / divisor , undefined , stack0 , ctx0 , extra ) ;
475
494
buffer0 [ time % buffer0 . length ] = int8 [ 0 ] / 128 ;
476
495
++ time ;
477
496
}
@@ -733,6 +752,7 @@ class BeatWorkletProcessor extends AudioWorkletProcessor {
733
752
}
734
753
735
754
setExpressionsAndResetToZero(data) {
755
+ this.byteBeat.reset();
736
756
this.byteBeat.setExpressions(data);
737
757
this.byteBeat.reset();
738
758
}
@@ -867,7 +887,6 @@ class ByteBeatNode extends AudioWorkletNode {
867
887
reset ( ) {
868
888
this . #callFunc( 'reset' ) ;
869
889
this . byteBeat . reset ( ) ;
870
- this . time = 0 ;
871
890
this . startTime = performance . now ( ) ;
872
891
this . pauseTime = this . startTime ;
873
892
}
@@ -949,7 +968,7 @@ class ByteBeatNode extends AudioWorkletNode {
949
968
} ) ;
950
969
this . byteBeat . setExpressions ( exp ) ;
951
970
if ( resetToZero ) {
952
- this . byteBeat . reset ( ) ;
971
+ this . reset ( ) ;
953
972
}
954
973
if ( this . onCompileCallback ) {
955
974
this . onCompileCallback ( null ) ;
0 commit comments