From d6587b13c540ab02ea707b595d5ccae90e61cbe9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 27 Dec 2017 18:23:03 -0500 Subject: [PATCH 001/581] Signed-off-by: dcerisano --- .project | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .project diff --git a/.project b/.project new file mode 100644 index 00000000..615f5d84 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + blinkstick-node + + + + + + + + From 5a12ac3005ec65d9ad3483995d0844c5bab03e45 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 27 Dec 2017 22:11:55 -0500 Subject: [PATCH 002/581] Signed-off-by: dcerisano --- .project | 6 + .settings/.jsdtscope | 16 +++ ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + examples/connect/connect.js | 2 +- examples/pro_frames/pro_frames.js | 103 ++++++++++++++---- 6 files changed, 105 insertions(+), 24 deletions(-) create mode 100644 .settings/.jsdtscope create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.name diff --git a/.project b/.project index 615f5d84..bae546d0 100644 --- a/.project +++ b/.project @@ -5,7 +5,13 @@ + + org.eclipse.wst.validation.validationbuilder + + + + org.eclipse.wst.jsdt.core.jsNature diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 00000000..d7991035 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 00000000..3bd5d0a4 --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 00000000..05bd71b6 --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/examples/connect/connect.js b/examples/connect/connect.js index d0ad638a..b53f3f82 100644 --- a/examples/connect/connect.js +++ b/examples/connect/connect.js @@ -7,7 +7,7 @@ if (process.argv[2] == null) { console.log("Please supply access code as an argument"); - return; + process.exit(1); } var faye = require('faye'), diff --git a/examples/pro_frames/pro_frames.js b/examples/pro_frames/pro_frames.js index c0e4ab81..6faa6579 100644 --- a/examples/pro_frames/pro_frames.js +++ b/examples/pro_frames/pro_frames.js @@ -1,25 +1,82 @@ -var blinkstick = require('blinkstick'), - device = blinkstick.findFirst(); - -if (device) { - var finished = false; - - var data = [ - 0, 255, 0, - 255, 0, 0, - 128, 128, 0, - 0, 0, 255, - 0, 255, 255, - 0, 255, 0, - 255, 0, 0, - 128, 128, 0, - ]; - - device.setColors(0, data, function(err, data) { - finished = true; - }); - - var wait = function () { if (!finished) setTimeout(wait, 100)} - wait(); +var blinkstick = require('blinkstick'); +var device = blinkstick.findFirst(); + +// Milliseconds between frames (animation rate) +// Eg. 16ms is 60fps. +// 20ms is minimum for BlinkStick. +// Note that even 20ms can be too fast for some brands of LEDs to change colour. +// +var bsync = 40; + +// Queue of frames for stream producer/consumer pattern +// +var stream = []; + + +// A frame of 8 LEDS in GRB format (producer) +// +var image = [ + 000, 000, 000, + 000, 000, 000, + 000, 000, 000, + 000, 000, 000, + 000, 000, 000, + 000, 008, 000, + 016, 255, 000, + 000, 008, 000 + ]; + +var phase = 0; +var shift = 0; +var dir = 1; + +function producer(){ + + phase +=dir; + if (phase>=6) + { + phase=5; + dir=-dir; + } + + + if (phase<=0){ + phase=0; + dir=-dir; + } + + + shift = Math.floor(phase); + + frame = new Array(8*3).fill(0); + + for (var i = 0; i< 8; i++) { + frame[i*3+0] = image[shift*3+0]; + frame[i*3+1] = image[shift*3+1]; + frame[i*3+2] = image[shift*3+2]; + + shift+=1; + if (shift>=8) + shift=0; + } + + stream.push(frame); + + setTimeout(blink, bsync); +} + + +function consumer() +{ + if (stream.length)>0) + device.setColors(0, data, function(err, stream.shift()) {}); +} + +if (device){ + setTimeout(producer, bsync); +} + +if (device){ + setTimeout(consumer, bsync); } From 51e84c0abcd66614d11a65b045baa091495d5ac7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 27 Dec 2017 23:30:13 -0500 Subject: [PATCH 003/581] Signed-off-by: dcerisano --- examples/pro_frames/pro_frames.js | 82 ------------------------ examples/pro_stream/pro_stream.js | 102 ++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 82 deletions(-) delete mode 100644 examples/pro_frames/pro_frames.js create mode 100644 examples/pro_stream/pro_stream.js diff --git a/examples/pro_frames/pro_frames.js b/examples/pro_frames/pro_frames.js deleted file mode 100644 index 6faa6579..00000000 --- a/examples/pro_frames/pro_frames.js +++ /dev/null @@ -1,82 +0,0 @@ -var blinkstick = require('blinkstick'); -var device = blinkstick.findFirst(); - -// Milliseconds between frames (animation rate) -// Eg. 16ms is 60fps. -// 20ms is minimum for BlinkStick. -// Note that even 20ms can be too fast for some brands of LEDs to change colour. -// -var bsync = 40; - -// Queue of frames for stream producer/consumer pattern -// -var stream = []; - - -// A frame of 8 LEDS in GRB format (producer) -// -var image = [ - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 008, 000, - 016, 255, 000, - 000, 008, 000 - ]; - -var phase = 0; -var shift = 0; -var dir = 1; - -function producer(){ - - phase +=dir; - if (phase>=6) - { - phase=5; - dir=-dir; - } - - - if (phase<=0){ - phase=0; - dir=-dir; - } - - - shift = Math.floor(phase); - - frame = new Array(8*3).fill(0); - - for (var i = 0; i< 8; i++) { - frame[i*3+0] = image[shift*3+0]; - frame[i*3+1] = image[shift*3+1]; - frame[i*3+2] = image[shift*3+2]; - - shift+=1; - if (shift>=8) - shift=0; - } - - stream.push(frame); - - setTimeout(blink, bsync); -} - - -function consumer() -{ - if (stream.length)>0) - device.setColors(0, data, function(err, stream.shift()) {}); -} - -if (device){ - setTimeout(producer, bsync); -} - -if (device){ - setTimeout(consumer, bsync); -} - diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js new file mode 100644 index 00000000..c699ee1c --- /dev/null +++ b/examples/pro_stream/pro_stream.js @@ -0,0 +1,102 @@ +//Stream producer-consumer pattern allows separation of concerns for BlinkStick animations. +//Producer pushes frames to the stream as simple RGB arrays at a fixed rate. +//Consumer pulls frames from the stream and sends them to BlickStick at the same rate. +//This is elastic and very efficient, requiring negligible CPU for the node process. +//TODO: Johnny Five integration for BlinkStick - this pattern could form the basis. + +var blinkstick = require('blinkstick'); +var device = blinkstick.findFirst(); + +//Stream buffer for frames +var stream_buffer = []; + +//Stream buffer length should always only be 1 if the producer and consumer can run at the same rate. +//This provides for some buffering to avoid skipped frames. +var MAX_BUFFER_LENGTH = 100; + +//Streaming rates in milliseconds +//Eg. 16ms is 60fps. 20ms is recommended minimum for BlinkStick, but 16ms seems perfectly stable. +//Producer rate should never be faster than consumer rate (or frames will be skipped). +var rate = 80; // 80 is nice for this particular animation + + +//Image of 8 LEDS to be animated (this one is Knight Rider. Or a Cylon) +var image = [ + 000, 000, 000, + 000, 000, 000, + 000, 000, 000, + 000, 000, 000, + 000, 000, 000, + 008, 000, 000, //Iris + 255, 016, 000, //Pupil + 008, 000, 000 //Iris + ]; + +//Animation variables +var phase = 0; +var shift = 0; +var dir = 1; + + +//Stream Producer +//Shifts the image back and forth. +//Pushes the resulting frame to the stream (skips it if stream buffer is full) +function producer(){ + + phase +=dir; + if (phase>5) + { + phase=5; + dir=-dir; + } + + if (phase<0){ + phase=0; + dir=-dir; + } + + shift = Math.floor(phase); + frame = new Array(8*3).fill(0); + + for (var i = 0; i< 8; i++) { + + //Convert to BlinkStick RGB format (GRB) + frame[i*3+1] = image[shift*3+0]; // R + frame[i*3+0] = image[shift*3+1]; // G + frame[i*3+2] = image[shift*3+2]; // B + + shift+=1; + if (shift>=8) + shift=0; + } + + if (stream_buffer.length0) + { + var next = stream_buffer.shift(); + device.setColors(0, next, function(err, next) {}); + } + setTimeout(consumer, rate); +} + + +//Start streaming + +if (device){ + setTimeout(producer, rate); +} + +if (device){ + setTimeout(consumer, rate); +} From 3f330f6b721c47304fac6a5fc1e789cccab88e5c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 28 Dec 2017 01:34:04 -0500 Subject: [PATCH 004/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 134 ++++++++++++++---------------- 1 file changed, 64 insertions(+), 70 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index c699ee1c..5cdd015d 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -1,85 +1,33 @@ -//Stream producer-consumer pattern allows separation of concerns for BlinkStick animations. -//Producer pushes frames to the stream as simple RGB arrays at a fixed rate. +//Stream producer-consumer pattern than allows separation of concerns for BlinkStick frame streaming. +//Producer pushes frames to the stream as simple RGB arrays at a variable frame rate. //Consumer pulls frames from the stream and sends them to BlickStick at the same rate. //This is elastic and very efficient, requiring negligible CPU for the node process. -//TODO: Johnny Five integration for BlinkStick - this pattern could form the basis. + var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); +//Variable frame rate in frames per second (fps) +//BlinkStick can handle maximum 60fps +var framerate = 60; + //Stream buffer for frames var stream_buffer = []; -//Stream buffer length should always only be 1 if the producer and consumer can run at the same rate. -//This provides for some buffering to avoid skipped frames. -var MAX_BUFFER_LENGTH = 100; - -//Streaming rates in milliseconds -//Eg. 16ms is 60fps. 20ms is recommended minimum for BlinkStick, but 16ms seems perfectly stable. -//Producer rate should never be faster than consumer rate (or frames will be skipped). -var rate = 80; // 80 is nice for this particular animation - - -//Image of 8 LEDS to be animated (this one is Knight Rider. Or a Cylon) -var image = [ - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 008, 000, 000, //Iris - 255, 016, 000, //Pupil - 008, 000, 000 //Iris - ]; - -//Animation variables -var phase = 0; -var shift = 0; -var dir = 1; - +//This provides some elasticity to avoid skipped frames. +var MAX_BUFFER_LENGTH = 60; //Stream Producer -//Shifts the image back and forth. -//Pushes the resulting frame to the stream (skips it if stream buffer is full) function producer(){ - phase +=dir; - if (phase>5) - { - phase=5; - dir=-dir; - } - - if (phase<0){ - phase=0; - dir=-dir; - } - - shift = Math.floor(phase); - frame = new Array(8*3).fill(0); - - for (var i = 0; i< 8; i++) { - - //Convert to BlinkStick RGB format (GRB) - frame[i*3+1] = image[shift*3+0]; // R - frame[i*3+0] = image[shift*3+1]; // G - frame[i*3+2] = image[shift*3+2]; // B - - shift+=1; - if (shift>=8) - shift=0; - } - if (stream_buffer.length0) @@ -87,16 +35,62 @@ function consumer() var next = stream_buffer.shift(); device.setColors(0, next, function(err, next) {}); } - setTimeout(consumer, rate); + + framerate = Math.max(1, Math.min(framerate, 60)); + setTimeout(consumer, 1000/framerate); } - //Start streaming - if (device){ - setTimeout(producer, rate); + producer(); + consumer(); } -if (device){ - setTimeout(consumer, rate); + + +//User defined frame generator. +//Returns the next frame. +//Called by the producer. +//Pixel source can be anything (eg. a running screenshot scaled to 8x1 resolution for ambient display applications) +//This example is an animation that shifts an image of an eye back and forth. + +function onFrame() +{ + var frame = []; + framerate = 15; // 15fps (can be varied by this function but clamped between 1 and 60 in the stream) + + if (phase<0 || phase>5) + speed=-speed; + + phase += speed; + shift = Math.floor(phase); + + for (var i = 0; i Date: Thu, 28 Dec 2017 01:40:50 -0500 Subject: [PATCH 005/581] Signed-off-by: dcerisano --- examples/pro_frames/pro_frames.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 examples/pro_frames/pro_frames.js diff --git a/examples/pro_frames/pro_frames.js b/examples/pro_frames/pro_frames.js new file mode 100644 index 00000000..c0e4ab81 --- /dev/null +++ b/examples/pro_frames/pro_frames.js @@ -0,0 +1,25 @@ +var blinkstick = require('blinkstick'), + device = blinkstick.findFirst(); + +if (device) { + var finished = false; + + var data = [ + 0, 255, 0, + 255, 0, 0, + 128, 128, 0, + 0, 0, 255, + 0, 255, 255, + 0, 255, 0, + 255, 0, 0, + 128, 128, 0, + ]; + + device.setColors(0, data, function(err, data) { + finished = true; + }); + + var wait = function () { if (!finished) setTimeout(wait, 100)} + wait(); +} + From 1c3e59152a570680a40fb74289f5fda87c744b72 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 28 Dec 2017 01:41:51 -0500 Subject: [PATCH 006/581] Signed-off-by: dcerisano --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 58b805fe..2df424fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store -node_modules/ \ No newline at end of file +node_modules/ +/.settings/ +/.project From aa0daf62b8ca18e9021556a298cd8b447cd2a847 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 28 Dec 2017 03:14:19 -0500 Subject: [PATCH 007/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 62 ++++++++++++++++++------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 5cdd015d..0d7416d4 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -3,11 +3,11 @@ //Consumer pulls frames from the stream and sends them to BlickStick at the same rate. //This is elastic and very efficient, requiring negligible CPU for the node process. - var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); //Variable frame rate in frames per second (fps) +//Can be dynamically set in onFrame() //BlinkStick can handle maximum 60fps var framerate = 60; @@ -19,61 +19,71 @@ var MAX_BUFFER_LENGTH = 60; //Stream Producer function producer(){ - if (stream_buffer.length0) - { - var next = stream_buffer.shift(); - device.setColors(0, next, function(err, next) {}); +function consumer(){ + if (stream_buffer.length>0){ + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + device.setColors(0, grb, function(err, grb) {}); } - framerate = Math.max(1, Math.min(framerate, 60)); setTimeout(consumer, 1000/framerate); } +function convert_grb(rgb){ + var grb = []; + + for (var i = 0; i5) - speed=-speed; + { + speed =-speed; + framerate = Math.random()*50+1 + } + + phase += speed; - phase += speed; - shift = Math.floor(phase); + shift = Math.floor(phase); for (var i = 0; i Date: Thu, 28 Dec 2017 03:17:09 -0500 Subject: [PATCH 008/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 0d7416d4..261da353 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -61,7 +61,7 @@ if (device){ //Returns the next frame. //Called by the producer. //Pixel source can be anything (eg. a running screenshot scaled to 8x1 resolution for ambient display applications) -//This example is an animation that shifts an eye back and forth. +//This example is an animation that shifts an eye back and forth at variable framerates (10-60fps) function onFrame(){ var frame = []; @@ -69,7 +69,7 @@ function onFrame(){ if (phase<0 || phase>5) { speed =-speed; - framerate = Math.random()*50+1 + framerate = Math.random()*50+10; } phase += speed; From e62aa9c8a9e5dd65ecf1e790d5b796b434aa1320 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 28 Dec 2017 03:17:44 -0500 Subject: [PATCH 009/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 261da353..4eb05d44 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -66,14 +66,12 @@ if (device){ function onFrame(){ var frame = []; - if (phase<0 || phase>5) - { + if (phase<0 || phase>5){ speed =-speed; framerate = Math.random()*50+10; } phase += speed; - shift = Math.floor(phase); for (var i = 0; i Date: Thu, 28 Dec 2017 16:35:53 -0500 Subject: [PATCH 010/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 4eb05d44..57e492d2 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -44,9 +44,6 @@ function convert_grb(rgb){ grb[i*3+1] = rgb[i*3+0]; // R grb[i*3+0] = rgb[i*3+1]; // G grb[i*3+2] = rgb[i*3+2]; // B - - if (shift Date: Fri, 29 Dec 2017 00:36:07 -0500 Subject: [PATCH 011/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 57e492d2..37d3ecf7 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -1,7 +1,7 @@ //Stream producer-consumer pattern than allows separation of concerns for BlinkStick frame streaming. //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate. //Consumer pulls frames from the stream and sends them to BlickStick at the same rate. -//This is elastic and very efficient, requiring negligible CPU for the node process. +//This is elastic and very efficient, with low overhead CPU in the node process. var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); @@ -84,6 +84,7 @@ function onFrame(){ //Pixel source (this one is Knight Rider, or a Cylon) var pixels = [ + //R //G //B 000, 000, 000, 000, 000, 000, 000, 000, 000, From d8ec3df789b82aac740c232be65a3fe36af7be9b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 00:38:14 -0500 Subject: [PATCH 012/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 37d3ecf7..7d868757 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -82,7 +82,7 @@ function onFrame(){ return frame; } -//Pixel source (this one is Knight Rider, or a Cylon) +//Pixel source (this one is Kit from Knight Rider, or a Cylon) var pixels = [ //R //G //B 000, 000, 000, From a30888159acbfabbce859803ae3e0d6642508ea6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 00:39:01 -0500 Subject: [PATCH 013/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 7d868757..77a754d4 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -58,7 +58,7 @@ if (device){ //Returns the next frame. //Called by the producer. //Pixel source can be anything (eg. a running screenshot scaled to 8x1 resolution for ambient display applications) -//This example is an animation that shifts an eye back and forth at variable framerates (10-60fps) +//This example is an animation that shifts an image back and forth at variable framerates (10-60fps) function onFrame(){ var frame = []; @@ -82,7 +82,7 @@ function onFrame(){ return frame; } -//Pixel source (this one is Kit from Knight Rider, or a Cylon) +//Pixel source (this one is Kit from Knight Rider, or maybe a Cylon?) var pixels = [ //R //G //B 000, 000, 000, From 751e6994ad1822aa4585d670da467f2d559f6edd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 00:43:14 -0500 Subject: [PATCH 014/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 77a754d4..a1b72482 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -1,7 +1,7 @@ -//Stream producer-consumer pattern than allows separation of concerns for BlinkStick frame streaming. -//Producer pushes frames to the stream as simple RGB arrays at a variable frame rate. -//Consumer pulls frames from the stream and sends them to BlickStick at the same rate. -//This is elastic and very efficient, with low overhead CPU in the node process. +//Stream producer-consumer pattern than allows separation of concerns for BlinkStick frame streaming +//Producer pushes frames to the stream as simple RGB arrays at a variable frame rate +//Consumer pulls frames from the stream and sends them to BlickStick at the same rate +//This is elastic and very efficient, with low overhead CPU in the node process var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); @@ -14,24 +14,28 @@ var framerate = 60; //Stream buffer for frames var stream_buffer = []; -//This provides some elasticity to avoid skipped frames. +//This provides some elasticity to avoid skipped frames var MAX_BUFFER_LENGTH = 60; //Stream Producer function producer(){ + //Skip frame when buffer is full if (stream_buffer.length0){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); device.setColors(0, grb, function(err, grb) {}); } + //Clamp to 1-60fps framerate = Math.max(1, Math.min(framerate, 60)); setTimeout(consumer, 1000/framerate); } @@ -54,17 +58,19 @@ if (device){ consumer(); } -//User defined frame generator. -//Returns the next frame. -//Called by the producer. +//User defined frame generator +//Returns the next frame +//Called by the producer //Pixel source can be anything (eg. a running screenshot scaled to 8x1 resolution for ambient display applications) //This example is an animation that shifts an image back and forth at variable framerates (10-60fps) function onFrame(){ var frame = []; + //Bounce image off edges of LED strip if (phase<0 || phase>5){ speed =-speed; + //Vary the fps after each bounce framerate = Math.random()*50+10; } From 6d3f7309828606de7e9becd0e7b68773c89f40aa Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 00:45:31 -0500 Subject: [PATCH 015/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index a1b72482..15728947 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -89,6 +89,7 @@ function onFrame(){ } //Pixel source (this one is Kit from Knight Rider, or maybe a Cylon?) +//Add more pixels to match your LED strip size (this is for 8 LEDs) var pixels = [ //R //G //B 000, 000, 000, From 5225ba464eb4081cf1afad023334978a8f5f3350 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 00:48:39 -0500 Subject: [PATCH 016/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 15728947..2f0cf2f1 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -2,6 +2,7 @@ //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate //This is elastic and very efficient, with low overhead CPU in the node process +//Note that LED strips vary in response time, resulting in colour blur at high fps var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); From ecb5fc0216079932839afd6f417ddc55e04fb073 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 00:50:12 -0500 Subject: [PATCH 017/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 2f0cf2f1..440d1546 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -2,7 +2,7 @@ //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate //This is elastic and very efficient, with low overhead CPU in the node process -//Note that LED strips vary in response time, resulting in colour blur at high fps +//Note that LEDs can vary in response time, resulting in colour blur at high fps var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); From cf7579ecc7d2bdd42a0aa566b5cb7201d0104919 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 01:09:07 -0500 Subject: [PATCH 018/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 440d1546..9572db32 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -91,6 +91,7 @@ function onFrame(){ //Pixel source (this one is Kit from Knight Rider, or maybe a Cylon?) //Add more pixels to match your LED strip size (this is for 8 LEDs) +//Note this example for for a single channel. var pixels = [ //R //G //B 000, 000, 000, From fa9ccb9531892877c99e0e54bd59c597d7e69b4a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 01:09:28 -0500 Subject: [PATCH 019/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 9572db32..87beda01 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -91,7 +91,7 @@ function onFrame(){ //Pixel source (this one is Kit from Knight Rider, or maybe a Cylon?) //Add more pixels to match your LED strip size (this is for 8 LEDs) -//Note this example for for a single channel. +//Note this example for for a single channel (up to 64 LEDs) var pixels = [ //R //G //B 000, 000, 000, From 3d7fe5cf3501e1fefac7429a93c8bc73950a9104 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 01:11:40 -0500 Subject: [PATCH 020/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 87beda01..d499c2ca 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -91,7 +91,7 @@ function onFrame(){ //Pixel source (this one is Kit from Knight Rider, or maybe a Cylon?) //Add more pixels to match your LED strip size (this is for 8 LEDs) -//Note this example for for a single channel (up to 64 LEDs) +//Note this example is for a single channel (up to 64 LEDs) var pixels = [ //R //G //B 000, 000, 000, From ff64b8f7dbd1f8b490e5050fb5781f5d64673931 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 01:13:41 -0500 Subject: [PATCH 021/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index d499c2ca..d1f3fe1a 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -69,7 +69,7 @@ function onFrame(){ var frame = []; //Bounce image off edges of LED strip - if (phase<0 || phase>5){ + if (phase<0 || phase>size-3){ speed =-speed; //Vary the fps after each bounce framerate = Math.random()*50+10; From 64689cf4398c0666c483d73088a430674eaa946c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 02:58:44 -0500 Subject: [PATCH 022/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index d1f3fe1a..6d79a335 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -73,6 +73,10 @@ function onFrame(){ speed =-speed; //Vary the fps after each bounce framerate = Math.random()*50+10; + //Change pupil colour + pixels[(size-2)*3+0] = Math.floor(Math.random()*128); + pixels[(size-2)*3+1] = Math.floor(Math.random()*128); + pixels[(size-2)*3+2] = Math.floor(Math.random()*128); } phase += speed; @@ -99,9 +103,9 @@ var pixels = [ 000, 000, 000, 000, 000, 000, 000, 000, 000, - 004, 000, 000, //Iris - 128, 032, 000, //Pupil - 004, 000, 000 //Iris + 004, 004, 004, //Iris + 128, 000, 000, //Pupil + 004, 004, 004 //Iris ]; //Animation variables From 5a26aa5059a5c2f30c3f919eee8e315625eca9fa Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 03:00:12 -0500 Subject: [PATCH 023/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 6d79a335..9a1d834e 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -93,7 +93,7 @@ function onFrame(){ return frame; } -//Pixel source (this one is Kit from Knight Rider, or maybe a Cylon?) +//Pixel source (this one is an image of an eye) //Add more pixels to match your LED strip size (this is for 8 LEDs) //Note this example is for a single channel (up to 64 LEDs) var pixels = [ @@ -104,8 +104,8 @@ var pixels = [ 000, 000, 000, 000, 000, 000, 004, 004, 004, //Iris - 128, 000, 000, //Pupil - 004, 004, 004 //Iris + 000, 000, 128, //Pupil + 032, 032, 032 //Iris ]; //Animation variables From 817f5a99bb53dfc5e37fc2444c6d6dd6150dca22 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 22:41:18 -0500 Subject: [PATCH 024/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 9a1d834e..f36c043a 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -1,4 +1,4 @@ -//Stream producer-consumer pattern than allows separation of concerns for BlinkStick frame streaming +//Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate //This is elastic and very efficient, with low overhead CPU in the node process From d65947d147d9caa383abab3827c3014c77aafc76 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 22:46:00 -0500 Subject: [PATCH 025/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index f36c043a..833ee075 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -103,7 +103,7 @@ var pixels = [ 000, 000, 000, 000, 000, 000, 000, 000, 000, - 004, 004, 004, //Iris + 032, 032, 032, //Iris 000, 000, 128, //Pupil 032, 032, 032 //Iris ]; From aad3625a5bb1644394586755674bbf3808441099 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 29 Dec 2017 22:46:40 -0500 Subject: [PATCH 026/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 833ee075..783037e7 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -1,7 +1,7 @@ //Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate -//This is elastic and very efficient, with low overhead CPU in the node process +//This is elastic and very efficient, with low CPU overhead in the node process //Note that LEDs can vary in response time, resulting in colour blur at high fps var blinkstick = require('blinkstick'); From 82df6723f3207223663f34d4aa2ff957a2a93142 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 01:08:53 -0500 Subject: [PATCH 027/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 147 ++++++++++++++++++++++++++++++ examples/pro_stream/pro_stream.js | 3 +- 2 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 examples/cpu-meter/cpu-meter.js diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js new file mode 100644 index 00000000..82563f62 --- /dev/null +++ b/examples/cpu-meter/cpu-meter.js @@ -0,0 +1,147 @@ +//Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming +//Producer pushes frames to the stream as simple RGB arrays at a variable frame rate +//Consumer pulls frames from the stream and sends them to BlickStick at the same rate +//This is elastic and very efficient, with low CPU overhead in the node process +//Note that LEDs can vary in response time, resulting in colour blur at high fps + +var os = require("os"); +var blinkstick = require('blinkstick'); +var device = blinkstick.findFirst(); + +//Variable frame rate in frames per second (fps) +//Can be dynamically set in onFrame() +//BlinkStick can handle maximum 60fps +var framerate = 60; + +//Stream buffer for frames +//This provides some elasticity to avoid skipped frames +var stream_buffer = []; +var MAX_BUFFER_LENGTH = 60; + +//Stream Producer +function producer(){ + //Skip frame when buffer is full + if (stream_buffer.length0){ + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + device.setColors(0, grb, function(err, grb) {}); + } + //Clamp to 1-60fps + framerate = Math.max(1, Math.min(framerate, 60)); + setTimeout(consumer, 1000/framerate); +} + +function convert_grb(rgb){ + var grb = []; + + for (var i = 0; isize-3){ + speed =-speed; + + + + } + + phase += speed; + shift = Math.floor(phase); + + for (var i = 0; i Date: Sun, 31 Dec 2017 01:55:13 -0500 Subject: [PATCH 028/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 82563f62..b107c7a1 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -1,6 +1,7 @@ //Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate +//User //This is elastic and very efficient, with low CPU overhead in the node process //Note that LEDs can vary in response time, resulting in colour blur at high fps @@ -61,39 +62,29 @@ function convert_grb(rgb){ //This example is an animation that shifts an image back and forth at variable framerates (10-60fps) //The framerate corresponds to current CPU load. - var startMeasure = cpuAverage(); function onFrame(){ var frame = []; - + + //Vary the fps by CPU load var endMeasure = cpuAverage(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; var percentageCPU = 100 - ~~(100 * idleDifference / totalDifference); - startMeasure = endMeasure; - - //Vary the fps by CPU load framerate = percentageCPU/2+10; - //Vary pupil colour by CPU load + //Vary pupil colour by CPU load (green to amber to red) pixels[(size-2)*3+0] = Math.floor(percentageCPU*2.5)+5; pixels[(size-2)*3+1] = Math.floor(percentageCPU/8)+32; pixels[(size-2)*3+2] = 5; - - //Bounce image off edges of LED strip - if (phase<0 || phase>size-3){ - speed =-speed; - - - - } - + //Bounce image off edges of LED strip (copy from pixel source to new frame) + if (phase<0 || phase>size-3) + speed =-speed; phase += speed; shift = Math.floor(phase); - for (var i = 0; i Date: Sun, 31 Dec 2017 02:36:31 -0500 Subject: [PATCH 029/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 170 +++++++++++++++++--------------- 1 file changed, 92 insertions(+), 78 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index b107c7a1..955f305d 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -21,40 +21,39 @@ var MAX_BUFFER_LENGTH = 60; //Stream Producer function producer(){ - //Skip frame when buffer is full - if (stream_buffer.length0){ - var rgb = stream_buffer.shift(); - var grb = convert_grb(rgb); - device.setColors(0, grb, function(err, grb) {}); - } - //Clamp to 1-60fps - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(consumer, 1000/framerate); + //Send converted frame, if available + if (stream_buffer.length>0){ + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + device.setColors(0, grb, function(err, grb) {}); + } + //Clamp to 1-60fps + framerate = Math.max(1, Math.min(framerate, 60)); + setTimeout(consumer, 1000/framerate); } function convert_grb(rgb){ - var grb = []; - - for (var i = 0; isize-3) - speed =-speed; - phase += speed; - shift = Math.floor(phase); - for (var i = 0; isize-3) + speed =-speed; + phase += speed; + shift = Math.floor(phase); + for (var i = 0; i Date: Sun, 31 Dec 2017 02:39:11 -0500 Subject: [PATCH 030/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 955f305d..ea2adb0c 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -135,6 +135,7 @@ function cpuAverage() { //Clean exit process.on('SIGTERM', onExit); +process.on('SIGINT', onExit); function onExit(){ //Turn off LEDs var frame = []; From 361795a5258265af75002963c9b54a15f057398f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 02:46:10 -0500 Subject: [PATCH 031/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 41 +++++-------------------------- examples/pro_stream/pro_stream.js | 16 ++++++++++++ 2 files changed, 22 insertions(+), 35 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index ea2adb0c..31cae0b5 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -1,52 +1,33 @@ -//Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming -//Producer pushes frames to the stream as simple RGB arrays at a variable frame rate -//Consumer pulls frames from the stream and sends them to BlickStick at the same rate -//User -//This is elastic and very efficient, with low CPU overhead in the node process -//Note that LEDs can vary in response time, resulting in colour blur at high fps +//CPU meter based on pro_stream.js example var os = require("os"); var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); -//Variable frame rate in frames per second (fps) -//Can be dynamically set in onFrame() -//BlinkStick can handle maximum 60fps var framerate = 60; - -//Stream buffer for frames -//This provides some elasticity to avoid skipped frames var stream_buffer = []; var MAX_BUFFER_LENGTH = 60; -//Stream Producer function producer(){ - //Skip frame when buffer is full if (stream_buffer.length0){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); device.setColors(0, grb, function(err, grb) {}); } - //Clamp to 1-60fps framerate = Math.max(1, Math.min(framerate, 60)); setTimeout(consumer, 1000/framerate); } function convert_grb(rgb){ var grb = []; - for (var i = 0; i Date: Sun, 31 Dec 2017 03:19:01 -0500 Subject: [PATCH 032/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 31cae0b5..8d6b312f 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -58,7 +58,7 @@ function onFrame(){ //Vary pupil colour by CPU load (green to amber to red) pixels[(size-2)*3+0] = Math.floor(percentageCPU*2.5)+5; - pixels[(size-2)*3+1] = Math.floor(percentageCPU/8)+32; + pixels[(size-2)*3+1] = 16; pixels[(size-2)*3+2] = 5; //Bounce image off edges of LED strip (copy from pixel source to new frame) From a1ec93816b81bc078fe75895e6bed24251768a52 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 03:23:50 -0500 Subject: [PATCH 033/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 8d6b312f..53d4e774 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -58,8 +58,8 @@ function onFrame(){ //Vary pupil colour by CPU load (green to amber to red) pixels[(size-2)*3+0] = Math.floor(percentageCPU*2.5)+5; - pixels[(size-2)*3+1] = 16; - pixels[(size-2)*3+2] = 5; + pixels[(size-2)*3+1] = 20; + pixels[(size-2)*3+2] = 4; //Bounce image off edges of LED strip (copy from pixel source to new frame) if (phase<0 || phase>size-3) From 5990aa0fccd51941ec7408690a4d548e4bf6ce54 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 03:27:32 -0500 Subject: [PATCH 034/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 53d4e774..23ddb084 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -1,3 +1,4 @@ +//Blinkstick Desktop PC Case lighting mod //CPU meter based on pro_stream.js example var os = require("os"); From f332a7eb6317930942f9e91e3310284fabce84d5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 03:30:13 -0500 Subject: [PATCH 035/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 23ddb084..b8317e91 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -1,5 +1,5 @@ -//Blinkstick Desktop PC Case lighting mod -//CPU meter based on pro_stream.js example +//Blinkstick Desktop PC case lighting mod +//CPU load meter based on pro_stream.js example var os = require("os"); var blinkstick = require('blinkstick'); From f11254fe770e9fae4d47379370ca86f69c5bbf96 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 04:50:36 -0500 Subject: [PATCH 036/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 56 +++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index b8317e91..f5984158 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -9,6 +9,7 @@ var framerate = 60; var stream_buffer = []; var MAX_BUFFER_LENGTH = 60; + function producer(){ if (stream_buffer.length Date: Sun, 31 Dec 2017 05:03:56 -0500 Subject: [PATCH 037/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index f5984158..75c2255b 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -77,8 +77,8 @@ function onFrame(){ //Vary pupil colour by CPU load (green to amber to red) pixels[(size-2)*3+0] = Math.floor(cpu_avg*2.5)+5; - pixels[(size-2)*3+1] = 20; - pixels[(size-2)*3+2] = 4; + pixels[(size-2)*3+1] = 24; + pixels[(size-2)*3+2] = 2; //Bounce image off edges of LED strip (copy from pixel source to new frame) if (phase<0 || phase>size-3) From 2623d52fff1ed78239af9bb4a4ea6f9dcbec132e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 31 Dec 2017 05:30:50 -0500 Subject: [PATCH 038/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 75c2255b..0c8de3ab 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -8,7 +8,7 @@ var device = blinkstick.findFirst(); var framerate = 60; var stream_buffer = []; var MAX_BUFFER_LENGTH = 60; - +var exit = false; function producer(){ if (stream_buffer.length0){ + if (stream_buffer.length>0 && !exit){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); device.setColors(0, grb, function(err, grb) {}); @@ -116,6 +116,7 @@ function cpuLoad() { process.on('SIGTERM', onExit); process.on('SIGINT', onExit); function onExit(){ + exit = true; //Turn off LEDs var frame = []; for (var i = 0; i Date: Sun, 31 Dec 2017 05:35:30 -0500 Subject: [PATCH 039/581] Signed-off-by: dcerisano --- examples/pro_stream/pro_stream.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 266bd625..544654c2 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -17,6 +17,9 @@ var framerate = 60; var stream_buffer = []; var MAX_BUFFER_LENGTH = 60; +//Clean exit flag +var exit = false; + //Stream Producer function producer(){ //Skip frame when buffer is full @@ -30,7 +33,7 @@ function producer(){ //Stream Consumer function consumer(){ //Send converted frame, if available - if (stream_buffer.length>0){ + if (stream_buffer.length>0 && !exit){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); device.setColors(0, grb, function(err, grb) {}); @@ -119,6 +122,7 @@ process.on('SIGINT', onExit); function onExit(){ //Turn off LEDs + exit = true; var frame = []; for (var i = 0; i Date: Mon, 1 Jan 2018 17:39:37 -0500 Subject: [PATCH 040/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 168 ++++++++++++++++---------------- 1 file changed, 83 insertions(+), 85 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 0c8de3ab..78fe412a 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -1,4 +1,3 @@ -//Blinkstick Desktop PC case lighting mod //CPU load meter based on pro_stream.js example var os = require("os"); @@ -11,30 +10,30 @@ var MAX_BUFFER_LENGTH = 60; var exit = false; function producer(){ - if (stream_buffer.length0 && !exit){ - var rgb = stream_buffer.shift(); - var grb = convert_grb(rgb); - device.setColors(0, grb, function(err, grb) {}); - } - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(consumer, 1000/framerate); + if (stream_buffer.length>0 && !exit){ + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + device.setColors(0, grb, function(err, grb) {}); + } + framerate = Math.max(1, Math.min(framerate, 60)); + setTimeout(consumer, 1000/framerate); } function convert_grb(rgb){ - var grb = []; - for (var i = 0; isize-3) - speed =-speed; - phase += speed; - shift = Math.floor(phase); - for (var i = 0; isize-3) + speed =-speed; + phase += speed; + shift = Math.floor(phase); + for (var i = 0; i Date: Mon, 1 Jan 2018 17:50:30 -0500 Subject: [PATCH 041/581] Signed-off-by: dcerisano --- examples/cpu-meter/cpu-meter.js | 9 ++++----- examples/pro_stream/pro_stream.js | 10 ++++------ 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/examples/cpu-meter/cpu-meter.js b/examples/cpu-meter/cpu-meter.js index 78fe412a..073a5d7d 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/cpu-meter/cpu-meter.js @@ -6,18 +6,17 @@ var device = blinkstick.findFirst(); var framerate = 60; var stream_buffer = []; -var MAX_BUFFER_LENGTH = 60; -var exit = false; +var streaming = true; function producer(){ - if (stream_buffer.length0 && !exit){ + if (stream_buffer.length>0 && streaming){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); device.setColors(0, grb, function(err, grb) {}); @@ -115,7 +114,7 @@ function cpuLoad() { process.on('SIGTERM', onExit); process.on('SIGINT', onExit); function onExit(){ - exit = true; + streaming = false; //Turn off LEDs var frame = []; for (var i = 0; i0 && !exit){ + if (stream_buffer.length>0 && streaming){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); device.setColors(0, grb, function(err, grb) {}); @@ -122,7 +120,7 @@ process.on('SIGINT', onExit); function onExit(){ //Turn off LEDs - exit = true; + streaming = false; var frame = []; for (var i = 0; i Date: Tue, 2 Jan 2018 02:54:58 -0500 Subject: [PATCH 042/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 87 +++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 examples/ambient-display/ambient-display.js diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js new file mode 100644 index 00000000..f3ac0dc3 --- /dev/null +++ b/examples/ambient-display/ambient-display.js @@ -0,0 +1,87 @@ +//Ambient display based on pro_stream.js example +//Minimum Requirements: +// - Latest version of nodejs (tested with v8.9.3) +// - 4 core processor, 8MB ram, and 2MB graphics card +// - Latest blinkstick, screenshot-desktop and sharp npm packages + +//Notes: +// - Higher framerates will slow down your entire system, depending on how fast it is. +// - Lower framerates reduce CPU overhead but increase ambient display lag +// - The bottleneck is screenshot-desktop - looking for a faster screen grabber. +// - Sharp package is very fast and used for scaling the screenshot to Nx1 for blinkstick + +var os = require("os"); +var blinkstick = require('blinkstick'); +const screenshot = require('screenshot-desktop'); +const sharp = require('sharp'); + +var device = blinkstick.findFirst(); + +// Change framerate and number of LEDs to match your system +var framerate = 30; +var size = 8; + +var stream_buffer = []; +var streaming = true; + +function producer(){ + if (stream_buffer.length == 0) + onFrame(); + framerate = Math.max(1, Math.min(framerate, 60)); + setTimeout(producer, 1000/framerate); +} + +function consumer(){ + if (stream_buffer.length>0 && streaming){ + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + device.setColors(0, grb, function(err, grb) {}); + } + framerate = Math.max(1, Math.min(framerate, 60)); + setTimeout(consumer, 1000/framerate); +} + +function convert_grb(rgb){ + var grb = []; + for (var i = 0; i { + sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { + stream_buffer.push(data); + }) + }); + + return frame; +} + + +//Clean exit +process.on('SIGTERM', onExit); +process.on('SIGINT', onExit); +function onExit(){ + streaming = false; + //Turn off LEDs + var frame = []; + for (var i = 0; i Date: Tue, 2 Jan 2018 02:57:40 -0500 Subject: [PATCH 043/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index f3ac0dc3..fd21cdce 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -8,7 +8,8 @@ // - Higher framerates will slow down your entire system, depending on how fast it is. // - Lower framerates reduce CPU overhead but increase ambient display lag // - The bottleneck is screenshot-desktop - looking for a faster screen grabber. -// - Sharp package is very fast and used for scaling the screenshot to Nx1 for blinkstick +// - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip +// - Test with Monitor Color Test youtube video (https://www.youtube.com/watch?v=JeQuelXsUYA) running at FULLSCREEN. var os = require("os"); var blinkstick = require('blinkstick'); From acab59df8cefd38c48c9dcec075c35841fc88c54 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 03:00:04 -0500 Subject: [PATCH 044/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index fd21cdce..ae7e42c6 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -19,7 +19,7 @@ const sharp = require('sharp'); var device = blinkstick.findFirst(); // Change framerate and number of LEDs to match your system -var framerate = 30; +var framerate = 10; var size = 8; var stream_buffer = []; From 5b3100892ac3ee54d97089c07b562b20630d8ece Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 03:04:55 -0500 Subject: [PATCH 045/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index ae7e42c6..6daef911 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -10,7 +10,8 @@ // - The bottleneck is screenshot-desktop - looking for a faster screen grabber. // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip // - Test with Monitor Color Test youtube video (https://www.youtube.com/watch?v=JeQuelXsUYA) running at FULLSCREEN. - +// - Could be improved by morphing between screenshots. +s var os = require("os"); var blinkstick = require('blinkstick'); const screenshot = require('screenshot-desktop'); @@ -18,7 +19,7 @@ const sharp = require('sharp'); var device = blinkstick.findFirst(); -// Change framerate and number of LEDs to match your system +// Change framerate and number of LEDs to match your system specs. var framerate = 10; var size = 8; From 0876c35456d08f6566c23b7bd36587868b6026c5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 03:23:27 -0500 Subject: [PATCH 046/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 6daef911..38c8fc28 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -1,7 +1,7 @@ //Ambient display based on pro_stream.js example //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) -// - 4 core processor, 8MB ram, and 2MB graphics card +// - 4 core 3GHz processor, 8MB ram, and 2MB graphics card // - Latest blinkstick, screenshot-desktop and sharp npm packages //Notes: @@ -11,7 +11,7 @@ // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip // - Test with Monitor Color Test youtube video (https://www.youtube.com/watch?v=JeQuelXsUYA) running at FULLSCREEN. // - Could be improved by morphing between screenshots. -s + var os = require("os"); var blinkstick = require('blinkstick'); const screenshot = require('screenshot-desktop'); From 3c98e948bffc72d5da143e38f99c8233a2bbf6c5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 03:47:30 -0500 Subject: [PATCH 047/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 38c8fc28..79d2e181 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -9,7 +9,7 @@ // - Lower framerates reduce CPU overhead but increase ambient display lag // - The bottleneck is screenshot-desktop - looking for a faster screen grabber. // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip -// - Test with Monitor Color Test youtube video (https://www.youtube.com/watch?v=JeQuelXsUYA) running at FULLSCREEN. +// - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. // - Could be improved by morphing between screenshots. var os = require("os"); From fd0feba01e8e087fcbf811192e63032a7ce1f3b6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 03:49:20 -0500 Subject: [PATCH 048/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 79d2e181..281effc6 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -2,7 +2,7 @@ //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card -// - Latest blinkstick, screenshot-desktop and sharp npm packages +// - Latest blinkstick, screenshot-desktop and sharp npm packages (these work with Windows, Linux and Mac) //Notes: // - Higher framerates will slow down your entire system, depending on how fast it is. From 595697c4ddfd0d66af3d646134fac0bcb3bd4c59 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 03:49:47 -0500 Subject: [PATCH 049/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 281effc6..27a4cc08 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -7,7 +7,7 @@ //Notes: // - Higher framerates will slow down your entire system, depending on how fast it is. // - Lower framerates reduce CPU overhead but increase ambient display lag -// - The bottleneck is screenshot-desktop - looking for a faster screen grabber. +// - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber. // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip // - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. // - Could be improved by morphing between screenshots. From 4a39d8ab2f99bbf943ac108293c9b17a0caedb53 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 16:24:05 -0500 Subject: [PATCH 050/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 27a4cc08..d469117d 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -10,9 +10,9 @@ // - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber. // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip // - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. -// - Could be improved by morphing between screenshots. +// - Could be improved by morphing between screenshots, and predictive look-ahead . +// - Ideally, blinkstick display drivers could be created so it could be treated as just another monitor. -var os = require("os"); var blinkstick = require('blinkstick'); const screenshot = require('screenshot-desktop'); const sharp = require('sharp'); @@ -20,7 +20,7 @@ const sharp = require('sharp'); var device = blinkstick.findFirst(); // Change framerate and number of LEDs to match your system specs. -var framerate = 10; +var framerate = 15; var size = 8; var stream_buffer = []; From 4f087157ddeeec15d58c7d86022c27c5bdcdb333 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 17:57:16 -0500 Subject: [PATCH 051/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index d469117d..b81cd5f1 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -7,7 +7,7 @@ //Notes: // - Higher framerates will slow down your entire system, depending on how fast it is. // - Lower framerates reduce CPU overhead but increase ambient display lag -// - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber. +// - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber (gstreamer?) // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip // - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. // - Could be improved by morphing between screenshots, and predictive look-ahead . From eea8f9c8464019300497c85f28775ab8c79810c1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 18:00:17 -0500 Subject: [PATCH 052/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index b81cd5f1..0be91ec4 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -1,4 +1,5 @@ -//Ambient display based on pro_stream.js example +//Ambient display based on pro_stream.js example +//Realtime streaming of desktop to blinkstick //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card From a382d640e932fda35bccc3e43a3e41c9845e3f29 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 18:01:56 -0500 Subject: [PATCH 053/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 0be91ec4..c508a06a 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -1,5 +1,6 @@ //Ambient display based on pro_stream.js example -//Realtime streaming of desktop to blinkstick +//Realtime streaming of desktop to blinkstick +// //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card From b5fb0a080bb432e8bd0133838d3b0d5a4a8d6ff8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 18:02:02 -0500 Subject: [PATCH 054/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index c508a06a..405b8456 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -1,4 +1,4 @@ -//Ambient display based on pro_stream.js example +//Ambient display (ambilight) based on pro_stream.js example //Realtime streaming of desktop to blinkstick // //Minimum Requirements: From f303027337edb4ee2bce3b0ba61fa8e1d5f11481 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 18:03:28 -0500 Subject: [PATCH 055/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js index 405b8456..da7908fc 100644 --- a/examples/ambient-display/ambient-display.js +++ b/examples/ambient-display/ambient-display.js @@ -1,5 +1,5 @@ //Ambient display (ambilight) based on pro_stream.js example -//Realtime streaming of desktop to blinkstick +//Realtime streaming of desktop to blinkstick for Windows, Linux and Mac // //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) From ebd4ac57384400d7154d168015f17896725be075 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:17:07 -0500 Subject: [PATCH 056/581] Signed-off-by: dcerisano --- examples/ambient-display/ambient-display.js | 91 --------- examples/pro_stream/ambient_display.js | 37 ++++ .../cpu-meter.js => pro_stream/cpu_meter.js} | 69 +------ examples/pro_stream/pro_stream.js | 172 +++++++++++------- 4 files changed, 151 insertions(+), 218 deletions(-) delete mode 100644 examples/ambient-display/ambient-display.js create mode 100644 examples/pro_stream/ambient_display.js rename examples/{cpu-meter/cpu-meter.js => pro_stream/cpu_meter.js} (58%) diff --git a/examples/ambient-display/ambient-display.js b/examples/ambient-display/ambient-display.js deleted file mode 100644 index da7908fc..00000000 --- a/examples/ambient-display/ambient-display.js +++ /dev/null @@ -1,91 +0,0 @@ -//Ambient display (ambilight) based on pro_stream.js example -//Realtime streaming of desktop to blinkstick for Windows, Linux and Mac -// -//Minimum Requirements: -// - Latest version of nodejs (tested with v8.9.3) -// - 4 core 3GHz processor, 8MB ram, and 2MB graphics card -// - Latest blinkstick, screenshot-desktop and sharp npm packages (these work with Windows, Linux and Mac) - -//Notes: -// - Higher framerates will slow down your entire system, depending on how fast it is. -// - Lower framerates reduce CPU overhead but increase ambient display lag -// - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber (gstreamer?) -// - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip -// - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. -// - Could be improved by morphing between screenshots, and predictive look-ahead . -// - Ideally, blinkstick display drivers could be created so it could be treated as just another monitor. - -var blinkstick = require('blinkstick'); -const screenshot = require('screenshot-desktop'); -const sharp = require('sharp'); - -var device = blinkstick.findFirst(); - -// Change framerate and number of LEDs to match your system specs. -var framerate = 15; -var size = 8; - -var stream_buffer = []; -var streaming = true; - -function producer(){ - if (stream_buffer.length == 0) - onFrame(); - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(producer, 1000/framerate); -} - -function consumer(){ - if (stream_buffer.length>0 && streaming){ - var rgb = stream_buffer.shift(); - var grb = convert_grb(rgb); - device.setColors(0, grb, function(err, grb) {}); - } - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(consumer, 1000/framerate); -} - -function convert_grb(rgb){ - var grb = []; - for (var i = 0; i { - sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { - stream_buffer.push(data); - }) - }); - - return frame; -} - - -//Clean exit -process.on('SIGTERM', onExit); -process.on('SIGINT', onExit); -function onExit(){ - streaming = false; - //Turn off LEDs - var frame = []; - for (var i = 0; i { + sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { + pro_stream.produceFrame(data); + }) + }); +} diff --git a/examples/cpu-meter/cpu-meter.js b/examples/pro_stream/cpu_meter.js similarity index 58% rename from examples/cpu-meter/cpu-meter.js rename to examples/pro_stream/cpu_meter.js index 073a5d7d..ced6e380 100644 --- a/examples/cpu-meter/cpu-meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -1,40 +1,9 @@ //CPU load meter based on pro_stream.js example var os = require("os"); -var blinkstick = require('blinkstick'); -var device = blinkstick.findFirst(); +var pro_stream = require("./pro_stream.js"); var framerate = 60; -var stream_buffer = []; -var streaming = true; - -function producer(){ - if (stream_buffer.length == 0) - stream_buffer.push(onFrame()); - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(producer, 1000/framerate); -} - -function consumer(){ - if (stream_buffer.length>0 && streaming){ - var rgb = stream_buffer.shift(); - var grb = convert_grb(rgb); - device.setColors(0, grb, function(err, grb) {}); - } - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(consumer, 1000/framerate); -} - -function convert_grb(rgb){ - var grb = []; - for (var i = 0; i0 && streaming){ - var rgb = stream_buffer.shift(); - var grb = convert_grb(rgb); - device.setColors(0, grb, function(err, grb) {}); - } - //Clamp to 1-60fps - framerate = Math.max(1, Math.min(framerate, 60)); - setTimeout(consumer, 1000/framerate); + consumeFrame(); + setTimeout(consumer, 1000/consumer_framerate); } function convert_grb(rgb){ var grb = []; - for (var i = 0; i0 && streaming){ + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + device.setColors(0, grb, function(err, grb) {}); + } -function onFrame(){ - var frame = []; + //Clamp between 1 and 60 fps + consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); +} - //Bounce image off edges of LED strip - if (phase<0 || phase>size-3){ - speed =-speed; - //Vary the fps after each bounce - framerate = Math.random()*50+10; - //Change pupil colour - pixels[(size-2)*3+0] = Math.floor(Math.random()*128); - pixels[(size-2)*3+1] = Math.floor(Math.random()*128); - pixels[(size-2)*3+2] = Math.floor(Math.random()*128); - } +function setOnFrame(fn) +{ + onFrame = fn; +} - phase += speed; - shift = Math.floor(phase); +var onFrame = function(){ + // use setOnFrame() to set user defined OnFrame function +}; - for (var i = 0; i Date: Tue, 2 Jan 2018 20:32:52 -0500 Subject: [PATCH 057/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 2 +- examples/pro_stream/cpu_meter.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index 14519aa5..e5753c27 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -1,4 +1,4 @@ -//Ambient display (ambilight) based on pro_stream.js example +//Ambient display (ambilight) based on pro_stream.js //Realtime streaming of desktop to blinkstick for Windows, Linux and Mac // //Minimum Requirements: diff --git a/examples/pro_stream/cpu_meter.js b/examples/pro_stream/cpu_meter.js index ced6e380..25dca858 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -1,4 +1,4 @@ -//CPU load meter based on pro_stream.js example +//CPU load meter based on pro_stream.js var os = require("os"); var pro_stream = require("./pro_stream.js"); From 6c7373e17fd82062a2fef33d191c44a50fb7d1e9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:38:40 -0500 Subject: [PATCH 058/581] Signed-off-by: dcerisano --- examples/pro_stream/cpu_meter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/pro_stream/cpu_meter.js b/examples/pro_stream/cpu_meter.js index 25dca858..3277505e 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -1,4 +1,5 @@ //CPU load meter based on pro_stream.js +//User defined OnFrame() function animates a bouncing 'eye' to indicate CPU load var os = require("os"); var pro_stream = require("./pro_stream.js"); From 82c5c434257aa32ebc8b90f3230fd1672987edcb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:41:03 -0500 Subject: [PATCH 059/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index e5753c27..a551c546 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -1,6 +1,7 @@ //Ambient display (ambilight) based on pro_stream.js //Realtime streaming of desktop to blinkstick for Windows, Linux and Mac -// +//User defined OnFrame() creates jpegs of the desktop, scales, and sends to BlinkStick + //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card From 449ac51ff32ca7c1323bfbadbe4372a4bebee5b4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:42:06 -0500 Subject: [PATCH 060/581] Signed-off-by: dcerisano --- examples/pro_stream/cpu_meter.js | 1 + examples/pro_stream/pro_stream.js | 1 + 2 files changed, 2 insertions(+) diff --git a/examples/pro_stream/cpu_meter.js b/examples/pro_stream/cpu_meter.js index 3277505e..6625b3c1 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -1,4 +1,5 @@ //CPU load meter based on pro_stream.js +//Windows, Linux and Mac //User defined OnFrame() function animates a bouncing 'eye' to indicate CPU load var os = require("os"); diff --git a/examples/pro_stream/pro_stream.js b/examples/pro_stream/pro_stream.js index 675544de..822e8836 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/pro_stream/pro_stream.js @@ -3,6 +3,7 @@ //Consumer pulls frames from the stream and sends them to BlickStick at the same rate //This is elastic and very efficient, with low CPU overhead in the node process //Note that LEDs can vary in response time, resulting in colour blur at high fps +//Windows, Linux and Mac module.exports = { setOnFrame: function(fn) { From 0b60b4fc93b30c5b75f3695fe6f67e8ec8f67cc2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:42:43 -0500 Subject: [PATCH 061/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index a551c546..c669d7b1 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -5,7 +5,7 @@ //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card -// - Latest blinkstick, screenshot-desktop and sharp npm packages (these work with Windows, Linux and Mac) +// - Latest blinkstick, screenshot-desktop and sharp npm packages (these all work with Windows, Linux and Mac) //Notes: // - Higher framerates will slow down your entire system, depending on how fast it is. From 25c96d00d16598227f8f28c71ee508f235821003 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:43:52 -0500 Subject: [PATCH 062/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 3 ++- examples/pro_stream/cpu_meter.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index c669d7b1..6c01e2c6 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -1,6 +1,7 @@ //Ambient display (ambilight) based on pro_stream.js -//Realtime streaming of desktop to blinkstick for Windows, Linux and Mac +//Realtime streaming of desktop to blinkstick. //User defined OnFrame() creates jpegs of the desktop, scales, and sends to BlinkStick +//Windows, Linux and Mac //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) diff --git a/examples/pro_stream/cpu_meter.js b/examples/pro_stream/cpu_meter.js index 6625b3c1..40c2be39 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -1,6 +1,6 @@ //CPU load meter based on pro_stream.js -//Windows, Linux and Mac //User defined OnFrame() function animates a bouncing 'eye' to indicate CPU load +//Windows, Linux and Mac var os = require("os"); var pro_stream = require("./pro_stream.js"); From 6f8891e88a369fc52c60dafe514da9ca536f0cea Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 20:51:12 -0500 Subject: [PATCH 063/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 11 ++++++----- examples/pro_stream/cpu_meter.js | 12 ++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index 6c01e2c6..0994b734 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -25,11 +25,6 @@ var size = 8; var producer_framerate = 15; var consumer_framerate = 15; -pro_stream.setProducerFramerate(producer_framerate); -pro_stream.setConsumerFramerate(consumer_framerate); -pro_stream.setSize(size); -pro_stream.setOnFrame(onFrame); - function onFrame(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { @@ -37,3 +32,9 @@ function onFrame(){ }) }); } + +//Configure stream +pro_stream.setProducerFramerate(producer_framerate); +pro_stream.setConsumerFramerate(consumer_framerate); +pro_stream.setSize(size); +pro_stream.setOnFrame(onFrame); \ No newline at end of file diff --git a/examples/pro_stream/cpu_meter.js b/examples/pro_stream/cpu_meter.js index 40c2be39..dbaa69e6 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -29,9 +29,6 @@ var pixels = [ var size = pixels.length/3; -pro_stream.setSize(size); -pro_stream.setOnFrame(onFrame); - function onFrame() { var frame = []; @@ -64,10 +61,11 @@ function onFrame() { if (shift Date: Tue, 2 Jan 2018 20:53:05 -0500 Subject: [PATCH 064/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 4 ++-- examples/pro_stream/cpu_meter.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index 0994b734..677df680 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -34,7 +34,7 @@ function onFrame(){ } //Configure stream +pro_stream.setSize(size); pro_stream.setProducerFramerate(producer_framerate); pro_stream.setConsumerFramerate(consumer_framerate); -pro_stream.setSize(size); -pro_stream.setOnFrame(onFrame); \ No newline at end of file +pro_stream.setOnFrame(onFrame); diff --git a/examples/pro_stream/cpu_meter.js b/examples/pro_stream/cpu_meter.js index dbaa69e6..505a02f3 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/pro_stream/cpu_meter.js @@ -84,6 +84,7 @@ function cpuLoad() { //Configure stream pro_stream.setSize(size); -pro_stream.setOnFrame(onFrame); pro_stream.setProducerFramerate(framerate); pro_stream.setConsumerFramerate(framerate); +pro_stream.setOnFrame(onFrame); + From a0de3ab28417a6c171eae12a4b48ef07a4b4bdba Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 22:17:43 -0500 Subject: [PATCH 065/581] Signed-off-by: dcerisano --- examples/pro_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pro_stream/ambient_display.js b/examples/pro_stream/ambient_display.js index 677df680..50762c82 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/pro_stream/ambient_display.js @@ -1,6 +1,6 @@ //Ambient display (ambilight) based on pro_stream.js //Realtime streaming of desktop to blinkstick. -//User defined OnFrame() creates jpegs of the desktop, scales, and sends to BlinkStick +//User defined OnFrame() creates jpegs of the desktop, scales, and sends frame to stream //Windows, Linux and Mac //Minimum Requirements: From 0defcd61f13a1664a45fd284a3103aba6bc6b1b8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 22:46:18 -0500 Subject: [PATCH 066/581] Signed-off-by: dcerisano --- .../ambient_display.js | 14 +++++----- .../{pro_stream => flex_stream}/cpu_meter.js | 18 ++++++------- .../flex_stream.js} | 27 ++++++++++++++++--- 3 files changed, 40 insertions(+), 19 deletions(-) rename examples/{pro_stream => flex_stream}/ambient_display.js (84%) rename examples/{pro_stream => flex_stream}/cpu_meter.js (85%) rename examples/{pro_stream/pro_stream.js => flex_stream/flex_stream.js} (89%) diff --git a/examples/pro_stream/ambient_display.js b/examples/flex_stream/ambient_display.js similarity index 84% rename from examples/pro_stream/ambient_display.js rename to examples/flex_stream/ambient_display.js index 50762c82..cafe0520 100644 --- a/examples/pro_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -1,4 +1,4 @@ -//Ambient display (ambilight) based on pro_stream.js +//Ambient display (ambilight) based on flex_stream.js //Realtime streaming of desktop to blinkstick. //User defined OnFrame() creates jpegs of the desktop, scales, and sends frame to stream //Windows, Linux and Mac @@ -17,7 +17,7 @@ // - Could be improved by morphing between screenshots, and predictive look-ahead . // - Ideally, blinkstick display drivers could be created so it could be treated as just another monitor. -var pro_stream = require("./pro_stream.js"); +var flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); const sharp = require('sharp'); @@ -28,13 +28,13 @@ var consumer_framerate = 15; function onFrame(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { - pro_stream.produceFrame(data); + flex_stream.produceFrame(data); }) }); } //Configure stream -pro_stream.setSize(size); -pro_stream.setProducerFramerate(producer_framerate); -pro_stream.setConsumerFramerate(consumer_framerate); -pro_stream.setOnFrame(onFrame); +flex_stream.setSize(size); +flex_stream.setProducerFramerate(producer_framerate); +flex_stream.setConsumerFramerate(consumer_framerate); +flex_stream.setOnFrame(onFrame); diff --git a/examples/pro_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js similarity index 85% rename from examples/pro_stream/cpu_meter.js rename to examples/flex_stream/cpu_meter.js index 505a02f3..f2726ad0 100644 --- a/examples/pro_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -1,9 +1,9 @@ -//CPU load meter based on pro_stream.js +//CPU load meter based on flex_stream.js //User defined OnFrame() function animates a bouncing 'eye' to indicate CPU load //Windows, Linux and Mac var os = require("os"); -var pro_stream = require("./pro_stream.js"); +var flex_stream = require("./flex_stream.js"); var framerate = 60; @@ -62,9 +62,9 @@ function onFrame() { shift+=1; } - pro_stream.setProducerFramerate(framerate); - pro_stream.setConsumerFramerate(framerate); - pro_stream.produceFrame(frame); + flex_stream.setProducerFramerate(framerate); + flex_stream.setConsumerFramerate(framerate); + flex_stream.produceFrame(frame); } @@ -83,8 +83,8 @@ function cpuLoad() { } //Configure stream -pro_stream.setSize(size); -pro_stream.setProducerFramerate(framerate); -pro_stream.setConsumerFramerate(framerate); -pro_stream.setOnFrame(onFrame); +flex_stream.setSize(size); +flex_stream.setProducerFramerate(framerate); +flex_stream.setConsumerFramerate(framerate); +flex_stream.setOnFrame(onFrame); diff --git a/examples/pro_stream/pro_stream.js b/examples/flex_stream/flex_stream.js similarity index 89% rename from examples/pro_stream/pro_stream.js rename to examples/flex_stream/flex_stream.js index 822e8836..acf21ed4 100644 --- a/examples/pro_stream/pro_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,3 +1,4 @@ +//For Blinkstick Flex (MAX 32 LEDS) //Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate @@ -9,6 +10,14 @@ module.exports = { setOnFrame: function(fn) { setOnFrame(fn); }, + setTransparency: function(t) + { + setTransparency(t); + }, + getTransparency: function() + { + return getTransparency(); + }, produceFrame: function(frame) { produceFrame(frame); @@ -42,7 +51,8 @@ module.exports = { var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); -var size = 8; +var MAX_SIZE = 32; +var size = 8; //Variable frame rates in frames per second (fps) //Can be dynamically set in onFrame() @@ -134,8 +144,9 @@ function getConsumerFramerate() function setSize(s) -{ - size = s; +{ + //Clamp between 0 and MAX_LEDS + size = Math.max(0, Math.min(s, MAX_SIZE)); } function getSize() @@ -143,6 +154,16 @@ function getSize() return size; } +function setTransparency(t) +{ + + transparency = Math.max(0, Math.min(t, 1)); +} + +function getTranparency() +{ + return t; +} //Clean exit process.on('SIGTERM', onExit); From 7b13a796df3198d3fc670264e7cd958f5ee410ab Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 2 Jan 2018 22:59:52 -0500 Subject: [PATCH 067/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index acf21ed4..13c5635f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,9 +1,10 @@ -//For Blinkstick Flex (MAX 32 LEDS) +//For Blinkstick Flex or Pro (MAX 64 LEDS) //Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate //This is elastic and very efficient, with low CPU overhead in the node process //Note that LEDs can vary in response time, resulting in colour blur at high fps +//The 64 LED maximum corresponds to a single Pro channel, which is the limit for Flex. //Windows, Linux and Mac module.exports = { @@ -51,7 +52,7 @@ module.exports = { var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); -var MAX_SIZE = 32; +var MAX_SIZE = 64; var size = 8; //Variable frame rates in frames per second (fps) From 141b89d190699ac840aa724d098cb1bcb2515f9c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:29:17 -0500 Subject: [PATCH 068/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 9 +++--- examples/flex_stream/cpu_meter.js | 12 +++---- examples/flex_stream/flex_stream.js | 42 +++++++++++++++++++++---- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index cafe0520..9705701f 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -14,16 +14,16 @@ // - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber (gstreamer?) // - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip // - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. -// - Could be improved by morphing between screenshots, and predictive look-ahead . // - Ideally, blinkstick display drivers could be created so it could be treated as just another monitor. var flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); const sharp = require('sharp'); -var size = 8; -var producer_framerate = 15; -var consumer_framerate = 15; +var size = 8; +var producer_framerate = 4; // low capture rate to reduce overhead +var consumer_framerate = 60; // high render rate +var transparency = 0.95 // 95% transparency at 60fps gives interlaced (morph) effect function onFrame(){ screenshot().then((img) => { @@ -37,4 +37,5 @@ function onFrame(){ flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); +flex_stream.setTransparency(transparency); flex_stream.setOnFrame(onFrame); diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index f2726ad0..171e8cff 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -1,5 +1,5 @@ //CPU load meter based on flex_stream.js -//User defined OnFrame() function animates a bouncing 'eye' to indicate CPU load +//User defined OnFrame() function animates a bouncing particle trail to indicate CPU load //Windows, Linux and Mac var os = require("os"); @@ -22,15 +22,15 @@ var pixels = [ 000, 000, 000, 000, 000, 000, 000, 000, 000, - 004, 004, 004, //Iris - 000, 000, 128, //Pupil - 004, 004, 004 //Iris + 000, 000, 000, + 255, 255, 255, + 000, 000, 000 ]; var size = pixels.length/3; function onFrame() { - var frame = []; + var frame = flex_stream.newFrame(); //Vary the fps by CPU load var endMeasure = cpuLoad(); @@ -63,7 +63,6 @@ function onFrame() { } flex_stream.setProducerFramerate(framerate); - flex_stream.setConsumerFramerate(framerate); flex_stream.produceFrame(frame); } @@ -86,5 +85,6 @@ function cpuLoad() { flex_stream.setSize(size); flex_stream.setProducerFramerate(framerate); flex_stream.setConsumerFramerate(framerate); +flex_stream.setTransparency(.75); flex_stream.setOnFrame(onFrame); diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 13c5635f..8be7267d 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,4 +1,4 @@ -//For Blinkstick Flex or Pro (MAX 64 LEDS) +//For Blinkstick Flex and Pro (MAX 64 LEDS) //Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming //Producer pushes frames to the stream as simple RGB arrays at a variable frame rate //Consumer pulls frames from the stream and sends them to BlickStick at the same rate @@ -11,6 +11,9 @@ module.exports = { setOnFrame: function(fn) { setOnFrame(fn); }, + newFrame: function() { + return newFrame(); + }, setTransparency: function(t) { setTransparency(t); @@ -53,7 +56,10 @@ var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); var MAX_SIZE = 64; -var size = 8; +var size = 8; // Default 8 LEDs. +var transparency = 0; // Default opaque frames +var backingstore = null; +var currentFrame = null; //Variable frame rates in frames per second (fps) //Can be dynamically set in onFrame() @@ -82,7 +88,7 @@ function consumer(){ } function convert_grb(rgb){ - var grb = []; + var grb = newFrame(); for (var i = 0; i0 && streaming){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); - device.setColors(0, grb, function(err, grb) {}); + currentFrame = grb; } + if (currentFrame != null) + setColors(currentFrame); + //Clamp between 1 and 60 fps consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); } +function setColors(grb) +{ + if (backingstore == null || transparency == 0) + backingstore = grb; + + if (transparency>0){ //Composite the new frame with current backingstore + for (var i = 0; i Date: Wed, 3 Jan 2018 00:36:04 -0500 Subject: [PATCH 069/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 8be7267d..4e0bb082 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -5,8 +5,11 @@ //This is elastic and very efficient, with low CPU overhead in the node process //Note that LEDs can vary in response time, resulting in colour blur at high fps //The 64 LED maximum corresponds to a single Pro channel, which is the limit for Flex. +//Transparency can be used to composite a newly produced frame over the last. +//This allows morphing of slowly produced frames at 60fps (interlacing - see examples). //Windows, Linux and Mac + module.exports = { setOnFrame: function(fn) { setOnFrame(fn); @@ -57,7 +60,7 @@ var device = blinkstick.findFirst(); var MAX_SIZE = 64; var size = 8; // Default 8 LEDs. -var transparency = 0; // Default opaque frames +var transparency = 0; // Default opaque frames (no morphing) var backingstore = null; var currentFrame = null; From 510499e78c829dadf6c15a1903746dfc27fd1e85 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:38:46 -0500 Subject: [PATCH 070/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 9705701f..dd1a6d8c 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -22,8 +22,8 @@ const sharp = require('sharp'); var size = 8; var producer_framerate = 4; // low capture rate to reduce overhead -var consumer_framerate = 60; // high render rate -var transparency = 0.95 // 95% transparency at 60fps gives interlaced (morph) effect +var consumer_framerate = 60; // high render rate for smooth interlacing +var transparency = 0.95 // 95% transparency for smooth interlacing function onFrame(){ screenshot().then((img) => { From 1f0d5248700d5745d1bfdf401f0b68a98c9f31c8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:40:43 -0500 Subject: [PATCH 071/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 171e8cff..347b0a34 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -85,6 +85,6 @@ function cpuLoad() { flex_stream.setSize(size); flex_stream.setProducerFramerate(framerate); flex_stream.setConsumerFramerate(framerate); -flex_stream.setTransparency(.75); +flex_stream.setTransparency(.75); // leave a particle trail flex_stream.setOnFrame(onFrame); From bd0a6e7b5b624aa5d0bee261a06f9d8ac1f67b59 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:43:05 -0500 Subject: [PATCH 072/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 3 +-- examples/flex_stream/flex_stream.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 347b0a34..85431652 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -63,8 +63,7 @@ function onFrame() { } flex_stream.setProducerFramerate(framerate); - flex_stream.produceFrame(frame); - + flex_stream.produceFrame(frame); } //CPU load diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 4e0bb082..cb381b7c 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -6,7 +6,7 @@ //Note that LEDs can vary in response time, resulting in colour blur at high fps //The 64 LED maximum corresponds to a single Pro channel, which is the limit for Flex. //Transparency can be used to composite a newly produced frame over the last. -//This allows morphing of slowly produced frames at 60fps (interlacing - see examples). +//This allows smooth morphing of slowly produced frames at high fps (interlacing - see examples). //Windows, Linux and Mac From 4652f58959929578e345ba4787a2a016e1ce2717 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:43:59 -0500 Subject: [PATCH 073/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index dd1a6d8c..2996c547 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -21,7 +21,7 @@ const screenshot = require('screenshot-desktop'); const sharp = require('sharp'); var size = 8; -var producer_framerate = 4; // low capture rate to reduce overhead +var producer_framerate = 5; // low capture rate to reduce overhead (5 fps = 200ms lag) var consumer_framerate = 60; // high render rate for smooth interlacing var transparency = 0.95 // 95% transparency for smooth interlacing From 8426473d1f2f13e4d1918102033df549885d4277 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:49:48 -0500 Subject: [PATCH 074/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 6 +++--- examples/flex_stream/cpu_meter.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 2996c547..2c32d960 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -17,11 +17,11 @@ // - Ideally, blinkstick display drivers could be created so it could be treated as just another monitor. var flex_stream = require("./flex_stream.js"); -const screenshot = require('screenshot-desktop'); -const sharp = require('sharp'); +const screenshot = require('screenshot-desktop'); //Available at npm.org +const sharp = require('sharp'); //Available at npm.org var size = 8; -var producer_framerate = 5; // low capture rate to reduce overhead (5 fps = 200ms lag) +var producer_framerate = 5; // low capture rate to reduce CPU overhead (5 fps = 200ms lag) var consumer_framerate = 60; // high render rate for smooth interlacing var transparency = 0.95 // 95% transparency for smooth interlacing diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 85431652..d83ab6a1 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -44,7 +44,7 @@ function onFrame() { startMeasure = endMeasure; framerate = cpu_avg/2+10; - //Vary pupil colour by CPU load (green to amber to red) + //Vary particle colour by CPU load (green to amber to red) pixels[(size-2)*3+0] = Math.floor(cpu_avg*2.5)+5; pixels[(size-2)*3+1] = 100-Math.floor(cpu_avg); pixels[(size-2)*3+2] = 2; From 255fb4cfa905aed64e8fe05f51b619b6033863f4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:56:47 -0500 Subject: [PATCH 075/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 2c32d960..31303e2a 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -21,8 +21,8 @@ const screenshot = require('screenshot-desktop'); //Available at npm.org const sharp = require('sharp'); //Available at npm.org var size = 8; -var producer_framerate = 5; // low capture rate to reduce CPU overhead (5 fps = 200ms lag) -var consumer_framerate = 60; // high render rate for smooth interlacing +var producer_framerate = 5; // Low capture rate to reduce CPU overhead (5 fps = 200ms lag) +var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.95 // 95% transparency for smooth interlacing function onFrame(){ From cd20027cc4ebcad3d81145f4a90707c22ee7a425 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:57:33 -0500 Subject: [PATCH 076/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 31303e2a..ae27f938 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -1,5 +1,5 @@ //Ambient display (ambilight) based on flex_stream.js -//Realtime streaming of desktop to blinkstick. +//Realtime streaming of desktop to BlinkStick Flex and Pro //User defined OnFrame() creates jpegs of the desktop, scales, and sends frame to stream //Windows, Linux and Mac From f571669b429ca72efcd5d17fb5bee5b18ed4442e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:59:21 -0500 Subject: [PATCH 077/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index ae27f938..6bd5c974 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -23,7 +23,7 @@ const sharp = require('sharp'); //Available at npm.org var size = 8; var producer_framerate = 5; // Low capture rate to reduce CPU overhead (5 fps = 200ms lag) var consumer_framerate = 60; // High render rate for smooth interlacing -var transparency = 0.95 // 95% transparency for smooth interlacing +var transparency = 0.85 // 95% transparency for smooth interlacing function onFrame(){ screenshot().then((img) => { From 8acf5c8c09f89a4538b8320bc7f83a708808099b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 00:59:28 -0500 Subject: [PATCH 078/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 6bd5c974..ea92c926 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -23,7 +23,7 @@ const sharp = require('sharp'); //Available at npm.org var size = 8; var producer_framerate = 5; // Low capture rate to reduce CPU overhead (5 fps = 200ms lag) var consumer_framerate = 60; // High render rate for smooth interlacing -var transparency = 0.85 // 95% transparency for smooth interlacing +var transparency = 0.85 // 85% transparency for smooth interlacing function onFrame(){ screenshot().then((img) => { From 035b3405eebdeb6e3c43df799f938eaec967e279 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:00:16 -0500 Subject: [PATCH 079/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index ea92c926..f9b16392 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -8,13 +8,6 @@ // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card // - Latest blinkstick, screenshot-desktop and sharp npm packages (these all work with Windows, Linux and Mac) -//Notes: -// - Higher framerates will slow down your entire system, depending on how fast it is. -// - Lower framerates reduce CPU overhead but increase ambient display lag -// - The bottleneck is screenshot-desktop - looking for a faster cross-platform screen grabber (gstreamer?) -// - Sharp package is very fast and used for scaling the screenshot to Nx1 resolution for blinkstick LED strip -// - Test with Ambilight Color Test youtube video (https://www.youtube.com/watch?v=8u4UzzJZAUg) running at FULLSCREEN. -// - Ideally, blinkstick display drivers could be created so it could be treated as just another monitor. var flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org From 3f29bc013ed2130dd0ea04918c4bbc36e1b42d63 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:02:00 -0500 Subject: [PATCH 080/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index f9b16392..02e9a6a0 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -14,7 +14,7 @@ const screenshot = require('screenshot-desktop'); //Available at npm.org const sharp = require('sharp'); //Available at npm.org var size = 8; -var producer_framerate = 5; // Low capture rate to reduce CPU overhead (5 fps = 200ms lag) +var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing From a3d659a2b54e387f784216ef9a88ac415f00e872 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:21:47 -0500 Subject: [PATCH 081/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index cb381b7c..e40ad282 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,15 +1,9 @@ -//For Blinkstick Flex and Pro (MAX 64 LEDS) -//Stream producer-consumer pattern that allows separation of concerns for BlinkStick frame streaming -//Producer pushes frames to the stream as simple RGB arrays at a variable frame rate -//Consumer pulls frames from the stream and sends them to BlickStick at the same rate -//This is elastic and very efficient, with low CPU overhead in the node process -//Note that LEDs can vary in response time, resulting in colour blur at high fps -//The 64 LED maximum corresponds to a single Pro channel, which is the limit for Flex. -//Transparency can be used to composite a newly produced frame over the last. -//This allows smooth morphing of slowly produced frames at high fps (interlacing - see examples). +//For Blinkstick Flex and Pro (MAX 64 LEDS - single channel) +//Producer pushes frames to the stream as simple RGB arrays at a set rate +//Consumer pulls frames from the stream and renders them to BlickStick at a set rate +//When consumer rate is faster than production rate, transparency allows frame morphing //Windows, Linux and Mac - module.exports = { setOnFrame: function(fn) { setOnFrame(fn); @@ -59,19 +53,16 @@ var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); var MAX_SIZE = 64; -var size = 8; // Default 8 LEDs. -var transparency = 0; // Default opaque frames (no morphing) +var size = 8; // Default 8 LEDs. + var backingstore = null; var currentFrame = null; -//Variable frame rates in frames per second (fps) -//Can be dynamically set in onFrame() -//BlinkStick can handle maximum 60fps -var producer_framerate = 60; -var consumer_framerate = 60; +var producer_framerate = 30; // Low rate to reduce CPU overhead +var consumer_framerate = 60; // High rate for frame compositing +var transparency = 0.5; // Default interlaced (fast morphing) //Stream buffer for frames -//This provides some elasticity to avoid skipped frames var stream_buffer = []; //Clean exit flag From 9ca07cb6a80a8571e7a689f35ddfe70cdf90ff35 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:22:45 -0500 Subject: [PATCH 082/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e40ad282..7c7c25f7 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -60,7 +60,7 @@ var currentFrame = null; var producer_framerate = 30; // Low rate to reduce CPU overhead var consumer_framerate = 60; // High rate for frame compositing -var transparency = 0.5; // Default interlaced (fast morphing) +var transparency = .5; // Default interlaced (fast morphing) //Stream buffer for frames var stream_buffer = []; From f3c06001a141b94247974dce279e6a3ee76a5f11 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:23:34 -0500 Subject: [PATCH 083/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 7c7c25f7..373b135f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -58,8 +58,8 @@ var size = 8; // Default 8 LEDs. var backingstore = null; var currentFrame = null; -var producer_framerate = 30; // Low rate to reduce CPU overhead -var consumer_framerate = 60; // High rate for frame compositing +var producer_framerate = 30; // Default low rate to reduce CPU overhead +var consumer_framerate = 60; // Default high rate for frame morphing var transparency = .5; // Default interlaced (fast morphing) //Stream buffer for frames From ff859a9d86cbc1565ac2cb90a8ab360c874c7166 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:26:11 -0500 Subject: [PATCH 084/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 373b135f..b07f855c 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -116,13 +116,13 @@ function consumeFrame() } if (currentFrame != null) - setColors(currentFrame); + morphFrame(currentFrame); //Clamp between 1 and 60 fps consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); } -function setColors(grb) +function morphFrame(grb) { if (backingstore == null || transparency == 0) backingstore = grb; From 2ccc7b644a95b7e333c19fd4c99a65eec465f918 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:26:27 -0500 Subject: [PATCH 085/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index b07f855c..6d7901bd 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -135,7 +135,6 @@ function morphFrame(grb) backingstore[i*3+2] = Math.floor(backingstore[i*3+2]*transparency + grb[i*3+2]*(1-transparency)); // B } } - device.setColors(0, backingstore, function(err, backingstore) {}); } From a79a42165e3f88ac349ff748861f90032e61b350 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:27:58 -0500 Subject: [PATCH 086/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 6d7901bd..1a51da7b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -126,10 +126,10 @@ function morphFrame(grb) { if (backingstore == null || transparency == 0) backingstore = grb; - - if (transparency>0){ //Composite the new frame with current backingstore + + //Morph the new frame with current backingstore (additive colour blend) + if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 01:28:15 -0500 Subject: [PATCH 087/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 1a51da7b..af3c7bba 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -127,7 +127,7 @@ function morphFrame(grb) if (backingstore == null || transparency == 0) backingstore = grb; - //Morph the new frame with current backingstore (additive colour blend) + //Morph the new frame with current backingstore (additive colour blending function) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 01:29:02 -0500 Subject: [PATCH 088/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index af3c7bba..eed7535c 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -127,7 +127,7 @@ function morphFrame(grb) if (backingstore == null || transparency == 0) backingstore = grb; - //Morph the new frame with current backingstore (additive colour blending function) + //Morph the new frame with current backingstore (additive alpha colour blending) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 01:29:56 -0500 Subject: [PATCH 089/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index eed7535c..648e1839 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -127,7 +127,7 @@ function morphFrame(grb) if (backingstore == null || transparency == 0) backingstore = grb; - //Morph the new frame with current backingstore (additive alpha colour blending) + //Morph the new frame with current backingstore (additive alpha blending) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 01:34:05 -0500 Subject: [PATCH 090/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index d83ab6a1..9d882b1f 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -1,5 +1,5 @@ //CPU load meter based on flex_stream.js -//User defined OnFrame() function animates a bouncing particle trail to indicate CPU load +//User defined OnFrame() is a particle trail emitter to indicate CPU load. //Windows, Linux and Mac var os = require("os"); @@ -23,7 +23,7 @@ var pixels = [ 000, 000, 000, 000, 000, 000, 000, 000, 000, - 255, 255, 255, + 255, 255, 255, // Particle 000, 000, 000 ]; From 3da67c89a3d9011e1c455d07f241ad02f7a352bd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:35:02 -0500 Subject: [PATCH 091/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 02e9a6a0..4775fdeb 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -1,6 +1,6 @@ //Ambient display (ambilight) based on flex_stream.js //Realtime streaming of desktop to BlinkStick Flex and Pro -//User defined OnFrame() creates jpegs of the desktop, scales, and sends frame to stream +//User defined OnFrame() creates jpegs of the desktop, scales, and interlaces frame to stream //Windows, Linux and Mac //Minimum Requirements: From 1481876e5342c6e3e66e1db20e55676cb72f5859 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:37:06 -0500 Subject: [PATCH 092/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 4775fdeb..490921b9 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -1,6 +1,6 @@ //Ambient display (ambilight) based on flex_stream.js //Realtime streaming of desktop to BlinkStick Flex and Pro -//User defined OnFrame() creates jpegs of the desktop, scales, and interlaces frame to stream +//User defined OnFrame() samples jpegs of the desktop, and renders interlaced frames to BlinkStick //Windows, Linux and Mac //Minimum Requirements: From cad42a2fc7d7765f4f580b7e931d7b0d361b359e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:37:26 -0500 Subject: [PATCH 093/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 490921b9..7838ccf5 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -1,6 +1,6 @@ //Ambient display (ambilight) based on flex_stream.js //Realtime streaming of desktop to BlinkStick Flex and Pro -//User defined OnFrame() samples jpegs of the desktop, and renders interlaced frames to BlinkStick +//User defined OnFrame() samples the desktop, and renders interlaced frames to BlinkStick //Windows, Linux and Mac //Minimum Requirements: From f164702a0bfb4708808df6c6db6827710869eff4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:38:20 -0500 Subject: [PATCH 094/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 7838ccf5..9fabacc8 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -6,7 +6,7 @@ //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) // - 4 core 3GHz processor, 8MB ram, and 2MB graphics card -// - Latest blinkstick, screenshot-desktop and sharp npm packages (these all work with Windows, Linux and Mac) +// - Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) var flex_stream = require("./flex_stream.js"); From 059b82fbbe4abd9d37585882e80ca1718da26717 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:39:19 -0500 Subject: [PATCH 095/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 9fabacc8..ddf6f76c 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -18,6 +18,7 @@ var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing +//Send desktop to BlinkStick function onFrame(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { From 21b96f7a8724f80f26cb6ac2b1891b8b08701f35 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:42:26 -0500 Subject: [PATCH 096/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 9d882b1f..95f46ea5 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -49,7 +49,7 @@ function onFrame() { pixels[(size-2)*3+1] = 100-Math.floor(cpu_avg); pixels[(size-2)*3+2] = 2; - //Bounce image off edges of LED strip (copy from pixel source to new frame) + //Bounce particle off edges of LED strip (copy from pixel source to new frame) if (phase<0 || phase>size-3) speed =-speed; phase += speed; From ba4ede0ef1d7c91aa77fdf7cbd33397246003d72 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:46:31 -0500 Subject: [PATCH 097/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index ddf6f76c..1fc87f1e 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -13,7 +13,7 @@ var flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org const sharp = require('sharp'); //Available at npm.org -var size = 8; +var size = 8; // Default 8, maximum 64 (single channel) var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing From 1ec3d61d7c3926968e96fb4707445c83bfd0e1a9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:48:44 -0500 Subject: [PATCH 098/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index 1fc87f1e..fbb9c6eb 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -18,7 +18,7 @@ var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing -//Send desktop to BlinkStick +//Send desktop to BlinkStick via async futures pipeline function onFrame(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { From beba0cfca7ad285675687eac9b38fe7fbd18d9a5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:50:02 -0500 Subject: [PATCH 099/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index fbb9c6eb..ac91b2c2 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -13,7 +13,7 @@ var flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org const sharp = require('sharp'); //Available at npm.org -var size = 8; // Default 8, maximum 64 (single channel) +var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing From bdb5a8855b5587b591b8e37f0ca682e529f1f0b2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 01:51:39 -0500 Subject: [PATCH 100/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 648e1839..26b50887 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -109,7 +109,7 @@ function produceFrame(frame) function consumeFrame() { - if (stream_buffer.length>0 && streaming){ + if (stream_buffer.length>0){ var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); currentFrame = grb; @@ -117,7 +117,7 @@ function consumeFrame() if (currentFrame != null) morphFrame(currentFrame); - + //Clamp between 1 and 60 fps consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); } @@ -126,8 +126,8 @@ function morphFrame(grb) { if (backingstore == null || transparency == 0) backingstore = grb; - - //Morph the new frame with current backingstore (additive alpha blending) + + //Morph the new frame with current backingstore (additive alpha blending) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 02:11:00 -0500 Subject: [PATCH 101/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 33 ++++++++++++------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 95f46ea5..7efefd45 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -5,29 +5,19 @@ var os = require("os"); var flex_stream = require("./flex_stream.js"); -var framerate = 60; +var size = 8; // Default 8, maximum 64 (single BlickStick channel) +var framerate = 60; // Varies with CPU load +var transparency = .7; // Leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; -var phase = 0; -var shift = 0; -var speed = 1; +var phase = 0; +var shift = 0; +var speed = 1; var cpu_avg = 0; -var pixels = [ - //R //G //B - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 000, 000, 000, - 255, 255, 255, // Particle - 000, 000, 000 - ]; - -var size = pixels.length/3; +var pixels = null; function onFrame() { var frame = flex_stream.newFrame(); @@ -37,13 +27,16 @@ function onFrame() { var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; - percentageCPU = 100 - ~~(100 * idleDifference / totalDifference); + percentageCPU = 100 - (100 * idleDifference / totalDifference); - cpu_avg = (cpu_avg+percentageCPU)/2; + cpu_avg = (cpu_avg+percentageCPU)/1.2; startMeasure = endMeasure; framerate = cpu_avg/2+10; + if (pixels == null) + pixels = flex_stream.newFrame(); + //Vary particle colour by CPU load (green to amber to red) pixels[(size-2)*3+0] = Math.floor(cpu_avg*2.5)+5; pixels[(size-2)*3+1] = 100-Math.floor(cpu_avg); @@ -84,6 +77,6 @@ function cpuLoad() { flex_stream.setSize(size); flex_stream.setProducerFramerate(framerate); flex_stream.setConsumerFramerate(framerate); -flex_stream.setTransparency(.75); // leave a particle trail +flex_stream.setTransparency(transparency); flex_stream.setOnFrame(onFrame); From 3de3fb94a0b50d63a521b45d30bc1cca489150bd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 02:27:55 -0500 Subject: [PATCH 102/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 7efefd45..1bda1165 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -29,10 +29,10 @@ function onFrame() { percentageCPU = 100 - (100 * idleDifference / totalDifference); - cpu_avg = (cpu_avg+percentageCPU)/1.2; + cpu_avg = (cpu_avg+percentageCPU)/2; startMeasure = endMeasure; - framerate = cpu_avg/2+10; + framerate = cpu_avg/1.8+5; if (pixels == null) pixels = flex_stream.newFrame(); From 733fa1387bf29397001d98a8f31e0723aee5e7a1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 02:28:53 -0500 Subject: [PATCH 103/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 1bda1165..83132f8b 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -7,7 +7,7 @@ var flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var framerate = 60; // Varies with CPU load -var transparency = .7; // Leave a particle trail +var transparency = .75; // Leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; From 09ab7f973e33d7745f455744daefeb9c08b282ca Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 02:39:17 -0500 Subject: [PATCH 104/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 83132f8b..a006dfe2 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -22,16 +22,15 @@ var pixels = null; function onFrame() { var frame = flex_stream.newFrame(); - //Vary the fps by CPU load + var endMeasure = cpuLoad(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; - + startMeasure = endMeasure; + + //Vary the framerate by percentage CPU load (4 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); - cpu_avg = (cpu_avg+percentageCPU)/2; - - startMeasure = endMeasure; framerate = cpu_avg/1.8+5; if (pixels == null) From 0d49dc3296b00ca81cca73eaa1c5df39bc45c9d2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 02:43:58 -0500 Subject: [PATCH 105/581] Signed-off-by: dcerisano --- examples/flex_stream/ambient_display.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambient_display.js index ac91b2c2..bad1adf3 100644 --- a/examples/flex_stream/ambient_display.js +++ b/examples/flex_stream/ambient_display.js @@ -5,7 +5,6 @@ //Minimum Requirements: // - Latest version of nodejs (tested with v8.9.3) -// - 4 core 3GHz processor, 8MB ram, and 2MB graphics card // - Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) From 854da63373533dd30651d84831cea5235d175f82 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 02:45:27 -0500 Subject: [PATCH 106/581] Signed-off-by: dcerisano --- examples/flex_stream/{ambient_display.js => ambilight.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/flex_stream/{ambient_display.js => ambilight.js} (100%) diff --git a/examples/flex_stream/ambient_display.js b/examples/flex_stream/ambilight.js similarity index 100% rename from examples/flex_stream/ambient_display.js rename to examples/flex_stream/ambilight.js From 0fd2a378ebd24dfc3eb12d43d987e62f7d518d1b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 02:59:36 -0500 Subject: [PATCH 107/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index a006dfe2..758b3b74 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -11,18 +11,16 @@ var transparency = .75; // Leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; +var cpu_avg = 0; var phase = 0; var shift = 0; var speed = 1; -var cpu_avg = 0; var pixels = null; function onFrame() { var frame = flex_stream.newFrame(); - - var endMeasure = cpuLoad(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; From 046d07bd6604c68c0f31d77893a6400dbd87dd4b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:01:16 -0500 Subject: [PATCH 108/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 14 +++--- examples/flex_stream/cpu_meter.js | 84 +++++++++++++++---------------- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index bad1adf3..3a244815 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -4,8 +4,8 @@ //Windows, Linux and Mac //Minimum Requirements: -// - Latest version of nodejs (tested with v8.9.3) -// - Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) +//- Latest version of nodejs (tested with v8.9.3) +//- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) var flex_stream = require("./flex_stream.js"); @@ -19,11 +19,11 @@ var transparency = 0.85 // 85% transparency for smooth interlacing //Send desktop to BlinkStick via async futures pipeline function onFrame(){ - screenshot().then((img) => { - sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { - flex_stream.produceFrame(data); - }) - }); + screenshot().then((img) => { + sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { + flex_stream.produceFrame(data); + }) + }); } //Configure stream diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 758b3b74..31b35537 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -20,54 +20,54 @@ var speed = 1; var pixels = null; function onFrame() { - var frame = flex_stream.newFrame(); - var endMeasure = cpuLoad(); - var idleDifference = endMeasure.idle - startMeasure.idle; - var totalDifference = endMeasure.total - startMeasure.total; - startMeasure = endMeasure; - - //Vary the framerate by percentage CPU load (4 to 60 fps) - percentageCPU = 100 - (100 * idleDifference / totalDifference); - cpu_avg = (cpu_avg+percentageCPU)/2; - framerate = cpu_avg/1.8+5; + var frame = flex_stream.newFrame(); + var endMeasure = cpuLoad(); + var idleDifference = endMeasure.idle - startMeasure.idle; + var totalDifference = endMeasure.total - startMeasure.total; + startMeasure = endMeasure; - if (pixels == null) - pixels = flex_stream.newFrame(); - - //Vary particle colour by CPU load (green to amber to red) - pixels[(size-2)*3+0] = Math.floor(cpu_avg*2.5)+5; - pixels[(size-2)*3+1] = 100-Math.floor(cpu_avg); - pixels[(size-2)*3+2] = 2; + //Vary the framerate by percentage CPU load (4 to 60 fps) + percentageCPU = 100 - (100 * idleDifference / totalDifference); + cpu_avg = (cpu_avg+percentageCPU)/2; + framerate = cpu_avg/1.8+5; - //Bounce particle off edges of LED strip (copy from pixel source to new frame) - if (phase<0 || phase>size-3) - speed =-speed; - phase += speed; - shift = Math.floor(phase); - for (var i = 0; isize-3) + speed =-speed; + phase += speed; + shift = Math.floor(phase); + for (var i = 0; i Date: Wed, 3 Jan 2018 03:08:44 -0500 Subject: [PATCH 109/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 34 +++++++++---------------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 31b35537..d4aed32c 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -13,12 +13,9 @@ var startMeasure = cpuLoad(); var percentageCPU = 0; var cpu_avg = 0; -var phase = 0; -var shift = 0; +var pos = 0; var speed = 1; -var pixels = null; - function onFrame() { var frame = flex_stream.newFrame(); var endMeasure = cpuLoad(); @@ -31,27 +28,16 @@ function onFrame() { cpu_avg = (cpu_avg+percentageCPU)/2; framerate = cpu_avg/1.8+5; - if (pixels == null) - pixels = flex_stream.newFrame(); - - //Vary particle colour by CPU load (green to amber to red) - pixels[(size-2)*3+0] = Math.floor(cpu_avg*2.5)+5; - pixels[(size-2)*3+1] = 100-Math.floor(cpu_avg); - pixels[(size-2)*3+2] = 2; - - //Bounce particle off edges of LED strip (copy from pixel source to new frame) - if (phase<0 || phase>size-3) + //Bounce particle off edges of LED strip + if (pos<0 || pos>=size) speed =-speed; - phase += speed; - shift = Math.floor(phase); - for (var i = 0; i Date: Wed, 3 Jan 2018 03:09:30 -0500 Subject: [PATCH 110/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index d4aed32c..4e183ff5 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -29,7 +29,7 @@ function onFrame() { framerate = cpu_avg/1.8+5; //Bounce particle off edges of LED strip - if (pos<0 || pos>=size) + if (pos<=0 || pos>=size-1) speed =-speed; pos += speed; From 3607c5cd0f7e3a6904bfc7a9201b5f669bade11a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:10:26 -0500 Subject: [PATCH 111/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 4e183ff5..d4a7a049 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -29,7 +29,7 @@ function onFrame() { framerate = cpu_avg/1.8+5; //Bounce particle off edges of LED strip - if (pos<=0 || pos>=size-1) + if (pos<1 || pos>size-1) speed =-speed; pos += speed; From c6c1c0bc3209832b297f8ab215bfac1cdf477f9d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:11:16 -0500 Subject: [PATCH 112/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index d4a7a049..327779b9 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -29,7 +29,7 @@ function onFrame() { framerate = cpu_avg/1.8+5; //Bounce particle off edges of LED strip - if (pos<1 || pos>size-1) + if (pos<0 || pos>size-2) speed =-speed; pos += speed; From f175a9f047b432226b56aa391be701ba3267fd83 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:11:50 -0500 Subject: [PATCH 113/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 327779b9..b63c04fa 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -13,7 +13,7 @@ var startMeasure = cpuLoad(); var percentageCPU = 0; var cpu_avg = 0; -var pos = 0; +var pos = 1; var speed = 1; function onFrame() { @@ -29,7 +29,7 @@ function onFrame() { framerate = cpu_avg/1.8+5; //Bounce particle off edges of LED strip - if (pos<0 || pos>size-2) + if (pos<1 || pos>size-2) speed =-speed; pos += speed; From 068f77bb82259c6d7421a9ccfe020566e2bf1550 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:14:29 -0500 Subject: [PATCH 114/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index b63c04fa..f80de5f1 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -29,7 +29,7 @@ function onFrame() { framerate = cpu_avg/1.8+5; //Bounce particle off edges of LED strip - if (pos<1 || pos>size-2) + if (pos<=0 || pos>=size-1) speed =-speed; pos += speed; From b1eef0d1f4fa2351e7e63a89c303ca94454e51ea Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:19:33 -0500 Subject: [PATCH 115/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 3a244815..0cc2c2d2 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -2,12 +2,10 @@ //Realtime streaming of desktop to BlinkStick Flex and Pro //User defined OnFrame() samples the desktop, and renders interlaced frames to BlinkStick //Windows, Linux and Mac - //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) - var flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org const sharp = require('sharp'); //Available at npm.org From 5840308299a3c805551fc74107268d503d34861d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:20:20 -0500 Subject: [PATCH 116/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 0cc2c2d2..9488e552 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -6,9 +6,9 @@ //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) -var flex_stream = require("./flex_stream.js"); -const screenshot = require('screenshot-desktop'); //Available at npm.org -const sharp = require('sharp'); //Available at npm.org +const flex_stream = require("./flex_stream.js"); +const screenshot = require('screenshot-desktop'); //Available at npm.org +const sharp = require('sharp'); //Available at npm.org var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce CPU overhead From a7cfc8b92f54de033b43aa5d0e7fb081ce15781a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:20:43 -0500 Subject: [PATCH 117/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index f80de5f1..97ffbf5a 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -2,8 +2,8 @@ //User defined OnFrame() is a particle trail emitter to indicate CPU load. //Windows, Linux and Mac -var os = require("os"); -var flex_stream = require("./flex_stream.js"); +const os = require("os"); +const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var framerate = 60; // Varies with CPU load From e6f03bb139aaf7b093cfe70b590e81aa89069889 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:23:18 -0500 Subject: [PATCH 118/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 9488e552..6ae500b8 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -11,7 +11,7 @@ const screenshot = require('screenshot-desktop'); //Available at npm.org const sharp = require('sharp'); //Available at npm.org var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 5; // Low capture rate (5 fps = 200ms lag) to reduce CPU overhead +var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing From 1fbbe22a8cc5c2755eb29f8f74fb4d88003c8e99 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:33:03 -0500 Subject: [PATCH 119/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 97ffbf5a..1ce82d4a 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -5,9 +5,10 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); -var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var framerate = 60; // Varies with CPU load -var transparency = .75; // Leave a particle trail +var size = 8; // Default 8, maximum 64 (single BlickStick channel) +var produer_framerate = 30; // Varies with CPU load +var consumer_framerate = 60; // High fps for morphing +var transparency = .75; // Leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; @@ -24,9 +25,9 @@ function onFrame() { startMeasure = endMeasure; //Vary the framerate by percentage CPU load (4 to 60 fps) - percentageCPU = 100 - (100 * idleDifference / totalDifference); - cpu_avg = (cpu_avg+percentageCPU)/2; - framerate = cpu_avg/1.8+5; + percentageCPU = 100 - (100 * idleDifference / totalDifference); + cpu_avg = (cpu_avg+percentageCPU)/2; + producer_framerate = cpu_avg/1.8+5; //Bounce particle off edges of LED strip if (pos<=0 || pos>=size-1) @@ -38,7 +39,7 @@ function onFrame() { frame[pos*3+1] = 100-Math.floor(cpu_avg); //G frame[pos*3+2] = 2; //B - flex_stream.setProducerFramerate(framerate); + flex_stream.setProducerFramerate(producer_framerate); flex_stream.produceFrame(frame); } @@ -58,8 +59,8 @@ function cpuLoad() { //Configure stream flex_stream.setSize(size); -flex_stream.setProducerFramerate(framerate); -flex_stream.setConsumerFramerate(framerate); +flex_stream.setProducerFramerate(producer_framerate); +flex_stream.setConsumerFramerate(consumer_framerate); flex_stream.setTransparency(transparency); flex_stream.setOnFrame(onFrame); From f1f8db8e82fa5adf51a89ae78d27eb336898dd22 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:33:34 -0500 Subject: [PATCH 120/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 1ce82d4a..e9976843 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -6,7 +6,7 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var produer_framerate = 30; // Varies with CPU load +var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing var transparency = .75; // Leave a particle trail From 59d6d8001227535fa9b6b797b6630674061bd19a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:34:46 -0500 Subject: [PATCH 121/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index e9976843..4c3070a0 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -24,7 +24,7 @@ function onFrame() { var totalDifference = endMeasure.total - startMeasure.total; startMeasure = endMeasure; - //Vary the framerate by percentage CPU load (4 to 60 fps) + //Vary the producer framerate by percentage CPU load (4 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; producer_framerate = cpu_avg/1.8+5; From de497ff28ce3b40d5c44366cccabdfa3cbcbd91a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:35:24 -0500 Subject: [PATCH 122/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 4c3070a0..eb9a6b2a 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -24,7 +24,7 @@ function onFrame() { var totalDifference = endMeasure.total - startMeasure.total; startMeasure = endMeasure; - //Vary the producer framerate by percentage CPU load (4 to 60 fps) + //Vary the producer framerate by percentage CPU load (5 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; producer_framerate = cpu_avg/1.8+5; From 4de8eaa3b26790168c0de6d3a63c61b305be05f3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:37:11 -0500 Subject: [PATCH 123/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 6ae500b8..1959e932 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -1,10 +1,10 @@ //Ambient display (ambilight) based on flex_stream.js //Realtime streaming of desktop to BlinkStick Flex and Pro //User defined OnFrame() samples the desktop, and renders interlaced frames to BlinkStick -//Windows, Linux and Mac //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) +//- Windows, Linux and Mac const flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org From 47e31cf45264903bbf767009dff64986375c86bd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:37:35 -0500 Subject: [PATCH 124/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 1959e932..caf0a751 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -4,7 +4,7 @@ //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) -//- Windows, Linux and Mac +//Windows, Linux and Mac const flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org From 9d89f3696dc9d6eda2c4ac02cbbc25986ed56547 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:37:52 -0500 Subject: [PATCH 125/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index caf0a751..24c3bfac 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -4,7 +4,7 @@ //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) -//Windows, Linux and Mac +//For Windows, Linux and Mac const flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npm.org From f240f65ea5978e012864082de97ad9082e27a7b1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:38:03 -0500 Subject: [PATCH 126/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index eb9a6b2a..44be16b3 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -1,6 +1,6 @@ //CPU load meter based on flex_stream.js //User defined OnFrame() is a particle trail emitter to indicate CPU load. -//Windows, Linux and Mac +//For Windows, Linux and Mac const os = require("os"); const flex_stream = require("./flex_stream.js"); From cc4427a3527f9cede93b61574f5ef20cda192642 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:38:18 -0500 Subject: [PATCH 127/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 26b50887..febf11bd 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -2,7 +2,7 @@ //Producer pushes frames to the stream as simple RGB arrays at a set rate //Consumer pulls frames from the stream and renders them to BlickStick at a set rate //When consumer rate is faster than production rate, transparency allows frame morphing -//Windows, Linux and Mac +//For Windows, Linux and Mac module.exports = { setOnFrame: function(fn) { From a3ce3700deda0ee936bf66abdb542b64f33d40c5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:45:00 -0500 Subject: [PATCH 128/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index febf11bd..7fb6e74f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,4 +1,4 @@ -//For Blinkstick Flex and Pro (MAX 64 LEDS - single channel) +//Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDS - single channel) //Producer pushes frames to the stream as simple RGB arrays at a set rate //Consumer pulls frames from the stream and renders them to BlickStick at a set rate //When consumer rate is faster than production rate, transparency allows frame morphing From 28cb823ebfcfcf0838432e3c93a15deff74472de Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:50:32 -0500 Subject: [PATCH 129/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 7fb6e74f..7669d76b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -58,9 +58,9 @@ var size = 8; // Default 8 LEDs. var backingstore = null; var currentFrame = null; -var producer_framerate = 30; // Default low rate to reduce CPU overhead -var consumer_framerate = 60; // Default high rate for frame morphing -var transparency = .5; // Default interlaced (fast morphing) +var producer_framerate = 15; // Default low frame production +var consumer_framerate = 60; // Default high frame rendering +var transparency = 0; // Default is opaque frames (no morphing) //Stream buffer for frames var stream_buffer = []; From 36da9a3874a743d25206dca3fe1d14be82e11429 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:53:10 -0500 Subject: [PATCH 130/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 7669d76b..f70f213f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -58,9 +58,9 @@ var size = 8; // Default 8 LEDs. var backingstore = null; var currentFrame = null; -var producer_framerate = 15; // Default low frame production -var consumer_framerate = 60; // Default high frame rendering -var transparency = 0; // Default is opaque frames (no morphing) +var producer_framerate = 15; // Default low frame production for morphing +var consumer_framerate = 60; // Default high frame rendering for morphing +var transparency = 0.5; // Default is transparent frames for morphing (0 = no morphing) //Stream buffer for frames var stream_buffer = []; From ba0a5d306dd7104c8a83b8d1eec1c5f5f0a9cc4b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:56:45 -0500 Subject: [PATCH 131/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index f70f213f..d6945bfe 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -60,7 +60,7 @@ var currentFrame = null; var producer_framerate = 15; // Default low frame production for morphing var consumer_framerate = 60; // Default high frame rendering for morphing -var transparency = 0.5; // Default is transparent frames for morphing (0 = no morphing) +var transparency = 0.5; // Default is transparent frames for morphing //Stream buffer for frames var stream_buffer = []; @@ -182,6 +182,8 @@ function getSize() function setTransparency(t) { + // 0 = opaque + // 1 = invisible transparency = Math.max(0, Math.min(t, 1)); } From add48019a6da9bb71cac0a76fee34aa74b06103c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:58:06 -0500 Subject: [PATCH 132/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index d6945bfe..1893c63d 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -182,8 +182,7 @@ function getSize() function setTransparency(t) { - // 0 = opaque - // 1 = invisible + // Clamp between 0 (opaque) and 1 (invisible) transparency = Math.max(0, Math.min(t, 1)); } From d6036ccdaf8e77895c054e7d14e0c1b5baf244c7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:58:33 -0500 Subject: [PATCH 133/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 1893c63d..2b88774b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -171,8 +171,8 @@ function getConsumerFramerate() function setSize(s) { - //Clamp between 0 and MAX_LEDS - size = Math.max(0, Math.min(s, MAX_SIZE)); + //Clamp between 1 and MAX_LEDS + size = Math.max(1, Math.min(s, MAX_SIZE)); } function getSize() From c981ce357ca73662eb4e039b2adb38ceb6f71c14 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 03:59:30 -0500 Subject: [PATCH 134/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2b88774b..c502ebc8 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -171,7 +171,7 @@ function getConsumerFramerate() function setSize(s) { - //Clamp between 1 and MAX_LEDS + //Clamp between 1 and MAX_SIZE (64 for BlinkStick single channel) size = Math.max(1, Math.min(s, MAX_SIZE)); } From 2a977955dea05a513e3f699ca46b2481dd0b46be Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:02:32 -0500 Subject: [PATCH 135/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c502ebc8..a5aa23f3 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -135,6 +135,7 @@ function morphFrame(grb) backingstore[i*3+2] = Math.floor(backingstore[i*3+2]*transparency + grb[i*3+2]*(1-transparency)); // B } } + if (streaming) device.setColors(0, backingstore, function(err, backingstore) {}); } @@ -196,7 +197,7 @@ process.on('SIGTERM', onExit); process.on('SIGINT', onExit); function onExit(){ - //Turn off LEDs + //Dsables streaming to ensure no pending frames are set after LEDs are turned off streaming = false; var frame = []; for (var i = 0; i Date: Wed, 3 Jan 2018 04:03:51 -0500 Subject: [PATCH 136/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a5aa23f3..ce20a9d8 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -197,9 +197,11 @@ process.on('SIGTERM', onExit); process.on('SIGINT', onExit); function onExit(){ - //Dsables streaming to ensure no pending frames are set after LEDs are turned off + //Disable streaming to ensure no pending frames are set after LEDs are turned off streaming = false; - var frame = []; + + //Turn off LEDs + var frame = newFrame(); for (var i = 0; i Date: Wed, 3 Jan 2018 04:05:51 -0500 Subject: [PATCH 137/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index ce20a9d8..5660ae80 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -169,7 +169,6 @@ function getConsumerFramerate() return consumer_framerate; } - function setSize(s) { //Clamp between 1 and MAX_SIZE (64 for BlinkStick single channel) From f57a7f43b59964f6b353959a648509ad966307c3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:13:38 -0500 Subject: [PATCH 138/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 5660ae80..ef695db3 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -199,13 +199,9 @@ function onExit(){ //Disable streaming to ensure no pending frames are set after LEDs are turned off streaming = false; - //Turn off LEDs + //Turn off LEDs var frame = newFrame(); - for (var i = 0; i Date: Wed, 3 Jan 2018 04:14:05 -0500 Subject: [PATCH 139/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index ef695db3..52def938 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -201,7 +201,6 @@ function onExit(){ //Turn off LEDs var frame = newFrame(); - device.setColors(0, frame, function(err, frame) {process.exit(0);}); } From a8b31b7cb169869e95e739ff10e8d16b87c13074 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:18:38 -0500 Subject: [PATCH 140/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 52def938..c2853f9f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,4 +1,5 @@ -//Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDS - single channel) +//Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDs - single channel) +//Flex can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit //Producer pushes frames to the stream as simple RGB arrays at a set rate //Consumer pulls frames from the stream and renders them to BlickStick at a set rate //When consumer rate is faster than production rate, transparency allows frame morphing From 173b05b5f80174c449f14ef9032d119a922d9108 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:22:33 -0500 Subject: [PATCH 141/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c2853f9f..3f0ae8b3 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,9 +1,10 @@ -//Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDs - single channel) -//Flex can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit +//Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDs - single channel **) //Producer pushes frames to the stream as simple RGB arrays at a set rate //Consumer pulls frames from the stream and renders them to BlickStick at a set rate //When consumer rate is faster than production rate, transparency allows frame morphing //For Windows, Linux and Mac +//** Flex can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit +//** Pro can currently only set one channel per call, so multiple channels are not yet supported for streaming module.exports = { setOnFrame: function(fn) { From 05f7ef1fed48047c01373e587635aa22de30be7e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:24:07 -0500 Subject: [PATCH 142/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 3f0ae8b3..f3d3bec0 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -4,7 +4,7 @@ //When consumer rate is faster than production rate, transparency allows frame morphing //For Windows, Linux and Mac //** Flex can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit -//** Pro can currently only set one channel per call, so multiple channels are not yet supported for streaming +//** Pro can currently only set one channel per call, so streaming is not yet supported for multiple channels module.exports = { setOnFrame: function(fn) { From c8b4684a8e10bd464719fa52cc7c490e91dabd20 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:26:43 -0500 Subject: [PATCH 143/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index f3d3bec0..90fc6f92 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -3,7 +3,7 @@ //Consumer pulls frames from the stream and renders them to BlickStick at a set rate //When consumer rate is faster than production rate, transparency allows frame morphing //For Windows, Linux and Mac -//** Flex can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit +//** Flex is single channel and can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit //** Pro can currently only set one channel per call, so streaming is not yet supported for multiple channels module.exports = { From 0b402214d44df3631d522850a7744663c317b716 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 04:39:30 -0500 Subject: [PATCH 144/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 24c3bfac..034fd394 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -7,8 +7,8 @@ //For Windows, Linux and Mac const flex_stream = require("./flex_stream.js"); -const screenshot = require('screenshot-desktop'); //Available at npm.org -const sharp = require('sharp'); //Available at npm.org +const screenshot = require('screenshot-desktop'); //Available at npmjs.com +const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead From 9cb932fb7689cf2bb84bab23824e44fa61f5bca6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 05:14:25 -0500 Subject: [PATCH 145/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 56 ++++++++++------------------- 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 90fc6f92..c1ed8ed6 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -53,28 +53,20 @@ module.exports = { var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); - var MAX_SIZE = 64; -var size = 8; // Default 8 LEDs. - -var backingstore = null; +var size = 8; //Default 8 LEDs. +var producer_framerate = 15; //Default low frame production for morphing +var consumer_framerate = 60; //Default high frame rendering for morphing +var transparency = 0.5; //Default is transparent frames for morphing +var stream_buffer = []; //Stream buffer for frames +var backingstore = null; //Internal frames for morphing var currentFrame = null; - -var producer_framerate = 15; // Default low frame production for morphing -var consumer_framerate = 60; // Default high frame rendering for morphing -var transparency = 0.5; // Default is transparent frames for morphing - -//Stream buffer for frames -var stream_buffer = []; - -//Clean exit flag -var streaming = true; +var streaming = true; //Clean exit flag //Stream Producer function producer(){ onFrame(); - //Clamp to 1-60fps - setTimeout(producer, 1000/producer_framerate); + setTimeout(producer, 1000/producer_framerate); //Clamp to 1-60fps } //Stream Consumer @@ -83,13 +75,13 @@ function consumer(){ setTimeout(consumer, 1000/consumer_framerate); } +//Convert to internal BlinkStick buffer function convert_grb(rgb){ var grb = newFrame(); for (var i = 0; i0){ for (var i = 0; i Date: Wed, 3 Jan 2018 05:14:33 -0500 Subject: [PATCH 146/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c1ed8ed6..980d1080 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -78,7 +78,6 @@ function consumer(){ //Convert to internal BlinkStick buffer function convert_grb(rgb){ var grb = newFrame(); - for (var i = 0; i0){ From 86fe1a8c1a4991a2931b341c3dc39d8f86d62f35 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 05:19:29 -0500 Subject: [PATCH 147/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 980d1080..30c20076 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -91,7 +91,7 @@ function newFrame(){ return new Uint8Array(getSize()*3); } -//Push new frame to stream - called from OnFrame() +//Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { if (stream_buffer.length==0) @@ -99,7 +99,7 @@ function produceFrame(frame) producer_framerate = Math.max(1, Math.min(producer_framerate, 60)); //Clamp between 1 and 60 fps } -//Pull frame from stream +//Consume frame from stream - called from consumer function consumeFrame() { if (stream_buffer.length>0){ @@ -112,6 +112,7 @@ function consumeFrame() consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); //Clamp between 1 and 60 fps } +// Morph current frame over backingstore (composite frame) function morphFrame(grb) { if (backingstore == null || transparency == 0) @@ -130,11 +131,13 @@ function morphFrame(grb) device.setColors(0, backingstore, function(err, backingstore) {}); } +// Set user-defined OnFrame() function setOnFrame(fn) { onFrame = fn; } +// Default OnFrame stub - set by user with setOnFrame() var onFrame = function(){ // use setOnFrame() to set user defined OnFrame function }; From fcdaea228266b01b16e0e362e013a8285e9573ec Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 05:21:15 -0500 Subject: [PATCH 148/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 034fd394..d889da1d 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -15,7 +15,7 @@ var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce C var consumer_framerate = 60; // High render rate for smooth interlacing var transparency = 0.85 // 85% transparency for smooth interlacing -//Send desktop to BlinkStick via async futures pipeline +//Send scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { From 1807537039909caa4715bb853bc370851ca26043 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 05:29:29 -0500 Subject: [PATCH 149/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index d889da1d..c0e2aae8 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -1,6 +1,6 @@ //Ambient display (ambilight) based on flex_stream.js //Realtime streaming of desktop to BlinkStick Flex and Pro -//User defined OnFrame() samples the desktop, and renders interlaced frames to BlinkStick +//User defined OnFrame() samples the desktop, and morphs frames to BlinkStick //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) @@ -12,8 +12,8 @@ const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead -var consumer_framerate = 60; // High render rate for smooth interlacing -var transparency = 0.85 // 85% transparency for smooth interlacing +var consumer_framerate = 60; // High render rate for smooth morphing +var transparency = 0.85 // 85% transparency for smooth morphing //Send scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ From 8c088428ff959832426c07aab5f686e8cb548683 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 16:18:51 -0500 Subject: [PATCH 150/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index c0e2aae8..4695115e 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -1,5 +1,5 @@ //Ambient display (ambilight) based on flex_stream.js -//Realtime streaming of desktop to BlinkStick Flex and Pro +//Real-time streaming of desktop to BlinkStick Flex and Pro //User defined OnFrame() samples the desktop, and morphs frames to BlinkStick //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) From 406102b67ffa99cc4472707a0864fcead37d4b2e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 16:23:34 -0500 Subject: [PATCH 151/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 30c20076..b72a5bb7 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -65,7 +65,7 @@ var streaming = true; //Clean exit flag //Stream Producer function producer(){ - onFrame(); + onFrame(); // Call user defined function setTimeout(producer, 1000/producer_framerate); //Clamp to 1-60fps } From fc25d76a09ba384e22a6b238ef938c6bd9612cfe Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 16:26:46 -0500 Subject: [PATCH 152/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index b72a5bb7..6dc9084c 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -65,13 +65,13 @@ var streaming = true; //Clean exit flag //Stream Producer function producer(){ - onFrame(); // Call user defined function + onFrame(); //Call user defined function setTimeout(producer, 1000/producer_framerate); //Clamp to 1-60fps } //Stream Consumer function consumer(){ - consumeFrame(); + consumeFrame(); //Render frame to BlinkStick setTimeout(consumer, 1000/consumer_framerate); } @@ -94,7 +94,7 @@ function newFrame(){ //Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { - if (stream_buffer.length==0) + if (stream_buffer.length==0) // Skip frame if consumer is falling behind stream_buffer.push(frame); producer_framerate = Math.max(1, Math.min(producer_framerate, 60)); //Clamp between 1 and 60 fps } @@ -102,23 +102,24 @@ function produceFrame(frame) //Consume frame from stream - called from consumer function consumeFrame() { - if (stream_buffer.length>0){ + if (stream_buffer.length>0){ //Check if new frame available var rgb = stream_buffer.shift(); var grb = convert_grb(rgb); currentFrame = grb; } if (currentFrame != null) - morphFrame(currentFrame); + morphFrame(currentFrame); //Morph to the current frame + consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); //Clamp between 1 and 60 fps } -// Morph current frame over backingstore (composite frame) +// Morph current frame over backingstore (frame compositing) function morphFrame(grb) { if (backingstore == null || transparency == 0) backingstore = grb; - //Morph the new frame with current backingstore (additive alpha blending) + //Morph the new frame with current backingstore (additive alpha blending function) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 16:28:44 -0500 Subject: [PATCH 153/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 6dc9084c..fc3e699e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -59,8 +59,8 @@ var producer_framerate = 15; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing var transparency = 0.5; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames -var backingstore = null; //Internal frames for morphing -var currentFrame = null; +var composite = null; //Composite frame +var currentFrame = null; //Latest frame from stream var streaming = true; //Clean exit flag //Stream Producer @@ -113,23 +113,23 @@ function consumeFrame() consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); //Clamp between 1 and 60 fps } -// Morph current frame over backingstore (frame compositing) +// Morph current frame over composite (frame compositing) function morphFrame(grb) { - if (backingstore == null || transparency == 0) - backingstore = grb; + if (composite == null || transparency == 0) + composite = grb; - //Morph the new frame with current backingstore (additive alpha blending function) + //Morph the new frame with current composite (additive alpha blending function) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 16:36:04 -0500 Subject: [PATCH 154/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index fc3e699e..e69fc39e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -59,7 +59,7 @@ var producer_framerate = 15; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing var transparency = 0.5; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames -var composite = null; //Composite frame +var composite = null; //Composite frame var currentFrame = null; //Latest frame from stream var streaming = true; //Clean exit flag @@ -94,7 +94,7 @@ function newFrame(){ //Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { - if (stream_buffer.length==0) // Skip frame if consumer is falling behind + if (stream_buffer.length==0) //Skip frame if consumer is falling behind stream_buffer.push(frame); producer_framerate = Math.max(1, Math.min(producer_framerate, 60)); //Clamp between 1 and 60 fps } @@ -114,17 +114,17 @@ function consumeFrame() } // Morph current frame over composite (frame compositing) -function morphFrame(grb) +function morphFrame(current) { if (composite == null || transparency == 0) - composite = grb; + composite = current; //Initialize composite frame - //Morph the new frame with current composite (additive alpha blending function) + //Morph to the current frame with composite (additive alpha blending function) if (transparency>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 16:39:16 -0500 Subject: [PATCH 155/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e69fc39e..829cabe2 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -61,7 +61,7 @@ var transparency = 0.5; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame var currentFrame = null; //Latest frame from stream -var streaming = true; //Clean exit flag +var streaming = true; //Pause flag //Stream Producer function producer(){ From 97f027f624892f7ad6b69f71708823d5f38e3bd9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 17:28:53 -0500 Subject: [PATCH 156/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 829cabe2..321e1496 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -113,7 +113,7 @@ function consumeFrame() consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); //Clamp between 1 and 60 fps } -// Morph current frame over composite (frame compositing) +// Morph current frame over composite frame function morphFrame(current) { if (composite == null || transparency == 0) From ca21ef8e4550fee20ae3a7f75322752230cfec00 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 17:33:38 -0500 Subject: [PATCH 157/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 4695115e..1becb44f 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -12,8 +12,8 @@ const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead -var consumer_framerate = 60; // High render rate for smooth morphing -var transparency = 0.85 // 85% transparency for smooth morphing +var consumer_framerate = 60; // High render rate for smooth morphing/interlacing +var transparency = 0.85 // 85% transparency for smooth morphing/interlacing //Send scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ From 23081e3ac26622e493c063b5b4b7c487c55b6c2b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 17:45:10 -0500 Subject: [PATCH 158/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 +- examples/flex_stream/flex_stream.js | 70 ++++++++++++++++------------- 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 44be16b3..a1969228 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var transparency = .75; // Leave a particle trail +var alpha = .15; // Leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; @@ -61,6 +61,6 @@ function cpuLoad() { flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); -flex_stream.setTransparency(transparency); +flex_stream.setAlpha(alpha); flex_stream.setOnFrame(onFrame); diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 321e1496..db1b58f9 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,7 +1,7 @@ //Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDs - single channel **) //Producer pushes frames to the stream as simple RGB arrays at a set rate //Consumer pulls frames from the stream and renders them to BlickStick at a set rate -//When consumer rate is faster than production rate, transparency allows frame morphing +//When consumer rate is faster than production rate, alpha (transparency) allows frame morphing //For Windows, Linux and Mac //** Flex is single channel and can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit //** Pro can currently only set one channel per call, so streaming is not yet supported for multiple channels @@ -13,13 +13,13 @@ module.exports = { newFrame: function() { return newFrame(); }, - setTransparency: function(t) + setAlpha: function(a) { - setTransparency(t); + setAlpha(t); }, - getTransparency: function() + getAlpha: function() { - return getTransparency(); + return getAlpha(); }, produceFrame: function(frame) { @@ -48,20 +48,28 @@ module.exports = { getSize: function() { return getSize(); + }, + start: function(size) + { + start(); + }, + stop: function() + { + return stop(); } } -var blinkstick = require('blinkstick'); -var device = blinkstick.findFirst(); -var MAX_SIZE = 64; -var size = 8; //Default 8 LEDs. -var producer_framerate = 15; //Default low frame production for morphing -var consumer_framerate = 60; //Default high frame rendering for morphing -var transparency = 0.5; //Default is transparent frames for morphing -var stream_buffer = []; //Stream buffer for frames -var composite = null; //Composite frame -var currentFrame = null; //Latest frame from stream -var streaming = true; //Pause flag +var blinkstick = require('blinkstick'); +var device = blinkstick.findFirst(); +var MAX_SIZE = 64; //BlinkStick single channel limit +var size = 8; //Default 8 LEDs. +var producer_framerate = 15; //Default low frame production for morphing +var consumer_framerate = 60; //Default high frame rendering for morphing +var alpha = 0.5; //Default is transparent frames for morphing +var stream_buffer = []; //Stream buffer for frames +var composite = null; //Composite frame +var currentFrame = null; //Latest frame from stream +var streaming = true; //Pause flag //Stream Producer function producer(){ @@ -109,36 +117,36 @@ function consumeFrame() } if (currentFrame != null) morphFrame(currentFrame); //Morph to the current frame - + consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); //Clamp between 1 and 60 fps } -// Morph current frame over composite frame +//Morph current frame over composite frame function morphFrame(current) { - if (composite == null || transparency == 0) + if (composite == null || alpha == 0) composite = current; //Initialize composite frame - + //Morph to the current frame with composite (additive alpha blending function) - if (transparency>0){ + if (alpha>0){ for (var i = 0; i Date: Wed, 3 Jan 2018 17:46:48 -0500 Subject: [PATCH 159/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index db1b58f9..76c089aa 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -15,7 +15,7 @@ module.exports = { }, setAlpha: function(a) { - setAlpha(t); + setAlpha(a); }, getAlpha: function() { @@ -181,9 +181,9 @@ function getSize() return size; } -function setAlpha(t) +function setAlpha(a) { - alpha = Math.max(0, Math.min(t, 1)); //Clamp between 0 (invisible) and 1 (opaque) + alpha = Math.max(0, Math.min(a, 1)); //Clamp between 0 (invisible) and 1 (opaque) } function getAlpha() From c0563ba5788e8dcb07f118bf488e5eb29d103e51 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 17:49:28 -0500 Subject: [PATCH 160/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- examples/flex_stream/cpu_meter.js | 2 +- examples/flex_stream/flex_stream.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 1becb44f..ac90495a 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -13,7 +13,7 @@ const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth morphing/interlacing -var transparency = 0.85 // 85% transparency for smooth morphing/interlacing +var alpha = 0.15 // 15% opacity for smooth morphing/interlacing //Send scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index a1969228..1c410e5e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .15; // Leave a particle trail +var alpha = .25; // Leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 76c089aa..bf273a43 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -1,7 +1,7 @@ //Frame streamer for Blinkstick Flex and Pro (MAX 64 LEDs - single channel **) //Producer pushes frames to the stream as simple RGB arrays at a set rate //Consumer pulls frames from the stream and renders them to BlickStick at a set rate -//When consumer rate is faster than production rate, alpha (transparency) allows frame morphing +//When consumer rate is faster than production rate, alpha (opacity) allows frame morphing //For Windows, Linux and Mac //** Flex is single channel and can handle 64 LEDs if flashed with Pro firmware, otherwise 32 is the default limit //** Pro can currently only set one channel per call, so streaming is not yet supported for multiple channels From 1ee90a11eea965e38b0a5af74b8c4a43b9135434 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 17:50:52 -0500 Subject: [PATCH 161/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 1c410e5e..87ee1bbe 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .25; // Leave a particle trail +var alpha = .25; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; From d5ff650e40af051218a476ba6f9229cfa55c4b1c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 17:57:56 -0500 Subject: [PATCH 162/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 87ee1bbe..9248fee9 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -12,17 +12,16 @@ var alpha = .25; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; -var cpu_avg = 0; - -var pos = 1; -var speed = 1; +var cpu_avg = 0; +var pos = 1; +var speed = 1; function onFrame() { - var frame = flex_stream.newFrame(); - var endMeasure = cpuLoad(); - var idleDifference = endMeasure.idle - startMeasure.idle; + var frame = flex_stream.newFrame(); + var endMeasure = cpuLoad(); + var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; - startMeasure = endMeasure; + startMeasure = endMeasure; //Vary the producer framerate by percentage CPU load (5 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); @@ -45,8 +44,10 @@ function onFrame() { //CPU load function cpuLoad() { - var totalIdle = 0, totalTick = 0; - var cpus = os.cpus(); + var totalIdle = 0; + var totalTick = 0; + var cpus = os.cpus(); + for(var i = 0, len = cpus.length; i < len; i++) { var cpu = cpus[i]; for(type in cpu.times) { From 9c0b6ef88bf4b6adbac2c753f928e9951a6f83c6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 18:08:42 -0500 Subject: [PATCH 163/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index ac90495a..a43de6a5 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -15,7 +15,7 @@ var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce C var consumer_framerate = 60; // High render rate for smooth morphing/interlacing var alpha = 0.15 // 15% opacity for smooth morphing/interlacing -//Send scaled desktop (size x 1) to BlinkStick via async futures pipeline +//Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { From 945910f8d0651704b6ca6af89bcceb5bf7e1abf5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 18:13:31 -0500 Subject: [PATCH 164/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index bf273a43..42dd24e6 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -56,6 +56,10 @@ module.exports = { stop: function() { return stop(); + }, + isStreaming: function() + { + return streaming; } } @@ -197,7 +201,7 @@ process.on('SIGINT', onExit); function onExit(){ var frame = newFrame(); - streaming = false; //Disable streaming to ensure no pending frames are set after LEDs are turned off + stop(); //Disable streaming to ensure no pending frames are set after LEDs are turned off device.setColors(0, frame, function(err, frame) {process.exit(0);}); //Turn off LEDs } From 7fac3dec337ebca72ebf3b909d6fd5f9e161180c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 18:14:45 -0500 Subject: [PATCH 165/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 42dd24e6..35d0e409 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -195,6 +195,16 @@ function getAlpha() return alpha; } +function start() +{ + streaming = true; //Clamp between 0 (invisible) and 1 (opaque) +} + +function stop() +{ + streaming = false; +} + //Clean exit process.on('SIGTERM', onExit); process.on('SIGINT', onExit); From 0320126bfc72b5648d8767933043d33c39387880 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 18:22:50 -0500 Subject: [PATCH 166/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index a43de6a5..fa025343 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -1,6 +1,6 @@ //Ambient display (ambilight) based on flex_stream.js //Real-time streaming of desktop to BlinkStick Flex and Pro -//User defined OnFrame() samples the desktop, and morphs frames to BlinkStick +//User defined OnFrame() samples the desktop, and morphs scaled frames to BlinkStick //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) From 99d2cbec190e287c8900e8e93875066ac96c9b9a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 18:58:19 -0500 Subject: [PATCH 167/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 examples/flex_stream/fireplace.js diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js new file mode 100644 index 00000000..4521f9d0 --- /dev/null +++ b/examples/flex_stream/fireplace.js @@ -0,0 +1,41 @@ +//Fireplace ambience based on flex_stream.js +//For Windows, Linux and Mac + +const os = require("os"); +const flex_stream = require("./flex_stream.js"); + +var size = 8; // Default 8, maximum 64 (single BlickStick channel) +var producer_framerate = 30; // Varies for flame flickering +var consumer_framerate = 60; // High fps for morphing +var alpha = 0; // variable opacity for flickering flames + +var pos = 1; +var speed = 1; + +function onFrame() { + var frame = flex_stream.newFrame(); + + for (i=0; i Date: Wed, 3 Jan 2018 19:35:35 -0500 Subject: [PATCH 168/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 examples/flex_stream/aurora.js diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js new file mode 100644 index 00000000..ead90720 --- /dev/null +++ b/examples/flex_stream/aurora.js @@ -0,0 +1,45 @@ +//Aurora Borealis ambience based on flex_stream.js +//For Windows, Linux and Mac + +const os = require("os"); +const flex_stream = require("./flex_stream.js"); + +var size = 8; // Default 8, maximum 64 (single BlickStick channel) +var producer_framerate = 30; // Varies for flame flickering +var consumer_framerate = 60; // High fps for morphing +var alpha = 0; // variable opacity for flickering flames + +var pos = 1; +var speed = 1; + +function onFrame() { + var frame = flex_stream.newFrame(); + + //Aurora + a = Math.random(); + flex_stream.setProducerFramerate(a*2+1); + flex_stream.setAlpha(.001+(a/100)); + + for (i=0; i.25) + { + var r = Math.random()*128; + var g = (1-Math.random()*.85)*255; + var b = (1-Math.random()*.85)*255; + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B + } + } + flex_stream.produceFrame(frame); +} + +//Configure stream +flex_stream.setSize(size); +flex_stream.setProducerFramerate(producer_framerate); +flex_stream.setConsumerFramerate(consumer_framerate); +flex_stream.setAlpha(alpha); +flex_stream.setOnFrame(onFrame); From aac7246800d9146a4b55eab43dd80e1f1d7c41c1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:36:20 -0500 Subject: [PATCH 169/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 43 +++++++++++++++---------------- examples/flex_stream/fireplace.js | 37 ++++++++++++-------------- 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ead90720..86206961 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -13,28 +13,27 @@ var pos = 1; var speed = 1; function onFrame() { - var frame = flex_stream.newFrame(); - - //Aurora - a = Math.random(); - flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.001+(a/100)); - - for (i=0; i.25) - { - var r = Math.random()*128; - var g = (1-Math.random()*.85)*255; - var b = (1-Math.random()*.85)*255; - frame[i*3+0] = Math.floor(r); //R - frame[i*3+1] = Math.floor(g); //G - frame[i*3+2] = Math.floor(b); //B - } - } - flex_stream.produceFrame(frame); + var frame = flex_stream.newFrame(); + + //Aurora + a = Math.random(); + flex_stream.setProducerFramerate(a*2+1); + flex_stream.setAlpha(.001+(a/100)); + + for (i=0; i.25) + { + var r = Math.random()*128; + var g = (1-Math.random()*.85)*255; + var b = (1-Math.random()*.85)*255; + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B + } + } + flex_stream.produceFrame(frame); } //Configure stream diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 4521f9d0..2dd19858 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -9,28 +9,25 @@ var producer_framerate = 30; // Varies for flame flickering var consumer_framerate = 60; // High fps for morphing var alpha = 0; // variable opacity for flickering flames -var pos = 1; -var speed = 1; - function onFrame() { - var frame = flex_stream.newFrame(); - - for (i=0; i Date: Wed, 3 Jan 2018 19:36:26 -0500 Subject: [PATCH 170/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 86206961..7b29058c 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -9,9 +9,6 @@ var producer_framerate = 30; // Varies for flame flickering var consumer_framerate = 60; // High fps for morphing var alpha = 0; // variable opacity for flickering flames -var pos = 1; -var speed = 1; - function onFrame() { var frame = flex_stream.newFrame(); From 1d9f79cd2b1748065af3a700888fb6b6737f0a16 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:38:29 -0500 Subject: [PATCH 171/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 2dd19858..30692c3f 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -24,8 +24,8 @@ function onFrame() { //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*8+5); - flex_stream.setAlpha(.1+(f/2)); + flex_stream.setProducerFramerate(f*10+3); + flex_stream.setAlpha(.01+(f/20)); } flex_stream.produceFrame(frame); } From d26134dff5ba153d4e64afb4afda0cb87ff66777 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:39:27 -0500 Subject: [PATCH 172/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 30692c3f..e3cdcf44 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -25,7 +25,7 @@ function onFrame() { //Flickering frames f = Math.random(); flex_stream.setProducerFramerate(f*10+3); - flex_stream.setAlpha(.01+(f/20)); + flex_stream.setAlpha(.05+(f/20)); } flex_stream.produceFrame(frame); } From c4d75926157b2595a763bceb54a06b425e100607 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:40:52 -0500 Subject: [PATCH 173/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index e3cdcf44..c61507ae 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -24,8 +24,8 @@ function onFrame() { //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*10+3); - flex_stream.setAlpha(.05+(f/20)); + flex_stream.setProducerFramerate(f*8+3); + flex_stream.setAlpha(.1+(f/20)); } flex_stream.produceFrame(frame); } From 333d32eeb5ae23473be8d00f533987433eee57fc Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:41:57 -0500 Subject: [PATCH 174/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index c61507ae..595e5957 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -16,7 +16,7 @@ function onFrame() { { //Red to yellow spectrum var r = Math.random()*255; - var g = r*Math.random()*.5; + var g = r*Math.random()*.25; frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G From da8c22675930fde685903acd55b37fe7b04091dc Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:42:39 -0500 Subject: [PATCH 175/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 595e5957..6801aae4 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -16,7 +16,7 @@ function onFrame() { { //Red to yellow spectrum var r = Math.random()*255; - var g = r*Math.random()*.25; + var g = r*Math.random()*.35; frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G From 2b49b839d8ae137ef49bbbccbc6844a7f057d6f6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:43:50 -0500 Subject: [PATCH 176/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 6801aae4..a4087186 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -16,7 +16,7 @@ function onFrame() { { //Red to yellow spectrum var r = Math.random()*255; - var g = r*Math.random()*.35; + var g = r*Math.random()*.4; frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G From 32f4a97fcea4acf70643f64b0f44eff641a1db39 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 19:45:52 -0500 Subject: [PATCH 177/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 7b29058c..c7b2950b 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,7 +22,7 @@ function onFrame() { //Borealis if (Math.random()>.25) { - var r = Math.random()*128; + var r = Math.random()*192; var g = (1-Math.random()*.85)*255; var b = (1-Math.random()*.85)*255; frame[i*3+0] = Math.floor(r); //R From a2d9031fdbe0d2242e6d9e9aa756406c76a7b8d8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:02:08 -0500 Subject: [PATCH 178/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- examples/flex_stream/fireplace.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index c7b2950b..718c7f35 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -5,9 +5,9 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 30; // Varies for flame flickering +var producer_framerate = 30; // Varies var consumer_framerate = 60; // High fps for morphing -var alpha = 0; // variable opacity for flickering flames +var alpha = 0; // Varies function onFrame() { var frame = flex_stream.newFrame(); diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index a4087186..6502fdbf 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -5,9 +5,9 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 30; // Varies for flame flickering +var producer_framerate = 30; // Varies var consumer_framerate = 60; // High fps for morphing -var alpha = 0; // variable opacity for flickering flames +var alpha = 0; // Varies function onFrame() { var frame = flex_stream.newFrame(); From 31b0d36d1787ce08421fddc2a150e420017dec7b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:07:38 -0500 Subject: [PATCH 179/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 718c7f35..2be70edc 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -8,9 +8,10 @@ var size = 8; // Default 8, maximum 64 (single BlickStick channe var producer_framerate = 30; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies +var frame = flex_stream.newFrame(); function onFrame() { - var frame = flex_stream.newFrame(); + //Aurora a = Math.random(); From efcac00b435cbbd370d9b04d82b6c0756a65d6c1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:08:04 -0500 Subject: [PATCH 180/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 2be70edc..9a6ddc34 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -21,7 +21,7 @@ function onFrame() { for (i=0; i.25) + if (Math.random()>.75) { var r = Math.random()*192; var g = (1-Math.random()*.85)*255; From 73a5ec199d6a00ec987132476d0be000fc2f05e1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:10:11 -0500 Subject: [PATCH 181/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 9a6ddc34..93364e70 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -12,25 +12,26 @@ var frame = flex_stream.newFrame(); function onFrame() { - //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); for (i=0; i.75) + if (Math.random()<.75) { - var r = Math.random()*192; - var g = (1-Math.random()*.85)*255; - var b = (1-Math.random()*.85)*255; - frame[i*3+0] = Math.floor(r); //R - frame[i*3+1] = Math.floor(g); //G - frame[i*3+2] = Math.floor(b); //B + r=0; g=0; b=0; } + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B } + flex_stream.produceFrame(frame); } From b98b051deb8f621ab15299c0379d0353ca038e09 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:10:55 -0500 Subject: [PATCH 182/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 93364e70..a9442623 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -23,7 +23,7 @@ function onFrame() { var g = (1-Math.random()*.85)*255; var b = (1-Math.random()*.85)*255; //Borealis - if (Math.random()<.75) + if (Math.random()>.75) { r=0; g=0; b=0; } From a7a63c454bf08b6c0a07754f44e7a5f965a6ee96 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:12:59 -0500 Subject: [PATCH 183/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index a9442623..56f24ade 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -23,7 +23,7 @@ function onFrame() { var g = (1-Math.random()*.85)*255; var b = (1-Math.random()*.85)*255; //Borealis - if (Math.random()>.75) + if (Math.random()>.9) { r=0; g=0; b=0; } From 201c1d339f973b3d12b93d7fb32d2e34e05a0fb1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:15:00 -0500 Subject: [PATCH 184/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 56f24ade..ece45577 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -20,10 +20,10 @@ function onFrame() { for (i=0; i.9) + if (Math.random()>.8) { r=0; g=0; b=0; } From 0a6682cf54839bf2f79ac7f3da0a6f646ade8011 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:15:13 -0500 Subject: [PATCH 185/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ece45577..9efc6845 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -19,7 +19,7 @@ function onFrame() { for (i=0; i Date: Wed, 3 Jan 2018 20:16:58 -0500 Subject: [PATCH 186/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 9efc6845..033395ea 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -23,7 +23,7 @@ function onFrame() { var g = (1-Math.random()*.85)*192; var b = (1-Math.random()*.85)*192; //Borealis - if (Math.random()>.8) + if (Math.random()>.9) { r=0; g=0; b=0; } From 805d47a4ca408be412f54125f0805b76b01572e9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:24:41 -0500 Subject: [PATCH 187/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 6502fdbf..4ff8cb6b 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -8,20 +8,21 @@ var size = 8; // Default 8, maximum 64 (single BlickStick channe var producer_framerate = 30; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies +var frame = flex_stream.newFrame(); function onFrame() { - var frame = flex_stream.newFrame(); - for (i=0; i Date: Wed, 3 Jan 2018 20:25:14 -0500 Subject: [PATCH 188/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 4ff8cb6b..197ed9fc 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -17,7 +17,7 @@ function onFrame() { var r = Math.random()*255; var g = r*Math.random()*.4; - if (Math.random<.5) + if (Math.random()<.5) { frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G From 65fb689937cae6e70e1832da72e54d38232d5be7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:28:38 -0500 Subject: [PATCH 189/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 197ed9fc..d6dd5c27 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -25,8 +25,8 @@ function onFrame() { } //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*8+3); - flex_stream.setAlpha(.1+(f/20)); + flex_stream.setProducerFramerate(f*8+4); + flex_stream.setAlpha(.1+(f/15)); } flex_stream.produceFrame(frame); } From f5b9126969815965b0680eed1e4c70089f7ca1e1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:30:43 -0500 Subject: [PATCH 190/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index d6dd5c27..31757267 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,7 +26,7 @@ function onFrame() { //Flickering frames f = Math.random(); flex_stream.setProducerFramerate(f*8+4); - flex_stream.setAlpha(.1+(f/15)); + flex_stream.setAlpha(.1+(f/10)); } flex_stream.produceFrame(frame); } From 55eef9c087ee48a042d80847d047e83b078f8171 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:32:20 -0500 Subject: [PATCH 191/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 31757267..20a31201 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -25,7 +25,7 @@ function onFrame() { } //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*8+4); + flex_stream.setProducerFramerate(f*10+2); flex_stream.setAlpha(.1+(f/10)); } flex_stream.produceFrame(frame); From 62ded6b992ab42efe94e28f11294fe11ebfe5125 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:33:45 -0500 Subject: [PATCH 192/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 20a31201..e0886eb0 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,7 +26,7 @@ function onFrame() { //Flickering frames f = Math.random(); flex_stream.setProducerFramerate(f*10+2); - flex_stream.setAlpha(.1+(f/10)); + flex_stream.setAlpha(.1+(f/5)); } flex_stream.produceFrame(frame); } From 3ca2e62aca4d7816c945dbb51275c67e32d6a93d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:34:35 -0500 Subject: [PATCH 193/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index e0886eb0..1727828f 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -25,7 +25,7 @@ function onFrame() { } //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*10+2); + flex_stream.setProducerFramerate(f*20+2); flex_stream.setAlpha(.1+(f/5)); } flex_stream.produceFrame(frame); From 17c46e06100a2bd53dd936676dd22041e39afa0a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:35:31 -0500 Subject: [PATCH 194/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 1727828f..4d78a3d6 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -25,7 +25,7 @@ function onFrame() { } //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*20+2); + flex_stream.setProducerFramerate(f*20+4); flex_stream.setAlpha(.1+(f/5)); } flex_stream.produceFrame(frame); From cbe9a30355bce22a07bc44b776d16fdb6bfeb1d5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:36:35 -0500 Subject: [PATCH 195/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 4d78a3d6..a2ca2d51 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -15,7 +15,7 @@ function onFrame() { { //Red to yellow spectrum var r = Math.random()*255; - var g = r*Math.random()*.4; + var g = r*Math.random()*.5; if (Math.random()<.5) { From 9326f1e080599edc05b3eef9f1b9cf79b41d5b3f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:39:14 -0500 Subject: [PATCH 196/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index a2ca2d51..ce04d49f 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -13,16 +13,17 @@ var frame = flex_stream.newFrame(); function onFrame() { for (i=0; i Date: Wed, 3 Jan 2018 20:39:51 -0500 Subject: [PATCH 197/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index ce04d49f..d890fcf5 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -15,7 +15,7 @@ function onFrame() { { r=0; g=0; b=0; - if (Math.random()<.5) + if (Math.random()<.75) { //Red to yellow spectrum var r = Math.random()*255; From f712169cc64207827bab40f3e8f29f27326937b8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:40:38 -0500 Subject: [PATCH 198/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index d890fcf5..09a68bbb 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,7 +26,7 @@ function onFrame() { frame[i*3+2] = 0; //B //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*20+4); + flex_stream.setProducerFramerate(f*10+4); flex_stream.setAlpha(.1+(f/5)); } flex_stream.produceFrame(frame); From 307d005919828e9ff577344857f4fbf220e0e8e2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:41:23 -0500 Subject: [PATCH 199/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 09a68bbb..18af94e6 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -27,7 +27,7 @@ function onFrame() { //Flickering frames f = Math.random(); flex_stream.setProducerFramerate(f*10+4); - flex_stream.setAlpha(.1+(f/5)); + flex_stream.setAlpha(.1+(f/10)); } flex_stream.produceFrame(frame); } From a3c0d14fa5fb0da5a9bd8b6bac5ef10d409e81fe Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:42:16 -0500 Subject: [PATCH 200/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 18af94e6..48947653 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,8 +26,8 @@ function onFrame() { frame[i*3+2] = 0; //B //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*10+4); - flex_stream.setAlpha(.1+(f/10)); + flex_stream.setProducerFramerate(f*5+3); + flex_stream.setAlpha(.1+(f/20)); } flex_stream.produceFrame(frame); } From 4038594c0b674f9f8c023fa18ce04f252ac580b8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:43:45 -0500 Subject: [PATCH 201/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 48947653..b56f68b4 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -14,7 +14,10 @@ function onFrame() { for (i=0; i Date: Wed, 3 Jan 2018 20:45:29 -0500 Subject: [PATCH 202/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index b56f68b4..eea31b86 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -14,11 +14,11 @@ function onFrame() { for (i=0; i Date: Wed, 3 Jan 2018 20:46:12 -0500 Subject: [PATCH 203/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index eea31b86..35474ccc 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -14,10 +14,6 @@ function onFrame() { for (i=0; i Date: Wed, 3 Jan 2018 20:48:08 -0500 Subject: [PATCH 204/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 35474ccc..e89e1975 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -17,7 +17,7 @@ function onFrame() { if (Math.random()<.5) { //Red to yellow spectrum - var r = Math.random()*255; + var r = Math.random()*230+25; var g = r*Math.random()*.5; } frame[i*3+0] = Math.floor(r); //R From 0449402c248c57634b9273e2f3f9aafcb4ff4ded Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:49:00 -0500 Subject: [PATCH 205/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index e89e1975..570218e7 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -19,10 +19,11 @@ function onFrame() { //Red to yellow spectrum var r = Math.random()*230+25; var g = r*Math.random()*.5; + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = 0; //B } - frame[i*3+0] = Math.floor(r); //R - frame[i*3+1] = Math.floor(g); //G - frame[i*3+2] = 0; //B + //Flickering frames f = Math.random(); flex_stream.setProducerFramerate(f*5+3); From 97290346162649c6ff796ef5c6f947f555ad9593 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:49:55 -0500 Subject: [PATCH 206/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 570218e7..ecc6a75d 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,8 +26,8 @@ function onFrame() { //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*5+3); - flex_stream.setAlpha(.1+(f/20)); + flex_stream.setProducerFramerate(f*10+3); + flex_stream.setAlpha(.1+(f/10)); } flex_stream.produceFrame(frame); } From bbb2a46065e1da07260d6cdb21cc202777fc0504 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:50:21 -0500 Subject: [PATCH 207/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index ecc6a75d..4b445e10 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -27,7 +27,7 @@ function onFrame() { //Flickering frames f = Math.random(); flex_stream.setProducerFramerate(f*10+3); - flex_stream.setAlpha(.1+(f/10)); + flex_stream.setAlpha(.1+(f/2)); } flex_stream.produceFrame(frame); } From b414a18c9ceb0925671123d6038c7f031d0c0237 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 20:51:33 -0500 Subject: [PATCH 208/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 4b445e10..8bcc559f 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,8 +26,8 @@ function onFrame() { //Flickering frames f = Math.random(); - flex_stream.setProducerFramerate(f*10+3); - flex_stream.setAlpha(.1+(f/2)); + flex_stream.setProducerFramerate(f*8+4); + flex_stream.setAlpha(.1+(f/4)); } flex_stream.produceFrame(frame); } From 846bda73a04a2edb9911228eb638ba926eec608c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Wed, 3 Jan 2018 22:33:51 -0500 Subject: [PATCH 209/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 35d0e409..47ffbf21 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -128,7 +128,7 @@ function consumeFrame() //Morph current frame over composite frame function morphFrame(current) { - if (composite == null || alpha == 0) + if (composite == null || alpha == 1) composite = current; //Initialize composite frame //Morph to the current frame with composite (additive alpha blending function) From f0c5f5ba9ae7de098033258b12a98eec59e46c3f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 18:52:46 -0500 Subject: [PATCH 210/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 examples/flex_stream/unicorn.js diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js new file mode 100644 index 00000000..9cf97456 --- /dev/null +++ b/examples/flex_stream/unicorn.js @@ -0,0 +1,40 @@ +//Aurora Borealis ambience based on flex_stream.js +//For Windows, Linux and Mac + +const os = require("os"); +const flex_stream = require("./flex_stream.js"); + +var size = 8; // Default 8, maximum 64 (single BlickStick channel) +var producer_framerate = 1; // slow +var consumer_framerate = 60; // High fps for morphing +var alpha = 0.01; // slow +var frame = flex_stream.newFrame(); + +function onFrame() { + + // Unicorn rainbow barf + for (i=0; i.9) + { + r=0; g=0; b=0; + } + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B + } + + flex_stream.produceFrame(frame); +} + +//Configure stream +flex_stream.setSize(size); +flex_stream.setProducerFramerate(producer_framerate); +flex_stream.setConsumerFramerate(consumer_framerate); +flex_stream.setAlpha(alpha); +flex_stream.setOnFrame(onFrame); From 32c2460c0d0eca9eb2c9c5300a1b9a9356133861 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 18:54:40 -0500 Subject: [PATCH 211/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 9cf97456..3341a1d8 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -7,7 +7,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 1; // slow var consumer_framerate = 60; // High fps for morphing -var alpha = 0.01; // slow +var alpha = 0.05; // slow var frame = flex_stream.newFrame(); function onFrame() { @@ -17,13 +17,9 @@ function onFrame() { { //Normalize all pixel brightness to 128 var r = Math.random()*128; - var g = r+(Math.random()*(128-r)); + var g = (128-r)+(Math.random()*(128-r)); var b = 128-g; - //Borealis - if (Math.random()>.9) - { - r=0; g=0; b=0; - } + frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G frame[i*3+2] = Math.floor(b); //B From 33167cb33b331546335a420d995500a02e1adc92 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 18:55:01 -0500 Subject: [PATCH 212/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 3341a1d8..4763d46c 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -7,7 +7,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 1; // slow var consumer_framerate = 60; // High fps for morphing -var alpha = 0.05; // slow +var alpha = 0.01; // slow var frame = flex_stream.newFrame(); function onFrame() { From 0a971abeaef111f02124fdd1e5f7d6ee00d17085 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 18:56:03 -0500 Subject: [PATCH 213/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 4763d46c..b14b3132 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -7,7 +7,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 1; // slow var consumer_framerate = 60; // High fps for morphing -var alpha = 0.01; // slow +var alpha = 0.02; // slow var frame = flex_stream.newFrame(); function onFrame() { From 8543d442dca9ac7a2a43459185202427e869fc85 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:24:32 -0500 Subject: [PATCH 214/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index b14b3132..f801e33c 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -5,27 +5,30 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 1; // slow +var producer_framerate = 4; // slow var consumer_framerate = 60; // High fps for morphing -var alpha = 0.02; // slow +var alpha = 0.05; // slow var frame = flex_stream.newFrame(); function onFrame() { - // Unicorn rainbow barf - for (i=0; i Date: Thu, 4 Jan 2018 19:26:00 -0500 Subject: [PATCH 215/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index f801e33c..18ecc56b 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -11,24 +11,20 @@ var alpha = 0.05; // slow var frame = flex_stream.newFrame(); function onFrame() { - - // Unicorn rainbow happy joy - var off = 0; - var amp = 150; - for (i=0; i Date: Thu, 4 Jan 2018 19:26:43 -0500 Subject: [PATCH 216/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 9248fee9..9b77039d 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -15,9 +15,10 @@ var percentageCPU = 0; var cpu_avg = 0; var pos = 1; var speed = 1; +var frame = flex_stream.newFrame(); function onFrame() { - var frame = flex_stream.newFrame(); + var endMeasure = cpuLoad(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; From 9b6214f3bd30c4fd4753716a2046544d9783c7eb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:30:47 -0500 Subject: [PATCH 217/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 47ffbf21..2df2e12b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -13,6 +13,10 @@ module.exports = { newFrame: function() { return newFrame(); }, + clearFrame: function(frame) + { + clearFrame(frame); + }, setAlpha: function(a) { setAlpha(a); @@ -103,6 +107,13 @@ function newFrame(){ return new Uint8Array(getSize()*3); } +//Create an empty frame +function clearFrame(frame){ + for (i=0; i Date: Thu, 4 Jan 2018 19:32:15 -0500 Subject: [PATCH 218/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 9b77039d..debc6387 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -34,6 +34,7 @@ function onFrame() { speed =-speed; pos += speed; + clearFrame(frame); //Vary particle colour by CPU load (green to amber to red) frame[pos*3+0] = Math.floor(cpu_avg*2.5)+5; //R frame[pos*3+1] = 100-Math.floor(cpu_avg); //G From dcffd6eeccdada6f9d66bccedd96d018dfb5df4d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:33:51 -0500 Subject: [PATCH 219/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index debc6387..a0d32431 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .25; // 25% opacity to leave a particle trail +var alpha = .1; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; From a8f5dc9e29ba19fe774dd4aaacbc5cca531f4865 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:34:43 -0500 Subject: [PATCH 220/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index a0d32431..39e85328 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -34,7 +34,7 @@ function onFrame() { speed =-speed; pos += speed; - clearFrame(frame); + flex_stream.clearFrame(frame); //Vary particle colour by CPU load (green to amber to red) frame[pos*3+0] = Math.floor(cpu_avg*2.5)+5; //R frame[pos*3+1] = 100-Math.floor(cpu_avg); //G From 7d00183e089d96c258a0536d1468b885659ea1ee Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:35:47 -0500 Subject: [PATCH 221/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2df2e12b..4b64872b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -109,7 +109,7 @@ function newFrame(){ //Create an empty frame function clearFrame(frame){ - for (i=0; i Date: Thu, 4 Jan 2018 19:39:07 -0500 Subject: [PATCH 222/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 39e85328..34168e3b 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .1; // 25% opacity to leave a particle trail +var alpha = .25; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; @@ -18,7 +18,6 @@ var speed = 1; var frame = flex_stream.newFrame(); function onFrame() { - var endMeasure = cpuLoad(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; From ade7dff76302c13dad546fdfb57d65f931165782 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:43:47 -0500 Subject: [PATCH 223/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 34168e3b..0dd5086d 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .25; // 25% opacity to leave a particle trail +var alpha = .2; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; From 003a2eb8f223247751682a680803c230fe933d98 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:44:34 -0500 Subject: [PATCH 224/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 0dd5086d..6c8f4a3e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .2; // 25% opacity to leave a particle trail +var alpha = .3; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; From c37af8d8da78b70d7be8b39a20e6e122440c3826 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:51:44 -0500 Subject: [PATCH 225/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 6c8f4a3e..89d23dee 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -23,10 +23,10 @@ function onFrame() { var totalDifference = endMeasure.total - startMeasure.total; startMeasure = endMeasure; - //Vary the producer framerate by percentage CPU load (5 to 60 fps) + //Vary the producer framerate by percentage CPU load (6 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; - producer_framerate = cpu_avg/1.8+5; + producer_framerate = cpu_avg*(54/100)+6; //Bounce particle off edges of LED strip if (pos<=0 || pos>=size-1) From 681d701d1c04c1c944dfed2e16b80f8769f09f14 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:52:41 -0500 Subject: [PATCH 226/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 89d23dee..fb268493 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .3; // 25% opacity to leave a particle trail +var alpha = .2; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; From 2fb64cde692bcc00f1c3903366605abd55b0b37a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:53:37 -0500 Subject: [PATCH 227/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index fb268493..b756ac68 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -26,7 +26,7 @@ function onFrame() { //Vary the producer framerate by percentage CPU load (6 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; - producer_framerate = cpu_avg*(54/100)+6; + producer_framerate = cpu_avg*(52/100)+8; //Bounce particle off edges of LED strip if (pos<=0 || pos>=size-1) From a316b23ae0adbbcea9bdbbcf91a64e45006e1448 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 19:54:29 -0500 Subject: [PATCH 228/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index b756ac68..93f3f8d5 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -8,7 +8,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies with CPU load var consumer_framerate = 60; // High fps for morphing -var alpha = .2; // 25% opacity to leave a particle trail +var alpha = .3; // 25% opacity to leave a particle trail var startMeasure = cpuLoad(); var percentageCPU = 0; @@ -26,7 +26,7 @@ function onFrame() { //Vary the producer framerate by percentage CPU load (6 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; - producer_framerate = cpu_avg*(52/100)+8; + producer_framerate = cpu_avg*(50/100)+10; //Bounce particle off edges of LED strip if (pos<=0 || pos>=size-1) From aff33381b64fa89296fbd78e0514da4b9c31c8f6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 20:06:48 -0500 Subject: [PATCH 229/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 93f3f8d5..c214f1df 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -23,7 +23,7 @@ function onFrame() { var totalDifference = endMeasure.total - startMeasure.total; startMeasure = endMeasure; - //Vary the producer framerate by percentage CPU load (6 to 60 fps) + //Vary the producer framerate by percentage CPU load (10 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; producer_framerate = cpu_avg*(50/100)+10; From ffe05e6afbefb78fea6886669df572d26a7ead87 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:03:38 -0500 Subject: [PATCH 230/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 4b64872b..5e1a9fac 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -155,15 +155,31 @@ function morphFrame(current) device.setColors(0, composite, function(err, composite) {}); } -//Set user-defined OnFrame() + +//OnFrame() to stream user-defined frames + function setOnFrame(fn) { onFrame = fn; } -//Default OnFrame stub - set by user with setOnFrame() + + +//Default OnFrame() is FlexStream signature +var frame = newFrame(); +var pos = 0; var onFrame = function(){ - // use setOnFrame() to set user defined OnFrame function + //Bounce particle off edges of LED strip + if (pos++ >= size) + pos=0; + + clearFrame(frame); + + frame[pos*3+0] = 255; //R + frame[pos*3+1] = 255; //G + frame[pos*3+2] = 255; //B + + produceFrame(frame); }; function setProducerFramerate(framerate) @@ -227,7 +243,9 @@ function onExit(){ device.setColors(0, frame, function(err, frame) {process.exit(0);}); //Turn off LEDs } + //Start streaming +setOnFrame(onFrame); if (device){ producer(); consumer(); From e21b8c369b004615808c04a3275e3b857377a946 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:04:34 -0500 Subject: [PATCH 231/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 5e1a9fac..d6a5b8cb 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -71,9 +71,9 @@ var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); var MAX_SIZE = 64; //BlinkStick single channel limit var size = 8; //Default 8 LEDs. -var producer_framerate = 15; //Default low frame production for morphing +var producer_framerate = 30; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing -var alpha = 0.5; //Default is transparent frames for morphing +var alpha = 0.1; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame var currentFrame = null; //Latest frame from stream From a96440d56a5adf45a66ca9babf530866b67d7c1a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:17:34 -0500 Subject: [PATCH 232/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index d6a5b8cb..6a934254 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -71,11 +71,11 @@ var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); var MAX_SIZE = 64; //BlinkStick single channel limit var size = 8; //Default 8 LEDs. -var producer_framerate = 30; //Default low frame production for morphing +var producer_framerate = 20; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing var alpha = 0.1; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames -var composite = null; //Composite frame +var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = true; //Pause flag @@ -170,15 +170,18 @@ var frame = newFrame(); var pos = 0; var onFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size) + if (pos++ >= size*2) pos=0; - + clearFrame(frame); - - frame[pos*3+0] = 255; //R - frame[pos*3+1] = 255; //G - frame[pos*3+2] = 255; //B - + + if(pos < size) + { + frame[pos*3+0] = 255; //R + frame[pos*3+1] = 255; //G + frame[pos*3+2] = 255; //B + } + produceFrame(frame); }; From 07221b78ed38d5a6a77b9a50890ae77b86640468 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:31:34 -0500 Subject: [PATCH 233/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 6a934254..58d53a6a 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -247,7 +247,12 @@ function onExit(){ } -//Start streaming +//Initialize Stream with current size returned by getColorString + +device.getColorString(function(error, result) { + console.log("LED SIZE: " + result.length); +}); + setOnFrame(onFrame); if (device){ producer(); From 80e46e9e3516ce5ee124480dd766aafc79314056 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:32:21 -0500 Subject: [PATCH 234/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 58d53a6a..2a117507 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -250,7 +250,7 @@ function onExit(){ //Initialize Stream with current size returned by getColorString device.getColorString(function(error, result) { - console.log("LED SIZE: " + result.length); + console.log("color string: " + result); }); setOnFrame(onFrame); From 31059f4ac3fa24363f520e9bcd8c28ef0b22dd36 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:34:12 -0500 Subject: [PATCH 235/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2a117507..ff128ae7 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -241,9 +241,7 @@ process.on('SIGINT', onExit); function onExit(){ stop(); //Disable streaming to ensure no pending frames are set after LEDs are turned off - var frame = newFrame(); - clearFrame(frame); - device.setColors(0, frame, function(err, frame) {process.exit(0);}); //Turn off LEDs + device.turnOff(); } From f2391c0a15875b656411463a4634e9b94e235bdb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:34:36 -0500 Subject: [PATCH 236/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index ff128ae7..2a117507 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -241,7 +241,9 @@ process.on('SIGINT', onExit); function onExit(){ stop(); //Disable streaming to ensure no pending frames are set after LEDs are turned off - device.turnOff(); + var frame = newFrame(); + clearFrame(frame); + device.setColors(0, frame, function(err, frame) {process.exit(0);}); //Turn off LEDs } From d4b793e0ad9731b59df62cfd2f40b73123cdaedf Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:37:50 -0500 Subject: [PATCH 237/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2a117507..202fd8fd 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -249,7 +249,7 @@ function onExit(){ //Initialize Stream with current size returned by getColorString -device.getColorString(function(error, result) { +device.getColors(function(error, result) { console.log("color string: " + result); }); From 779ee158406c3abe1a16433d8d7473a51deb9441 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 22:47:51 -0500 Subject: [PATCH 238/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 202fd8fd..d95fd1c6 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -227,7 +227,7 @@ function getAlpha() function start() { - streaming = true; //Clamp between 0 (invisible) and 1 (opaque) + streaming = true; } function stop() @@ -247,12 +247,6 @@ function onExit(){ } -//Initialize Stream with current size returned by getColorString - -device.getColors(function(error, result) { - console.log("color string: " + result); -}); - setOnFrame(onFrame); if (device){ producer(); From d212f7536b1fe11d5e15e18f1ad4228b3f0da396 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:21:13 -0500 Subject: [PATCH 239/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 4 ++-- examples/flex_stream/flex_stream.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index c214f1df..e1fde2e8 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -15,7 +15,7 @@ var percentageCPU = 0; var cpu_avg = 0; var pos = 1; var speed = 1; -var frame = flex_stream.newFrame(); + function onFrame() { var endMeasure = cpuLoad(); @@ -33,7 +33,7 @@ function onFrame() { speed =-speed; pos += speed; - flex_stream.clearFrame(frame); + var frame = flex_stream.newFrame(); //Vary particle colour by CPU load (green to amber to red) frame[pos*3+0] = Math.floor(cpu_avg*2.5)+5; //R frame[pos*3+1] = 100-Math.floor(cpu_avg); //G diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index d95fd1c6..0593332e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -166,14 +166,14 @@ function setOnFrame(fn) //Default OnFrame() is FlexStream signature -var frame = newFrame(); + var pos = 0; var onFrame = function(){ //Bounce particle off edges of LED strip if (pos++ >= size*2) pos=0; - clearFrame(frame); + var frame = newFrame(); if(pos < size) { From ff1adc1c27348b6143283e94ba63ecc517284374 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:24:01 -0500 Subject: [PATCH 240/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 ++++-- examples/flex_stream/fireplace.js | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 033395ea..3400bc1d 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -8,7 +8,7 @@ var size = 8; // Default 8, maximum 64 (single BlickStick channe var producer_framerate = 30; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies -var frame = flex_stream.newFrame(); + function onFrame() { @@ -16,7 +16,9 @@ function onFrame() { a = Math.random(); flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); - + + var frame = flex_stream.newFrame(); + for (i=0; i Date: Thu, 4 Jan 2018 23:24:59 -0500 Subject: [PATCH 241/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- examples/flex_stream/cpu_meter.js | 2 +- examples/flex_stream/fireplace.js | 2 +- examples/flex_stream/unicorn.js | 4 +++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 3400bc1d..ca487cff 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -17,7 +17,7 @@ function onFrame() { flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); - var frame = flex_stream.newFrame(); + var frame = flex_stream.newFrame(); for (i=0; i Date: Thu, 4 Jan 2018 23:33:04 -0500 Subject: [PATCH 242/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 0593332e..8b05cd6d 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -163,28 +163,6 @@ function setOnFrame(fn) onFrame = fn; } - - -//Default OnFrame() is FlexStream signature - -var pos = 0; -var onFrame = function(){ - //Bounce particle off edges of LED strip - if (pos++ >= size*2) - pos=0; - - var frame = newFrame(); - - if(pos < size) - { - frame[pos*3+0] = 255; //R - frame[pos*3+1] = 255; //G - frame[pos*3+2] = 255; //B - } - - produceFrame(frame); -}; - function setProducerFramerate(framerate) { producer_framerate = framerate; @@ -247,6 +225,7 @@ function onExit(){ } +//Start Streaming setOnFrame(onFrame); if (device){ producer(); @@ -254,3 +233,24 @@ if (device){ } +//Default OnFrame() is FlexStream signature + +var pos = 0; +var onFrame = function(){ + //Bounce particle off edges of LED strip + if (pos++ >= size+30) + pos=0; + + var frame = newFrame(); + + if(pos < size) + { + frame[pos*3+0] = 255; //R + frame[pos*3+1] = 255; //G + frame[pos*3+2] = 255; //B + } + + produceFrame(frame); +}; + + From c0684954637e8741e35d3ab3e0d9f2e56d25409a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:33:46 -0500 Subject: [PATCH 243/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 8b05cd6d..449f42a1 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -226,7 +226,7 @@ function onExit(){ //Start Streaming -setOnFrame(onFrame); + if (device){ producer(); consumer(); @@ -253,4 +253,4 @@ var onFrame = function(){ produceFrame(frame); }; - +setOnFrame(onFrame); From b6b667aad44c6ee386a6d68e3192b3be25df643e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:36:42 -0500 Subject: [PATCH 244/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 449f42a1..380b42b8 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -163,6 +163,11 @@ function setOnFrame(fn) onFrame = fn; } + +//Default onFrame() stub + +var onFrame = function(){}; + function setProducerFramerate(framerate) { producer_framerate = framerate; @@ -224,21 +229,16 @@ function onExit(){ device.setColors(0, frame, function(err, frame) {process.exit(0);}); //Turn off LEDs } - -//Start Streaming - if (device){ producer(); consumer(); } - -//Default OnFrame() is FlexStream signature - +//Default signature streaming var pos = 0; -var onFrame = function(){ +var signatureOnFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+30) + if (pos++ >= size*2) pos=0; var frame = newFrame(); @@ -253,4 +253,5 @@ var onFrame = function(){ produceFrame(frame); }; -setOnFrame(onFrame); +setOnFrame(signatureOnFrame); + From 5e8805170849d3520871202b478d2bbc03e6508a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:37:07 -0500 Subject: [PATCH 245/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 380b42b8..435f0008 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -238,7 +238,7 @@ if (device){ var pos = 0; var signatureOnFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size*2) + if (pos++ >= size+30) pos=0; var frame = newFrame(); From 6ee94bc63492a48f0ab7afec64cb9a1e88ab11a7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:37:41 -0500 Subject: [PATCH 246/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 435f0008..a8c9951e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -238,7 +238,7 @@ if (device){ var pos = 0; var signatureOnFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+30) + if (pos++ >= size+20) pos=0; var frame = newFrame(); From 11557d5b5e199a2afe68402ec1e814f956c78362 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:38:13 -0500 Subject: [PATCH 247/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a8c9951e..2fa2780b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -238,7 +238,7 @@ if (device){ var pos = 0; var signatureOnFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+20) + if (pos++ >= size+16) pos=0; var frame = newFrame(); From b010d0e67048c47ee8a3da832e83f1314de71819 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:39:26 -0500 Subject: [PATCH 248/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2fa2780b..a32d52d6 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -238,7 +238,7 @@ if (device){ var pos = 0; var signatureOnFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+16) + if (pos++ >= size+10) pos=0; var frame = newFrame(); From 5f21bcfe87605b39c979548eea17b41d2fc08490 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:40:06 -0500 Subject: [PATCH 249/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a32d52d6..a8c9951e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -238,7 +238,7 @@ if (device){ var pos = 0; var signatureOnFrame = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+10) + if (pos++ >= size+20) pos=0; var frame = newFrame(); From d9ab18dfce4281919f8cb8be1961d2249e9151ed Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:41:29 -0500 Subject: [PATCH 250/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a8c9951e..28dd8731 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -73,7 +73,7 @@ var MAX_SIZE = 64; //BlinkStick single channel limit var size = 8; //Default 8 LEDs. var producer_framerate = 20; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing -var alpha = 0.1; //Default is transparent frames for morphing +var alpha = 0.2; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream From 1462b6af60fdf353f350ff68d4d4f88a2745c952 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:42:25 -0500 Subject: [PATCH 251/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 28dd8731..89f68107 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -73,7 +73,7 @@ var MAX_SIZE = 64; //BlinkStick single channel limit var size = 8; //Default 8 LEDs. var producer_framerate = 20; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing -var alpha = 0.2; //Default is transparent frames for morphing +var alpha = 0.5; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream From 2d42b72fcb522cb0dc403210601b749074bb3ddb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:43:18 -0500 Subject: [PATCH 252/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 89f68107..2e3f8857 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -73,7 +73,7 @@ var MAX_SIZE = 64; //BlinkStick single channel limit var size = 8; //Default 8 LEDs. var producer_framerate = 20; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing -var alpha = 0.5; //Default is transparent frames for morphing +var alpha = 0.01; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream From b67cf3bbd333f5cd98e8a68261c24b0e892f9cfd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:43:47 -0500 Subject: [PATCH 253/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2e3f8857..a8c9951e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -73,7 +73,7 @@ var MAX_SIZE = 64; //BlinkStick single channel limit var size = 8; //Default 8 LEDs. var producer_framerate = 20; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing -var alpha = 0.01; //Default is transparent frames for morphing +var alpha = 0.1; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream From 579bdb50abb169b47b49eaccb74afa94badb052c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:47:45 -0500 Subject: [PATCH 254/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- examples/flex_stream/cpu_meter.js | 4 ++-- examples/flex_stream/fireplace.js | 4 ++-- examples/flex_stream/flex_stream.js | 4 ++-- examples/flex_stream/unicorn.js | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ca487cff..f59c019c 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,7 +10,7 @@ var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies -function onFrame() { +function aurora() { //Aurora a = Math.random(); @@ -42,4 +42,4 @@ flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); flex_stream.setAlpha(alpha); -flex_stream.setOnFrame(onFrame); +flex_stream.setOnFrame(aurora); diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index cd6031da..9e47aacc 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -17,7 +17,7 @@ var pos = 1; var speed = 1; -function onFrame() { +function cpuMeter() { var endMeasure = cpuLoad(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; @@ -64,5 +64,5 @@ flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); flex_stream.setAlpha(alpha); -flex_stream.setOnFrame(onFrame); +flex_stream.setOnFrame(cpuMeter); diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index d261da5d..44031021 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -10,7 +10,7 @@ var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies -function onFrame() { +function fireplace() { var frame = flex_stream.newFrame(); @@ -39,4 +39,4 @@ flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); flex_stream.setAlpha(alpha); -flex_stream.setOnFrame(onFrame); +flex_stream.setOnFrame(fireplace); diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a8c9951e..8e92f1b5 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -236,7 +236,7 @@ if (device){ //Default signature streaming var pos = 0; -var signatureOnFrame = function(){ +var signature = function(){ //Bounce particle off edges of LED strip if (pos++ >= size+20) pos=0; @@ -253,5 +253,5 @@ var signatureOnFrame = function(){ produceFrame(frame); }; -setOnFrame(signatureOnFrame); +setOnFrame(signature); diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 76ac2d10..77c6bfc3 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -10,7 +10,7 @@ var consumer_framerate = 60; // High fps for morphing var alpha = 0.05; // slow -function onFrame() { +function unicorn() { // Unicorn rainbow happy joy var off = 0; var amp = 150; @@ -34,4 +34,4 @@ flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); flex_stream.setAlpha(alpha); -flex_stream.setOnFrame(onFrame); +flex_stream.setOnFrame(unicorn); From 4f0b9a344f3044a3f826171df1f5fc38e2cd1756 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Thu, 4 Jan 2018 23:48:03 -0500 Subject: [PATCH 255/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 8e92f1b5..c813be38 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -249,7 +249,6 @@ var signature = function(){ frame[pos*3+1] = 255; //G frame[pos*3+2] = 255; //B } - produceFrame(frame); }; From 9b144152b924f70fd61448baaca78bfb969d80f6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 00:35:56 -0500 Subject: [PATCH 256/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 44031021..b485c55f 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -5,33 +5,33 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 30; // Varies +var producer_framerate = 15; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies function fireplace() { - - var frame = flex_stream.newFrame(); - - for (i=0; i Date: Fri, 5 Jan 2018 00:36:08 -0500 Subject: [PATCH 257/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index b485c55f..83a202b0 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,7 +26,7 @@ function fireplace() { frame[i*3+2] = 0; //B } - //Flickering frames + //Flickering flames f = Math.random(); flex_stream.setProducerFramerate(f*10+2); flex_stream.setAlpha(.05+(f/20)); From 3d3637d2c6044facc68250f0c2a44ecea1406bbb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 00:54:42 -0500 Subject: [PATCH 258/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c813be38..79e53b7a 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -82,13 +82,12 @@ var streaming = true; //Pause flag //Stream Producer function producer(){ onFrame(); //Call user defined function - setTimeout(producer, 1000/producer_framerate); //Clamp to 1-60fps + setTimeout(producer, 1000/producer_framerate); } //Stream Consumer function consumer(){ consumeFrame(); //Render frame to BlinkStick - setTimeout(consumer, 1000/consumer_framerate); } //Convert to internal BlinkStick buffer @@ -152,7 +151,9 @@ function morphFrame(current) } if (streaming) - device.setColors(0, composite, function(err, composite) {}); + device.setColors(0, composite, function(err, composite) { + setTimeout(consumer, 1000/consumer_framerate); + }); } From 888cce4e9377dc6b37fff94e3e741b56df39d146 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 00:55:52 -0500 Subject: [PATCH 259/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 79e53b7a..002307fe 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -88,6 +88,7 @@ function producer(){ //Stream Consumer function consumer(){ consumeFrame(); //Render frame to BlinkStick + setTimeout(consumer, 1000/consumer_framerate); } //Convert to internal BlinkStick buffer @@ -151,9 +152,7 @@ function morphFrame(current) } if (streaming) - device.setColors(0, composite, function(err, composite) { - setTimeout(consumer, 1000/consumer_framerate); - }); + device.setColors(0, composite, function(err, composite) {}); } From cfb6a1ea9f141e3de4582b0e5eb8d9fe0f4e896c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 01:13:39 -0500 Subject: [PATCH 260/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 002307fe..26b70ac2 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -77,7 +77,7 @@ var alpha = 0.1; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream -var streaming = true; //Pause flag +var streaming = true; //Semaphore //Stream Producer function producer(){ @@ -119,7 +119,6 @@ function produceFrame(frame) { if (stream_buffer.length==0) //Skip frame if consumer is falling behind stream_buffer.push(frame); - producer_framerate = Math.max(1, Math.min(producer_framerate, 60)); //Clamp between 1 and 60 fps } //Consume frame from stream - called from consumer @@ -132,8 +131,6 @@ function consumeFrame() } if (currentFrame != null) morphFrame(currentFrame); //Morph to the current frame - - consumer_framerate = Math.max(1, Math.min(consumer_framerate, 60)); //Clamp between 1 and 60 fps } //Morph current frame over composite frame @@ -152,7 +149,12 @@ function morphFrame(current) } if (streaming) - device.setColors(0, composite, function(err, composite) {}); + { + streaming = false; + device.setColors(0, composite, function(err, composite) { + streaming = true + }); + } } @@ -170,7 +172,7 @@ var onFrame = function(){}; function setProducerFramerate(framerate) { - producer_framerate = framerate; + producer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } function getProducerFramerate() @@ -180,7 +182,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { - consumer_framerate = framerate; + consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } function getConsumerFramerate() From cbdbe26c36106104b1067748e62a4f62dc8b1f8c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 01:22:10 -0500 Subject: [PATCH 261/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 26b70ac2..2e5a6d41 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -77,7 +77,8 @@ var alpha = 0.1; //Default is transparent frames for morphing var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream -var streaming = true; //Semaphore +var streaming = true; //Pause +var busy = false; //Semaphore //Stream Producer function producer(){ @@ -148,11 +149,11 @@ function morphFrame(current) } } - if (streaming) + if (streaming && !busy) { - streaming = false; + busy = true; device.setColors(0, composite, function(err, composite) { - streaming = true + busy = false; }); } } @@ -225,6 +226,7 @@ process.on('SIGTERM', onExit); process.on('SIGINT', onExit); function onExit(){ + console.log("FLEX STREAM EXIT"); stop(); //Disable streaming to ensure no pending frames are set after LEDs are turned off var frame = newFrame(); clearFrame(frame); From 02205ddc7d2ac11fc3fc3eabc42bcc25e5059f27 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 01:37:15 -0500 Subject: [PATCH 262/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2e5a6d41..643f47c5 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -173,7 +173,7 @@ var onFrame = function(){}; function setProducerFramerate(framerate) { - producer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps + producer_framerate = Math.max(1, Math.min(framerate, 50)); //Clamp between 1 and 50 fps } function getProducerFramerate() @@ -183,7 +183,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { - consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps + consumer_framerate = Math.max(1, Math.min(framerate, 50)); //Clamp between 1 and 50 fps } function getConsumerFramerate() From b49c759aec20db277f96286b92865cbc5ee66a78 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 01:37:47 -0500 Subject: [PATCH 263/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 9e47aacc..be6768b0 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -26,7 +26,7 @@ function cpuMeter() { //Vary the producer framerate by percentage CPU load (10 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; - producer_framerate = cpu_avg*(50/100)+10; + producer_framerate = cpu_avg*0.40+10; //Bounce particle off edges of LED strip if (pos<=0 || pos>=size-1) From 6405cb8dd316250e12a129f1be6a89d1c76f18c9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 01:38:11 -0500 Subject: [PATCH 264/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- examples/flex_stream/fireplace.js | 2 +- examples/flex_stream/unicorn.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index f59c019c..1a1ccb05 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -6,7 +6,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies -var consumer_framerate = 60; // High fps for morphing +var consumer_framerate = 50; // High fps for morphing var alpha = 0; // Varies diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 83a202b0..be8a8a80 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -6,7 +6,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 15; // Varies -var consumer_framerate = 60; // High fps for morphing +var consumer_framerate = 50; // High fps for morphing var alpha = 0; // Varies diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 77c6bfc3..70e2e4da 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -6,7 +6,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 4; // slow -var consumer_framerate = 60; // High fps for morphing +var consumer_framerate = 50; // High fps for morphing var alpha = 0.05; // slow From 8374e18e00c32312d73784c294668746f5ef8834 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 01:52:37 -0500 Subject: [PATCH 265/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- examples/flex_stream/cpu_meter.js | 2 +- examples/flex_stream/fireplace.js | 2 +- examples/flex_stream/flex_stream.js | 12 ++++-------- examples/flex_stream/unicorn.js | 2 +- 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 1a1ccb05..f59c019c 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -6,7 +6,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 30; // Varies -var consumer_framerate = 50; // High fps for morphing +var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index be6768b0..bf22da55 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -26,7 +26,7 @@ function cpuMeter() { //Vary the producer framerate by percentage CPU load (10 to 60 fps) percentageCPU = 100 - (100 * idleDifference / totalDifference); cpu_avg = (cpu_avg+percentageCPU)/2; - producer_framerate = cpu_avg*0.40+10; + producer_framerate = cpu_avg*0.50+10; //Bounce particle off edges of LED strip if (pos<=0 || pos>=size-1) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index be8a8a80..83a202b0 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -6,7 +6,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 15; // Varies -var consumer_framerate = 50; // High fps for morphing +var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 643f47c5..ebd0bff9 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -173,7 +173,7 @@ var onFrame = function(){}; function setProducerFramerate(framerate) { - producer_framerate = Math.max(1, Math.min(framerate, 50)); //Clamp between 1 and 50 fps + producer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 50 fps } function getProducerFramerate() @@ -183,7 +183,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { - consumer_framerate = Math.max(1, Math.min(framerate, 50)); //Clamp between 1 and 50 fps + consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } function getConsumerFramerate() @@ -242,13 +242,9 @@ if (device){ var pos = 0; var signature = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+20) - pos=0; - + if (pos++ >= size+20) pos=0; var frame = newFrame(); - - if(pos < size) - { + if(pos < size){ frame[pos*3+0] = 255; //R frame[pos*3+1] = 255; //G frame[pos*3+2] = 255; //B diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 70e2e4da..77c6bfc3 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -6,7 +6,7 @@ const flex_stream = require("./flex_stream.js"); var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 4; // slow -var consumer_framerate = 50; // High fps for morphing +var consumer_framerate = 60; // High fps for morphing var alpha = 0.05; // slow From cd41053a266c20601186e32843403eb2fd414876 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 17:34:15 -0500 Subject: [PATCH 266/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 1 - examples/flex_stream/flex_stream.js | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 83a202b0..cbeb6882 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -9,7 +9,6 @@ var producer_framerate = 15; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies - function fireplace() { var frame = flex_stream.newFrame(); diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index ebd0bff9..7c9365fb 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -230,7 +230,10 @@ function onExit(){ stop(); //Disable streaming to ensure no pending frames are set after LEDs are turned off var frame = newFrame(); clearFrame(frame); - device.setColors(0, frame, function(err, frame) {process.exit(0);}); //Turn off LEDs + device.setColors(0, frame, function(err, frame) { + device.turnOff(); + process.exit(0); + }); //Turn off LEDs } if (device){ From a08783f12a44bf45ebe7818e2a2adc09acdc8faa Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 18:09:05 -0500 Subject: [PATCH 267/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 7c9365fb..ccc11b10 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -241,7 +241,7 @@ if (device){ consumer(); } -//Default signature streaming +//Default signature animation var pos = 0; var signature = function(){ //Bounce particle off edges of LED strip From 54b214f54cc2f71757b107edb814b973eb9e98cf Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 20:39:16 -0500 Subject: [PATCH 268/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index fa025343..7fdcf40c 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -28,5 +28,5 @@ function onFrame(){ flex_stream.setSize(size); flex_stream.setProducerFramerate(producer_framerate); flex_stream.setConsumerFramerate(consumer_framerate); -flex_stream.setTransparency(transparency); +flex_stream.setAlpha(alpha); flex_stream.setOnFrame(onFrame); From 14f48c2c7854bc847179982b59c2ac3c3347afbe Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 20:40:25 -0500 Subject: [PATCH 269/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 7fdcf40c..a0fb3da2 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -11,7 +11,7 @@ const screenshot = require('screenshot-desktop'); //Available at npmjs.com const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead +var producer_framerate = 10; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth morphing/interlacing var alpha = 0.15 // 15% opacity for smooth morphing/interlacing From 7c82217417aad207c3cd7ca808cfc22e26976aa0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 20:44:16 -0500 Subject: [PATCH 270/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index a0fb3da2..32a8f050 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -13,7 +13,7 @@ const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 10; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth morphing/interlacing -var alpha = 0.15 // 15% opacity for smooth morphing/interlacing +var alpha = 0.2 // 15% opacity for smooth morphing/interlacing //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ From 44302f2cd2276ebdc663cde602cb10de1dc5fdae Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 20:49:18 -0500 Subject: [PATCH 271/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 32a8f050..0302ebc8 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -10,9 +10,9 @@ const flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npmjs.com const sharp = require('sharp'); //Available at npmjs.com -var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 10; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead -var consumer_framerate = 60; // High render rate for smooth morphing/interlacing +var size = 8; // Default 8, maximum 64 (single BlickStick channel) +var producer_framerate = 10; // Low sample rate (10 fps = 100ms lag) to reduce CPU overhead +var consumer_framerate = 60; // High render rate for smooth morphing/interlacing var alpha = 0.2 // 15% opacity for smooth morphing/interlacing //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline From a89e41243c9cdfee0ee4272b6ec456be746b7e69 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 23:39:19 -0500 Subject: [PATCH 272/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- examples/flex_stream/flex_stream_util.js | 253 +++++++++++++++++++++++ 2 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 examples/flex_stream/flex_stream_util.js diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 0302ebc8..37505dd4 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -11,7 +11,7 @@ const screenshot = require('screenshot-desktop'); //Available at npmjs.com const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 10; // Low sample rate (10 fps = 100ms lag) to reduce CPU overhead +var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth morphing/interlacing var alpha = 0.2 // 15% opacity for smooth morphing/interlacing diff --git a/examples/flex_stream/flex_stream_util.js b/examples/flex_stream/flex_stream_util.js new file mode 100644 index 00000000..edfb7d3c --- /dev/null +++ b/examples/flex_stream/flex_stream_util.js @@ -0,0 +1,253 @@ +//Utilities for flex stream + +module.exports = { + setOnFrame: function(fn) { + setOnFrame(fn); + }, + newFrame: function() { + return newFrame(); + }, + clearFrame: function(frame) + { + clearFrame(frame); + }, + setAlpha: function(a) + { + setAlpha(a); + }, + getAlpha: function() + { + return getAlpha(); + }, + produceFrame: function(frame) + { + produceFrame(frame); + }, + setProducerFramerate: function(framerate) + { + setProducerFramerate(framerate); + }, + getProducerFramerate: function() + { + return getProducerFramerate(); + }, + setConsumerFramerate: function(framerate) + { + setConsumerFramerate(framerate); + }, + getConsumerFramerate: function() + { + return getConsumerFramerate(); + }, + setSize: function(size) + { + setSize(size); + }, + getSize: function() + { + return getSize(); + }, + start: function(size) + { + start(); + }, + stop: function() + { + return stop(); + }, + isStreaming: function() + { + return streaming; + } +} + +var blinkstick = require('blinkstick'); +var device = blinkstick.findFirst(); +var MAX_SIZE = 64; //BlinkStick single channel limit +var size = 8; //Default 8 LEDs. +var producer_framerate = 20; //Default low frame production for morphing +var consumer_framerate = 60; //Default high frame rendering for morphing +var alpha = 0.1; //Default is transparent frames for morphing +var stream_buffer = []; //Stream buffer for frames +var composite = null; //Composite frame for morphing +var currentFrame = null; //Latest frame from stream +var streaming = true; //Pause +var busy = false; //Semaphore + +//Stream Producer +function producer(){ + onFrame(); //Call user defined function + setTimeout(producer, 1000/producer_framerate); +} + +//Stream Consumer +function consumer(){ + consumeFrame(); //Render frame to BlinkStick + setTimeout(consumer, 1000/consumer_framerate); +} + +//Convert to internal BlinkStick buffer +function convert_grb(rgb){ + var grb = newFrame(); + for (var i = 0; i0){ //Check if new frame available + var rgb = stream_buffer.shift(); + var grb = convert_grb(rgb); + currentFrame = grb; + } + if (currentFrame != null) + morphFrame(currentFrame); //Morph to the current frame +} + +//Morph current frame over composite frame +function morphFrame(current) +{ + if (composite == null || alpha == 1) + composite = current; //Initialize composite frame + + //Morph to the current frame with composite (additive alpha blending function) + if (alpha>0){ + for (var i = 0; i= size+20) pos=0; + var frame = newFrame(); + if(pos < size){ + frame[pos*3+0] = 255; //R + frame[pos*3+1] = 255; //G + frame[pos*3+2] = 255; //B + } + produceFrame(frame); +}; + +setOnFrame(signature); + From 0ab46e79aa1e861a9eb75a24531983bb24c6d385 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 23:41:48 -0500 Subject: [PATCH 273/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 37505dd4..7af1065f 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -13,7 +13,7 @@ const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth morphing/interlacing -var alpha = 0.2 // 15% opacity for smooth morphing/interlacing +var alpha = 0.15 // 15% opacity for smooth morphing/interlacing //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ From 1ca6d4738ec1a1ecef3c7986a62a10f3c87ae22b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Fri, 5 Jan 2018 23:42:36 -0500 Subject: [PATCH 274/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 7af1065f..90d2305d 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -11,9 +11,9 @@ const screenshot = require('screenshot-desktop'); //Available at npmjs.com const sharp = require('sharp'); //Available at npmjs.com var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead +var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead var consumer_framerate = 60; // High render rate for smooth morphing/interlacing -var alpha = 0.15 // 15% opacity for smooth morphing/interlacing +var alpha = 0.1 // 15% opacity for smooth morphing/interlacing //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function onFrame(){ From db325f20a3430868d48dc4a71be1c2093ffb374b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 21:39:38 -0500 Subject: [PATCH 275/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_util.js | 250 +---------------------- 1 file changed, 6 insertions(+), 244 deletions(-) diff --git a/examples/flex_stream/flex_stream_util.js b/examples/flex_stream/flex_stream_util.js index edfb7d3c..cb544b62 100644 --- a/examples/flex_stream/flex_stream_util.js +++ b/examples/flex_stream/flex_stream_util.js @@ -3,251 +3,13 @@ module.exports = { setOnFrame: function(fn) { setOnFrame(fn); - }, - newFrame: function() { - return newFrame(); - }, - clearFrame: function(frame) - { - clearFrame(frame); - }, - setAlpha: function(a) - { - setAlpha(a); - }, - getAlpha: function() - { - return getAlpha(); - }, - produceFrame: function(frame) - { - produceFrame(frame); - }, - setProducerFramerate: function(framerate) - { - setProducerFramerate(framerate); - }, - getProducerFramerate: function() - { - return getProducerFramerate(); - }, - setConsumerFramerate: function(framerate) - { - setConsumerFramerate(framerate); - }, - getConsumerFramerate: function() - { - return getConsumerFramerate(); - }, - setSize: function(size) - { - setSize(size); - }, - getSize: function() - { - return getSize(); - }, - start: function(size) - { - start(); - }, - stop: function() - { - return stop(); - }, - isStreaming: function() - { - return streaming; } } -var blinkstick = require('blinkstick'); -var device = blinkstick.findFirst(); -var MAX_SIZE = 64; //BlinkStick single channel limit -var size = 8; //Default 8 LEDs. -var producer_framerate = 20; //Default low frame production for morphing -var consumer_framerate = 60; //Default high frame rendering for morphing -var alpha = 0.1; //Default is transparent frames for morphing -var stream_buffer = []; //Stream buffer for frames -var composite = null; //Composite frame for morphing -var currentFrame = null; //Latest frame from stream -var streaming = true; //Pause -var busy = false; //Semaphore - -//Stream Producer -function producer(){ - onFrame(); //Call user defined function - setTimeout(producer, 1000/producer_framerate); -} - -//Stream Consumer -function consumer(){ - consumeFrame(); //Render frame to BlinkStick - setTimeout(consumer, 1000/consumer_framerate); -} - -//Convert to internal BlinkStick buffer -function convert_grb(rgb){ - var grb = newFrame(); - for (var i = 0; i0){ //Check if new frame available - var rgb = stream_buffer.shift(); - var grb = convert_grb(rgb); - currentFrame = grb; - } - if (currentFrame != null) - morphFrame(currentFrame); //Morph to the current frame -} - -//Morph current frame over composite frame -function morphFrame(current) -{ - if (composite == null || alpha == 1) - composite = current; //Initialize composite frame - - //Morph to the current frame with composite (additive alpha blending function) - if (alpha>0){ - for (var i = 0; i= size+20) pos=0; - var frame = newFrame(); - if(pos < size){ - frame[pos*3+0] = 255; //R - frame[pos*3+1] = 255; //G - frame[pos*3+2] = 255; //B - } - produceFrame(frame); -}; - -setOnFrame(signature); +var express = require('express') +var app = express() +// respond with "hello world" when a GET request is made to the homepage +app.get('/', function (req, res) { + res.send('hello world') +}) From 57d56dfe8234b838f656ea3707a8b64d6099f060 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 21:41:32 -0500 Subject: [PATCH 276/581] Signed-off-by: dcerisano --- examples/flex_stream/{flex_stream_util.js => flex_server.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/flex_stream/{flex_stream_util.js => flex_server.js} (100%) diff --git a/examples/flex_stream/flex_stream_util.js b/examples/flex_stream/flex_server.js similarity index 100% rename from examples/flex_stream/flex_stream_util.js rename to examples/flex_stream/flex_server.js From 049700b78b0296bec9d4f94eb11fb55c6659e900 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 21:44:58 -0500 Subject: [PATCH 277/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index cb544b62..663f1cb4 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -1,10 +1,5 @@ //Utilities for flex stream -module.exports = { - setOnFrame: function(fn) { - setOnFrame(fn); - } -} var express = require('express') var app = express() @@ -13,3 +8,8 @@ var app = express() app.get('/', function (req, res) { res.send('hello world') }) + +var port = process.env.PORT || 5000; + app.listen(port, function() { + console.log("Listening on " + port); + }); \ No newline at end of file From 4b091c142c7d20ecf3aebe62143a861562dc9203 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 21:49:58 -0500 Subject: [PATCH 278/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 663f1cb4..b4627322 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -1,15 +1,11 @@ -//Utilities for flex stream - - var express = require('express') var app = express() -// respond with "hello world" when a GET request is made to the homepage + app.get('/', function (req, res) { - res.send('hello world') + res.send("onFrame is set to " + req.params.onFrame); }) var port = process.env.PORT || 5000; app.listen(port, function() { - console.log("Listening on " + port); }); \ No newline at end of file From 3e4e55e035de0847e3407aaf09b5c97b27ecae84 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 21:51:53 -0500 Subject: [PATCH 279/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index b4627322..f0fbc021 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -2,7 +2,7 @@ var express = require('express') var app = express() -app.get('/', function (req, res) { +app.get('/p/:onFrame', function (req, res) { res.send("onFrame is set to " + req.params.onFrame); }) From d5bd737ce66c152b9029a7656d18df8935c3fca7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 21:53:57 -0500 Subject: [PATCH 280/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index f0fbc021..2a495a3d 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -2,8 +2,8 @@ var express = require('express') var app = express() -app.get('/p/:onFrame', function (req, res) { - res.send("onFrame is set to " + req.params.onFrame); +app.get('/', function (req, res) { + res.send("onFrame is set to " + req.query.onFrame); }) var port = process.env.PORT || 5000; From 1d453d02efd27c2355180d4380f08e33edc8c980 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 22:28:04 -0500 Subject: [PATCH 281/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 23 ++++++++--- examples/flex_stream/aurora.js | 29 +++++++++----- examples/flex_stream/cpu_meter.js | 28 +++++++++----- examples/flex_stream/fireplace.js | 59 +++++++++++++++++------------ examples/flex_stream/flex_server.js | 41 +++++++++++++++++--- examples/flex_stream/flex_stream.js | 21 +++++----- 6 files changed, 137 insertions(+), 64 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 90d2305d..f75fdd76 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -6,6 +6,12 @@ //- Latest blinkstick, screenshot-desktop and sharp npm packages (all cross-platform) //For Windows, Linux and Mac +module.exports = { + init: function() { + init(); + } +} + const flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npmjs.com const sharp = require('sharp'); //Available at npmjs.com @@ -16,7 +22,7 @@ var consumer_framerate = 60; // High render rate for smooth morphing/interlacing var alpha = 0.1 // 15% opacity for smooth morphing/interlacing //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline -function onFrame(){ +function ambilight(){ screenshot().then((img) => { sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { flex_stream.produceFrame(data); @@ -25,8 +31,13 @@ function onFrame(){ } //Configure stream -flex_stream.setSize(size); -flex_stream.setProducerFramerate(producer_framerate); -flex_stream.setConsumerFramerate(consumer_framerate); -flex_stream.setAlpha(alpha); -flex_stream.setOnFrame(onFrame); + +function init(){ + flex_stream.setSize(size); + flex_stream.setProducerFramerate(producer_framerate); + flex_stream.setConsumerFramerate(consumer_framerate); + flex_stream.setAlpha(alpha); + flex_stream.setOnFrame(ambilight); +} + +init(); diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index f59c019c..2af785d9 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -1,6 +1,12 @@ //Aurora Borealis ambience based on flex_stream.js //For Windows, Linux and Mac +module.exports = { + init: function() { + init(); + } +} + const os = require("os"); const flex_stream = require("./flex_stream.js"); @@ -9,16 +15,15 @@ var producer_framerate = 30; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies - function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); - - var frame = flex_stream.newFrame(); - + + var frame = flex_stream.newFrame(); + for (i=0; i=size-1) speed =-speed; pos += speed; - + var frame = flex_stream.newFrame(); //Vary particle colour by CPU load (green to amber to red) frame[pos*3+0] = Math.floor(cpu_avg*2.5)+5; //R frame[pos*3+1] = 100-Math.floor(cpu_avg); //G frame[pos*3+2] = 2; //B - + flex_stream.setProducerFramerate(producer_framerate); flex_stream.produceFrame(frame); } @@ -48,7 +53,7 @@ function cpuLoad() { var totalIdle = 0; var totalTick = 0; var cpus = os.cpus(); - + for(var i = 0, len = cpus.length; i < len; i++) { var cpu = cpus[i]; for(type in cpu.times) { @@ -60,9 +65,14 @@ function cpuLoad() { } //Configure stream -flex_stream.setSize(size); -flex_stream.setProducerFramerate(producer_framerate); -flex_stream.setConsumerFramerate(consumer_framerate); -flex_stream.setAlpha(alpha); -flex_stream.setOnFrame(cpuMeter); + +function init(){ + flex_stream.setSize(size); + flex_stream.setProducerFramerate(producer_framerate); + flex_stream.setConsumerFramerate(consumer_framerate); + flex_stream.setAlpha(alpha); + flex_stream.setOnFrame(cpuMeter); +} + +init(); diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index cbeb6882..cccf2710 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -9,33 +9,42 @@ var producer_framerate = 15; // Varies var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies +module.exports = { + init: function() { + init(); + } +} + function fireplace() { + var frame = flex_stream.newFrame(); + for (i=0; i Date: Sat, 6 Jan 2018 22:29:41 -0500 Subject: [PATCH 282/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 5efc2390..e8f4f55f 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -11,7 +11,7 @@ const express = require('express'); var app = express() app.get('/', function (req, res) { - var onFrame = req.query.example; + var example = req.query.example; switch(example) { case "cpu_meter": From 690d211529ba24c91fadd4d1243ad289db7da7d8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 22:33:58 -0500 Subject: [PATCH 283/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 2 +- examples/flex_stream/flex_stream.js | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index e8f4f55f..727228a6 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -30,7 +30,7 @@ app.get('/', function (req, res) { ambilight.init(); break; default: - flex_stream.setOnFrame(flex_stream.signature); + flex_stream.init(); example = "default" } diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index f9ef0245..e6ccb5d7 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -7,6 +7,9 @@ //** Pro can currently only set one channel per call, so streaming is not yet supported for multiple channels module.exports = { + init: function() { + init(); + }, setOnFrame: function(fn) { setOnFrame(fn); }, @@ -233,7 +236,7 @@ function onExit(){ device.setColors(0, frame, function(err, frame) { device.turnOff(); process.exit(0); - }); //Turn off LEDs + }); //Turn off LEDs } if (!streaming && device){ @@ -256,5 +259,13 @@ var signature = function(){ produceFrame(frame); }; -setOnFrame(signature); +function init(){ + setSize(8); + setProducerFramerate(20); + setConsumerFramerate(60); + setAlpha(0.1); + setOnFrame(signature); +} + +init(); From 1760c67021be9ed8b322558470275a899a406d0a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 22:36:13 -0500 Subject: [PATCH 284/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 77c6bfc3..caf6773e 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -1,6 +1,12 @@ //Aurora Borealis ambience based on flex_stream.js //For Windows, Linux and Mac +module.exports = { + init: function() { + init(); + } +} + const os = require("os"); const flex_stream = require("./flex_stream.js"); @@ -15,7 +21,7 @@ function unicorn() { var off = 0; var amp = 150; var frame = flex_stream.newFrame(); - + for (i=0; i Date: Sat, 6 Jan 2018 22:36:45 -0500 Subject: [PATCH 285/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 727228a6..25f1fc71 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -38,5 +38,6 @@ app.get('/', function (req, res) { }) var port = process.env.PORT || 5000; + app.listen(port, function() { }); \ No newline at end of file From 464ef801e6c503134a606a21287f4e0c4fb6b5fe Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 22:40:22 -0500 Subject: [PATCH 286/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e6ccb5d7..3d3ef54e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -166,6 +166,7 @@ function morphFrame(current) function setOnFrame(fn) { + clearFrame(composite); onFrame = fn; } From 149d1e39de5df77d1d9d5e7a9c23f4b757a0bcb4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 22:41:12 -0500 Subject: [PATCH 287/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 3d3ef54e..4bbcb43f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -113,8 +113,9 @@ function newFrame(){ //Create an empty frame function clearFrame(frame){ - for (i=0; i Date: Sat, 6 Jan 2018 22:54:38 -0500 Subject: [PATCH 288/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 4bbcb43f..d3b3a4ed 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -86,7 +86,7 @@ var busy = false; //Semaphore //Stream Producer function producer(){ onFrame(); //Call user defined function - setTimeout(producer, 1000/producer_framerate); + setTimeout(producer, 1000/producer_framerate); } //Stream Consumer @@ -167,7 +167,6 @@ function morphFrame(current) function setOnFrame(fn) { - clearFrame(composite); onFrame = fn; } From c0e035259a4a09ac584e994e62a8d0ab34874e86 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 22:58:37 -0500 Subject: [PATCH 289/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index d3b3a4ed..274b6de2 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -167,6 +167,7 @@ function morphFrame(current) function setOnFrame(fn) { + clearFrame(composite); onFrame = fn; } From 0571025a288ffe753bd1db951ebcfdde2dfe8e4d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:00:32 -0500 Subject: [PATCH 290/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 74995421..8eb5464e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -72,6 +72,11 @@ function init(){ flex_stream.setConsumerFramerate(consumer_framerate); flex_stream.setAlpha(alpha); flex_stream.setOnFrame(cpuMeter); + startMeasure = cpuLoad(); + percentageCPU = 0; + cpu_avg = 0; + pos = 1; + speed = 1; } init(); From c05ae09437f4152188b4c9bc196cd876221dfe54 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:01:36 -0500 Subject: [PATCH 291/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 274b6de2..9c9b8ac4 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -267,6 +267,7 @@ function init(){ setConsumerFramerate(60); setAlpha(0.1); setOnFrame(signature); + pos = 0; } init(); From 731179d0a1b7ff8e09c001e493fc08e49b0e95c2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:28:52 -0500 Subject: [PATCH 292/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 25f1fc71..eea47489 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -1,5 +1,6 @@ //Very simple server to switch between examples // http://localhost:5000/?example=name + const flex_stream = require("./flex_stream.js"); const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); From 615ad6a4636ff974e431e06fcfbdfcd9378f9139 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:34:02 -0500 Subject: [PATCH 293/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index eea47489..578bc95b 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -1,13 +1,16 @@ //Very simple server to switch between examples -// http://localhost:5000/?example=name +//eg. curl http://localhost:5000/?example=name +//Last included example (eg. cpu_meter) is started. +//Default is the flex stream signature +const express = require('express'); const flex_stream = require("./flex_stream.js"); const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); const cpu_meter = require("./cpu_meter.js"); -const express = require('express'); + var app = express() From d1bf246b61694478127ee5b8ee233cfb9b62586e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:36:35 -0500 Subject: [PATCH 294/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 578bc95b..52aa5ce5 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -35,7 +35,8 @@ app.get('/', function (req, res) { break; default: flex_stream.init(); - example = "default" + example = "default" + break; } res.send("Example is set to " + example); From 6d4787ddfdcba0de0953944df4a15214ed692001 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:36:46 -0500 Subject: [PATCH 295/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 52aa5ce5..1b1b4fb4 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -36,7 +36,6 @@ app.get('/', function (req, res) { default: flex_stream.init(); example = "default" - break; } res.send("Example is set to " + example); From be7ca70a5b2d65bb2befcd5459e535a7cd11e8d5 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:38:38 -0500 Subject: [PATCH 296/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 1b1b4fb4..8467898b 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -1,6 +1,5 @@ //Very simple server to switch between examples //eg. curl http://localhost:5000/?example=name -//Last included example (eg. cpu_meter) is started. //Default is the flex stream signature const express = require('express'); @@ -11,7 +10,6 @@ const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); const cpu_meter = require("./cpu_meter.js"); - var app = express() app.get('/', function (req, res) { @@ -44,4 +42,6 @@ app.get('/', function (req, res) { var port = process.env.PORT || 5000; app.listen(port, function() { -}); \ No newline at end of file +}); + +flex_stream.init(); \ No newline at end of file From 1f5942db2810ed5baa4393aef5a2f40295eb69e8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:45:02 -0500 Subject: [PATCH 297/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 8467898b..f29d4b5f 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -44,4 +44,5 @@ var port = process.env.PORT || 5000; app.listen(port, function() { }); -flex_stream.init(); \ No newline at end of file +//Start cpu meter example +cpu_meter.init(); \ No newline at end of file From c0911fd335612c2bc0c45b4536d095335f471ab6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:51:22 -0500 Subject: [PATCH 298/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index f29d4b5f..72d07b1a 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -45,4 +45,4 @@ app.listen(port, function() { }); //Start cpu meter example -cpu_meter.init(); \ No newline at end of file +unicorn.init(); \ No newline at end of file From ee055578f06861376f0e5c8035a71d407915edeb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:52:39 -0500 Subject: [PATCH 299/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index 72d07b1a..d636b808 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -42,7 +42,5 @@ app.get('/', function (req, res) { var port = process.env.PORT || 5000; app.listen(port, function() { + unicorn.init(); }); - -//Start cpu meter example -unicorn.init(); \ No newline at end of file From fef1ee67846cfd11b833ba3dec4569ebad0cd1b2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sat, 6 Jan 2018 23:54:34 -0500 Subject: [PATCH 300/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_server.js index d636b808..d5ae3a70 100644 --- a/examples/flex_stream/flex_server.js +++ b/examples/flex_stream/flex_server.js @@ -8,7 +8,7 @@ const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); -const cpu_meter = require("./cpu_meter.js"); +const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() @@ -42,5 +42,4 @@ app.get('/', function (req, res) { var port = process.env.PORT || 5000; app.listen(port, function() { - unicorn.init(); }); From fc654fc464889a48633759909a3361e4c8de37c1 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:01:30 -0500 Subject: [PATCH 301/581] Signed-off-by: dcerisano --- examples/flex_stream/{flex_server.js => flex_stream_webserver.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/flex_stream/{flex_server.js => flex_stream_webserver.js} (100%) diff --git a/examples/flex_stream/flex_server.js b/examples/flex_stream/flex_stream_webserver.js similarity index 100% rename from examples/flex_stream/flex_server.js rename to examples/flex_stream/flex_stream_webserver.js From 5fbfbf782205bcf69c369ae135b08d637056a35f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:22:11 -0500 Subject: [PATCH 302/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 8eb5464e..f99b716e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -67,10 +67,10 @@ function cpuLoad() { //Configure stream function init(){ - flex_stream.setSize(size); - flex_stream.setProducerFramerate(producer_framerate); - flex_stream.setConsumerFramerate(consumer_framerate); - flex_stream.setAlpha(alpha); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(30); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(0.3); flex_stream.setOnFrame(cpuMeter); startMeasure = cpuLoad(); percentageCPU = 0; From 9c63933c1f8cd006d24e16ae49af7809c0cccd9a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:22:44 -0500 Subject: [PATCH 303/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index f75fdd76..17401674 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -33,10 +33,10 @@ function ambilight(){ //Configure stream function init(){ - flex_stream.setSize(size); - flex_stream.setProducerFramerate(producer_framerate); - flex_stream.setConsumerFramerate(consumer_framerate); - flex_stream.setAlpha(alpha); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(5); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(0.1); flex_stream.setOnFrame(ambilight); } From 7c93c72164fe45b9134c4dde1078df196e81465a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:24:15 -0500 Subject: [PATCH 304/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 8 ++++---- examples/flex_stream/cpu_meter.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 17401674..f75fdd76 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -33,10 +33,10 @@ function ambilight(){ //Configure stream function init(){ - flex_stream.setSize(8); - flex_stream.setProducerFramerate(5); - flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.1); + flex_stream.setSize(size); + flex_stream.setProducerFramerate(producer_framerate); + flex_stream.setConsumerFramerate(consumer_framerate); + flex_stream.setAlpha(alpha); flex_stream.setOnFrame(ambilight); } diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index f99b716e..8eb5464e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -67,10 +67,10 @@ function cpuLoad() { //Configure stream function init(){ - flex_stream.setSize(8); - flex_stream.setProducerFramerate(30); - flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.3); + flex_stream.setSize(size); + flex_stream.setProducerFramerate(producer_framerate); + flex_stream.setConsumerFramerate(consumer_framerate); + flex_stream.setAlpha(alpha); flex_stream.setOnFrame(cpuMeter); startMeasure = cpuLoad(); percentageCPU = 0; From 8bf66680b55cfb11d82a3e94493e3bdf9493e226 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:26:49 -0500 Subject: [PATCH 305/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 8eb5464e..f99b716e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -67,10 +67,10 @@ function cpuLoad() { //Configure stream function init(){ - flex_stream.setSize(size); - flex_stream.setProducerFramerate(producer_framerate); - flex_stream.setConsumerFramerate(consumer_framerate); - flex_stream.setAlpha(alpha); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(30); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(0.3); flex_stream.setOnFrame(cpuMeter); startMeasure = cpuLoad(); percentageCPU = 0; From e9b87d599921a865a512be737d76c76139b429ee Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:27:19 -0500 Subject: [PATCH 306/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index f75fdd76..17401674 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -33,10 +33,10 @@ function ambilight(){ //Configure stream function init(){ - flex_stream.setSize(size); - flex_stream.setProducerFramerate(producer_framerate); - flex_stream.setConsumerFramerate(consumer_framerate); - flex_stream.setAlpha(alpha); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(5); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(0.1); flex_stream.setOnFrame(ambilight); } From 79cae5618d1d7c6018caea083a020b032edd04eb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:28:30 -0500 Subject: [PATCH 307/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 17401674..5a8c3804 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -16,15 +16,11 @@ const flex_stream = require("./flex_stream.js"); const screenshot = require('screenshot-desktop'); //Available at npmjs.com const sharp = require('sharp'); //Available at npmjs.com -var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 5; // Low sample rate (5 fps = 200ms lag) to reduce CPU overhead -var consumer_framerate = 60; // High render rate for smooth morphing/interlacing -var alpha = 0.1 // 15% opacity for smooth morphing/interlacing //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function ambilight(){ screenshot().then((img) => { - sharp(img).resize(size,1).ignoreAspectRatio().raw().toBuffer().then(data => { + sharp(img).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { flex_stream.produceFrame(data); }) }); From 96f6be4e3fe9c105f1d9a0ca01f8c152a18d27b4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:29:28 -0500 Subject: [PATCH 308/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 2af785d9..5f0ab4f2 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,9 +10,6 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); -var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 30; // Varies -var consumer_framerate = 60; // High fps for morphing var alpha = 0; // Varies function aurora() { @@ -45,10 +42,10 @@ function aurora() { //Configure stream function init(){ - flex_stream.setSize(size); - flex_stream.setProducerFramerate(producer_framerate); - flex_stream.setConsumerFramerate(consumer_framerate); - flex_stream.setAlpha(alpha); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(30); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(1); flex_stream.setOnFrame(aurora); } From 4890822356467c20f8dcfed0f6976d812a3dcec9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:35:07 -0500 Subject: [PATCH 309/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 +--- examples/flex_stream/cpu_meter.js | 11 ++++------- examples/flex_stream/fireplace.js | 15 +++++---------- examples/flex_stream/unicorn.js | 11 +++++------ 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 5f0ab4f2..278390f3 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,8 +10,6 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); -var alpha = 0; // Varies - function aurora() { //Aurora @@ -21,7 +19,7 @@ function aurora() { var frame = flex_stream.newFrame(); - for (i=0; i=size-1) + if (pos<=0 || pos>=flex_stream.getSize()-1) speed =-speed; pos += speed; @@ -44,7 +41,7 @@ function cpuMeter() { frame[pos*3+1] = 100-Math.floor(cpu_avg); //G frame[pos*3+2] = 2; //B - flex_stream.setProducerFramerate(producer_framerate); + flex_stream.setProducerFramerate(framerate); flex_stream.produceFrame(frame); } diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index cccf2710..a6dcc629 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -4,11 +4,6 @@ const os = require("os"); const flex_stream = require("./flex_stream.js"); -var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 15; // Varies -var consumer_framerate = 60; // High fps for morphing -var alpha = 0; // Varies - module.exports = { init: function() { init(); @@ -17,7 +12,7 @@ module.exports = { function fireplace() { var frame = flex_stream.newFrame(); - for (i=0; i Date: Sun, 7 Jan 2018 00:37:56 -0500 Subject: [PATCH 310/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 278390f3..7508e77b 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -43,7 +43,7 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); + flex_stream.setAlpha(0.01); flex_stream.setOnFrame(aurora); } From a0a2661d00c487f7ff1d3481f4d5d9782629d33a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 00:39:07 -0500 Subject: [PATCH 311/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 87499037..e27f00ff 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -10,10 +10,7 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); -var size = 8; // Default 8, maximum 64 (single BlickStick channel) -var producer_framerate = 4; // slow -var consumer_framerate = 60; // High fps for morphing -var alpha = 0.05; // slow + function unicorn() { // Unicorn rainbow happy joy @@ -40,7 +37,7 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(4); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); + flex_stream.setAlpha(0.05); flex_stream.setOnFrame(unicorn); } From ca7dbc46134f99f421071b88c74c1bfae32b896d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 01:04:21 -0500 Subject: [PATCH 312/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index d99eb22d..0221e745 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -23,11 +23,15 @@ function cpuMeter() { var endMeasure = cpuLoad(); var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; + startMeasure = endMeasure; - //Vary the producer framerate by percentage CPU load (10 to 60 fps) - percentageCPU = 100 - (100 * idleDifference / totalDifference); + if (totalDifference != 0) + percentageCPU = 100 - (100 * idleDifference / totalDifference); + cpu_avg = (cpu_avg+percentageCPU)/2; + + //Vary the producer framerate by percentage CPU load (10 to 60 fps) framerate = cpu_avg*0.50+10; //Bounce particle off edges of LED strip From e3d61750d252453a9d33c2af5a873d2fb550a90a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 01:13:35 -0500 Subject: [PATCH 313/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 0221e745..b99720a2 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -24,15 +24,15 @@ function cpuMeter() { var idleDifference = endMeasure.idle - startMeasure.idle; var totalDifference = endMeasure.total - startMeasure.total; - startMeasure = endMeasure; + startMeasure = endMeasure; if (totalDifference != 0) - percentageCPU = 100 - (100 * idleDifference / totalDifference); + percentageCPU = 100 - (100 * idleDifference / totalDifference); - cpu_avg = (cpu_avg+percentageCPU)/2; + cpu_avg = (cpu_avg+percentageCPU)/2; //Vary the producer framerate by percentage CPU load (10 to 60 fps) - framerate = cpu_avg*0.50+10; + framerate = cpu_avg*0.50+10; //Bounce particle off edges of LED strip if (pos<=0 || pos>=flex_stream.getSize()-1) From ec52260945f7711e97d08ac236d82f1452da9790 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 01:26:04 -0500 Subject: [PATCH 314/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index d5ae3a70..102b669d 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -1,5 +1,5 @@ //Very simple server to switch between examples -//eg. curl http://localhost:5000/?example=name +//eg. http://localhost:5000/?example=name //Default is the flex stream signature const express = require('express'); From b375d6fb0aebff5337e3ba4cd789cee6f8f4704a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 01:44:04 -0500 Subject: [PATCH 315/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 5a8c3804..9e27d51c 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -29,11 +29,13 @@ function ambilight(){ //Configure stream function init(){ + flex_stream.stop(); flex_stream.setSize(8); flex_stream.setProducerFramerate(5); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.1); flex_stream.setOnFrame(ambilight); + flex_stream.start(); } init(); From 3de19b3d513e68d638e97fd4c5f19821b17a5a6b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 02:02:39 -0500 Subject: [PATCH 316/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 9e27d51c..5a8c3804 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -29,13 +29,11 @@ function ambilight(){ //Configure stream function init(){ - flex_stream.stop(); flex_stream.setSize(8); flex_stream.setProducerFramerate(5); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.1); flex_stream.setOnFrame(ambilight); - flex_stream.start(); } init(); From 573cfcffd80045b184f0f79a6582fbf70f68af34 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:06:15 -0500 Subject: [PATCH 317/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 7508e77b..9cfc6e5b 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -21,9 +21,9 @@ function aurora() { for (i=0; i.9) { From 1de152dfc2ca8e3d59f82566532b30422b9288ce Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:09:52 -0500 Subject: [PATCH 318/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 9cfc6e5b..47283a12 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,6 +10,8 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); + +var frame = flex_stream.newFrame(); function aurora() { //Aurora @@ -17,15 +19,15 @@ function aurora() { flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); - var frame = flex_stream.newFrame(); + for (i=0; i.9) + if (Math.random()>.5) { r=0; g=0; b=0; } From 134faeffa2a049eaebd102aef4651d5081c026b7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:10:11 -0500 Subject: [PATCH 319/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 47283a12..f6a99650 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -13,14 +13,11 @@ const flex_stream = require("./flex_stream.js"); var frame = flex_stream.newFrame(); function aurora() { - //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); - - for (i=0; i Date: Sun, 7 Jan 2018 04:12:01 -0500 Subject: [PATCH 320/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index f6a99650..c0f56ad4 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -39,9 +39,9 @@ function aurora() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(30); + flex_stream.setProducerFramerate(15); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.01); + flex_stream.setAlpha(0.001); flex_stream.setOnFrame(aurora); } From 7a3d632d0c0063da99789fe7d5e069552e6fce4f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:15:00 -0500 Subject: [PATCH 321/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index c0f56ad4..d0728a47 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,7 +10,7 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); - + var frame = flex_stream.newFrame(); function aurora() { //Aurora @@ -26,11 +26,10 @@ function aurora() { //Borealis if (Math.random()>.5) { - r=0; g=0; b=0; + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B } - frame[i*3+0] = Math.floor(r); //R - frame[i*3+1] = Math.floor(g); //G - frame[i*3+2] = Math.floor(b); //B } flex_stream.produceFrame(frame); } From 93dc7fad8e1d48141d911af1dcd25a7c64c886ab Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:15:29 -0500 Subject: [PATCH 322/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index d0728a47..19daa0e6 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -38,7 +38,7 @@ function aurora() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(15); + flex_stream.setProducerFramerate(1); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.001); flex_stream.setOnFrame(aurora); From 79a87418c76a639af780365905c5c6b02f417af8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:16:49 -0500 Subject: [PATCH 323/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 19daa0e6..cd3f383c 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.001+(a/100)); + flex_stream.setAlpha(.0001+(a/100)); for (i=0; i Date: Sun, 7 Jan 2018 04:18:26 -0500 Subject: [PATCH 324/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index cd3f383c..dee9decf 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -15,8 +15,6 @@ var frame = flex_stream.newFrame(); function aurora() { //Aurora a = Math.random(); - flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.0001+(a/100)); for (i=0; i Date: Sun, 7 Jan 2018 04:19:15 -0500 Subject: [PATCH 325/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index dee9decf..e8d43f18 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -38,7 +38,7 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(1); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.001); + flex_stream.setAlpha(0.0001); flex_stream.setOnFrame(aurora); } From 0eba16d2241e1348c8504bfd256e85cee5dda7c9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:20:17 -0500 Subject: [PATCH 326/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index e8d43f18..8c7299e7 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -38,7 +38,7 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(1); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.0001); + flex_stream.setAlpha(0.00001); flex_stream.setOnFrame(aurora); } From 1e6e3477f4766f5f2527bcf8409f47df96f82691 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:21:57 -0500 Subject: [PATCH 327/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 8c7299e7..c2646527 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,7 +22,7 @@ function aurora() { var g = (1-Math.random()*.85)*50; var b = (1-Math.random()*.85)*100; //Borealis - if (Math.random()>.5) + if (Math.random()>.9) { frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G @@ -36,7 +36,7 @@ function aurora() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(1); + flex_stream.setProducerFramerate(2); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.00001); flex_stream.setOnFrame(aurora); From 7108fc65bfef31a5358ff7fc5605403305880a47 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:22:07 -0500 Subject: [PATCH 328/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index c2646527..05691253 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -36,7 +36,7 @@ function aurora() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(2); + flex_stream.setProducerFramerate(1); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.00001); flex_stream.setOnFrame(aurora); From ad951e77b6ff73b361c3446dd4ace974e862cbb3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:23:40 -0500 Subject: [PATCH 329/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 05691253..35a7a077 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,7 +22,7 @@ function aurora() { var g = (1-Math.random()*.85)*50; var b = (1-Math.random()*.85)*100; //Borealis - if (Math.random()>.9) + if (Math.random()>.99) { frame[i*3+0] = Math.floor(r); //R frame[i*3+1] = Math.floor(g); //G @@ -36,7 +36,7 @@ function aurora() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(1); + flex_stream.setProducerFramerate(5); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.00001); flex_stream.setOnFrame(aurora); From 9ae2c654d7200026e70670bd059cc5068e2ce88e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:26:37 -0500 Subject: [PATCH 330/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 35a7a077..34c81e7f 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,24 +10,28 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); - + var frame = flex_stream.newFrame(); function aurora() { //Aurora a = Math.random(); - + flex_stream.setProducerFramerate(a*2+1); + flex_stream.setAlpha(.001+(a/100)); + + //Borealis for (i=0; i.99) + + if (Math.random()>.5) { - frame[i*3+0] = Math.floor(r); //R - frame[i*3+1] = Math.floor(g); //G - frame[i*3+2] = Math.floor(b); //B + r=0; g=0; b=0; } + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B } flex_stream.produceFrame(frame); } @@ -36,9 +40,9 @@ function aurora() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(5); + flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.00001); + flex_stream.setAlpha(1); flex_stream.setOnFrame(aurora); } From aef2bc3e483408dea1ee1ce6bd70a788a6c1f128 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:28:21 -0500 Subject: [PATCH 331/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 34c81e7f..02ab0055 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -10,28 +10,33 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); - + var frame = flex_stream.newFrame(); function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/100)); - - //Borealis + + //Borealis for (i=0; i.5) { r=0; g=0; b=0; } - frame[i*3+0] = Math.floor(r); //R - frame[i*3+1] = Math.floor(g); //G - frame[i*3+2] = Math.floor(b); //B + + if (Math.random()>.5) + { + frame[i*3+0] = Math.floor(r); //R + frame[i*3+1] = Math.floor(g); //G + frame[i*3+2] = Math.floor(b); //B + } } flex_stream.produceFrame(frame); } From d27f0ce7a610fa59e13f2e0b0fe6ed7263894885 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 04:29:10 -0500 Subject: [PATCH 332/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 02ab0055..603042a2 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.001+(a/100)); + flex_stream.setAlpha(.0001+(a/1000)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 04:34:01 -0500 Subject: [PATCH 333/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 603042a2..aae60d0c 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,8 +22,8 @@ function aurora() { for (i=0; i.5) From 56a758114e21dadf84b955a3e3ba5a8f5110de5b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:04:38 -0500 Subject: [PATCH 334/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 9c9b8ac4..25497663 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -82,11 +82,13 @@ var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause var busy = false; //Semaphore +var producer_timer = null; +var consumer_timer = null; //Stream Producer function producer(){ onFrame(); //Call user defined function - setTimeout(producer, 1000/producer_framerate); + setTimeout(producer, 1000/producer_framerate); } //Stream Consumer @@ -179,6 +181,9 @@ var onFrame = function(){}; function setProducerFramerate(framerate) { producer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 50 fps + if (producer_timer != null) + clearTimeout(producer_timer); + setTimeout(producer, 1000/producer_framerate); } function getProducerFramerate() @@ -189,6 +194,9 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps + if (consumer_timer != null) + clearTimeout(consumer_timer); + setTimeout(consumer, 1000/consumer_framerate); } function getConsumerFramerate() @@ -241,12 +249,6 @@ function onExit(){ }); //Turn off LEDs } -if (!streaming && device){ - producer(); - consumer(); - streaming = true; -} - //Default signature animation var pos = 0; var signature = function(){ @@ -270,5 +272,7 @@ function init(){ pos = 0; } -init(); - +if (!streaming && device){ + init(); + streaming = true; +} From 3b77d970204facadb1c4d20574881932ab3e2d29 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:09:04 -0500 Subject: [PATCH 335/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 25497663..9c9b8ac4 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -82,13 +82,11 @@ var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause var busy = false; //Semaphore -var producer_timer = null; -var consumer_timer = null; //Stream Producer function producer(){ onFrame(); //Call user defined function - setTimeout(producer, 1000/producer_framerate); + setTimeout(producer, 1000/producer_framerate); } //Stream Consumer @@ -181,9 +179,6 @@ var onFrame = function(){}; function setProducerFramerate(framerate) { producer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 50 fps - if (producer_timer != null) - clearTimeout(producer_timer); - setTimeout(producer, 1000/producer_framerate); } function getProducerFramerate() @@ -194,9 +189,6 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps - if (consumer_timer != null) - clearTimeout(consumer_timer); - setTimeout(consumer, 1000/consumer_framerate); } function getConsumerFramerate() @@ -249,6 +241,12 @@ function onExit(){ }); //Turn off LEDs } +if (!streaming && device){ + producer(); + consumer(); + streaming = true; +} + //Default signature animation var pos = 0; var signature = function(){ @@ -272,7 +270,5 @@ function init(){ pos = 0; } -if (!streaming && device){ - init(); - streaming = true; -} +init(); + From 52050a012ff643e02bb9d0d1117aff6c3b5da3fa Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:14:29 -0500 Subject: [PATCH 336/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 9c9b8ac4..1b35dd80 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -82,17 +82,19 @@ var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause var busy = false; //Semaphore +var producer_timer = null; +var conusmer_timer = null; //Stream Producer function producer(){ onFrame(); //Call user defined function - setTimeout(producer, 1000/producer_framerate); + producer_timer = setTimeout(producer, 1000/producer_framerate); } //Stream Consumer function consumer(){ consumeFrame(); //Render frame to BlinkStick - setTimeout(consumer, 1000/consumer_framerate); + conumser_timer = setTimeout(consumer, 1000/consumer_framerate); } //Convert to internal BlinkStick buffer @@ -169,6 +171,14 @@ function setOnFrame(fn) { clearFrame(composite); onFrame = fn; + + if (producer_timer != null) + clearTimeout(producer_timer); + producer_timer = setTimeout(producer, 1000/producer_framerate); + + if (consumer_timer != null) + clearTimeout(consumer_timer); + consumer_timer = setTimeout(consumer, 1000/consumer_framerate); } From 940b45cb9d0fafb51f442f3c71174667fbc16842 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:15:52 -0500 Subject: [PATCH 337/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 1b35dd80..29babc0b 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -251,12 +251,6 @@ function onExit(){ }); //Turn off LEDs } -if (!streaming && device){ - producer(); - consumer(); - streaming = true; -} - //Default signature animation var pos = 0; var signature = function(){ @@ -278,6 +272,8 @@ function init(){ setAlpha(0.1); setOnFrame(signature); pos = 0; + + start(); } init(); From 88236427aa249e18e1dd02785ac0310e582cad32 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:17:51 -0500 Subject: [PATCH 338/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 29babc0b..9c0036f6 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -94,7 +94,7 @@ function producer(){ //Stream Consumer function consumer(){ consumeFrame(); //Render frame to BlinkStick - conumser_timer = setTimeout(consumer, 1000/consumer_framerate); + consumer_timer = setTimeout(consumer, 1000/consumer_framerate); } //Convert to internal BlinkStick buffer @@ -171,11 +171,11 @@ function setOnFrame(fn) { clearFrame(composite); onFrame = fn; - + if (producer_timer != null) clearTimeout(producer_timer); producer_timer = setTimeout(producer, 1000/producer_framerate); - + if (consumer_timer != null) clearTimeout(consumer_timer); consumer_timer = setTimeout(consumer, 1000/consumer_framerate); @@ -272,7 +272,7 @@ function init(){ setAlpha(0.1); setOnFrame(signature); pos = 0; - + start(); } From c464cf1fd99cac0e9a0f4a0a678c9e60567adbb7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:18:21 -0500 Subject: [PATCH 339/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 9c0036f6..7e3ba25d 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -83,7 +83,7 @@ var currentFrame = null; //Latest frame from stream var streaming = false; //Pause var busy = false; //Semaphore var producer_timer = null; -var conusmer_timer = null; +var consumer_timer = null; //Stream Producer function producer(){ From 3ea468db7d1863bf0ab18403564c4e9e770244c4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:20:32 -0500 Subject: [PATCH 340/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index aae60d0c..ce9d3dbc 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.0001+(a/1000)); + flex_stream.setAlpha(.001+(a/100)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:22:23 -0500 Subject: [PATCH 341/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ce9d3dbc..e655a7f8 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.001+(a/100)); + flex_stream.setAlpha(.01+(a/10)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:24:00 -0500 Subject: [PATCH 342/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index e655a7f8..ce9d3dbc 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.01+(a/10)); + flex_stream.setAlpha(.001+(a/100)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:25:21 -0500 Subject: [PATCH 343/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ce9d3dbc..e6ace676 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.001+(a/100)); + flex_stream.setAlpha(.005+(a/20)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:26:55 -0500 Subject: [PATCH 344/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index e6ace676..ed93b995 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -15,15 +15,15 @@ var frame = flex_stream.newFrame(); function aurora() { //Aurora a = Math.random(); - flex_stream.setProducerFramerate(a*2+1); + flex_stream.setProducerFramerate(a*4+2); flex_stream.setAlpha(.005+(a/20)); //Borealis for (i=0; i.5) From 266b294d797975b444ce443ae7e6d51272bf599b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:27:38 -0500 Subject: [PATCH 345/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ed93b995..f041285b 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*4+2); - flex_stream.setAlpha(.005+(a/20)); + flex_stream.setAlpha(.0025+(a/40)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:27:55 -0500 Subject: [PATCH 346/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index f041285b..05f160db 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,9 +22,9 @@ function aurora() { for (i=0; i.5) { From 18f38c3d6013e83e19f92f5291c1306f22121797 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:28:43 -0500 Subject: [PATCH 347/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 05f160db..354d6cf8 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*4+2); - flex_stream.setAlpha(.0025+(a/40)); + flex_stream.setAlpha(.001+(a/100)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:29:53 -0500 Subject: [PATCH 348/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 354d6cf8..3780f9f0 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*4+2); - flex_stream.setAlpha(.001+(a/100)); + flex_stream.setAlpha(.001+(a/50)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:30:39 -0500 Subject: [PATCH 349/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 3780f9f0..68b5eca6 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -15,7 +15,7 @@ var frame = flex_stream.newFrame(); function aurora() { //Aurora a = Math.random(); - flex_stream.setProducerFramerate(a*4+2); + flex_stream.setProducerFramerate(a*2+1); flex_stream.setAlpha(.001+(a/50)); //Borealis From 7c7b0a430ea6ac414da4ad47c24dadcc2943a540 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:31:41 -0500 Subject: [PATCH 350/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 68b5eca6..48449c34 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,11 +22,11 @@ function aurora() { for (i=0; i.5) + if (Math.random()>.75) { r=0; g=0; b=0; } From 6e9fd6b27f915fb4bb7db5bdbdef51b394886247 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:32:47 -0500 Subject: [PATCH 351/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 48449c34..9ecd7079 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,9 +22,9 @@ function aurora() { for (i=0; i.75) { From 54a768238eb5a4e331b57759545083b845348c82 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:33:41 -0500 Subject: [PATCH 352/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 9ecd7079..ade4ce67 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*2+1); - flex_stream.setAlpha(.001+(a/50)); + flex_stream.setAlpha(.001+(a/100)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 16:34:05 -0500 Subject: [PATCH 353/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index ade4ce67..4d6da25a 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,9 +22,9 @@ function aurora() { for (i=0; i.75) { From 553e3272388d98be024da22bc9573d14feef149a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:35:02 -0500 Subject: [PATCH 354/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 4d6da25a..7b9b5cb2 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -22,8 +22,8 @@ function aurora() { for (i=0; i.75) From 1d66006474765264635556ba75385992f6a84dda Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:41:14 -0500 Subject: [PATCH 355/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 7e3ba25d..9df07572 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -170,6 +170,8 @@ function morphFrame(current) function setOnFrame(fn) { clearFrame(composite); + stream_buffer.push(composite); + onFrame = fn; if (producer_timer != null) @@ -179,6 +181,7 @@ function setOnFrame(fn) if (consumer_timer != null) clearTimeout(consumer_timer); consumer_timer = setTimeout(consumer, 1000/consumer_framerate); + } @@ -228,7 +231,8 @@ function getAlpha() function start() { - streaming = true; + if (device) + streaming = true; } function stop() @@ -272,7 +276,6 @@ function init(){ setAlpha(0.1); setOnFrame(signature); pos = 0; - start(); } From 65b40921335e68f945a9cd7e03db4ea9a5182424 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:42:04 -0500 Subject: [PATCH 356/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 9df07572..0984c73c 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -181,7 +181,6 @@ function setOnFrame(fn) if (consumer_timer != null) clearTimeout(consumer_timer); consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - } From d5495738017931ff2c722d9f6ecddfe364ac097c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:42:59 -0500 Subject: [PATCH 357/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 0984c73c..4395c1a9 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -170,8 +170,6 @@ function morphFrame(current) function setOnFrame(fn) { clearFrame(composite); - stream_buffer.push(composite); - onFrame = fn; if (producer_timer != null) From 8fcd0ef05ff6e2fd08939efa1b08d5686acb3ef6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:45:09 -0500 Subject: [PATCH 358/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 4395c1a9..b5cb3283 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -169,7 +169,7 @@ function morphFrame(current) function setOnFrame(fn) { - clearFrame(composite); + onFrame = fn; if (producer_timer != null) From b99ec63ccacc839c889b295a28cb87043779d51d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:52:20 -0500 Subject: [PATCH 359/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index b5cb3283..09f5f510 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -56,6 +56,14 @@ module.exports = { { return getSize(); }, + setCrossFade: function(fade) + { + crossFade = fade; + }, + getCrossFade: function() + { + return crossFade; + }, start: function(size) { start(); @@ -82,6 +90,7 @@ var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause var busy = false; //Semaphore +var crossFade = false; //Hard or soft transitions. var producer_timer = null; var consumer_timer = null; @@ -169,7 +178,10 @@ function morphFrame(current) function setOnFrame(fn) { - + //Hard or soft transition + if (!crossFade) + clearFrame(composite); + onFrame = fn; if (producer_timer != null) From 21fea43c6de3e6ba537687425c65be2f2e7e9a45 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 16:55:10 -0500 Subject: [PATCH 360/581] Signed-off-by: dcerisano --- examples/flex_stream/fireplace.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index a6dcc629..408ea700 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -10,11 +10,13 @@ module.exports = { } } +var frame = flex_stream.newFrame(); + function fireplace() { - var frame = flex_stream.newFrame(); + for (i=0; i Date: Sun, 7 Jan 2018 17:11:14 -0500 Subject: [PATCH 361/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index e27f00ff..ab68ec5c 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -10,13 +10,12 @@ module.exports = { const os = require("os"); const flex_stream = require("./flex_stream.js"); - +var frame = flex_stream.newFrame(); function unicorn() { // Unicorn rainbow happy joy var off = 0; var amp = 150; - var frame = flex_stream.newFrame(); for (i=0; i Date: Sun, 7 Jan 2018 17:17:35 -0500 Subject: [PATCH 362/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 examples/flex_stream/timesquare.js diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js new file mode 100644 index 00000000..0a24359e --- /dev/null +++ b/examples/flex_stream/timesquare.js @@ -0,0 +1,43 @@ +//Times Square ambience based on flex_stream.js +//For Windows, Linux and Mac + +module.exports = { + init: function() { + init(); + } +} + +const os = require("os"); +const flex_stream = require("./flex_stream.js"); + +var frame = flex_stream.newFrame(); + +function unicorn() { + // Unicorn rainbow happy joy + var off = 0; + var amp = 150; + + frame.shift(); + + var r = Math.random()*amp+off; + var g = Math.random()*amp+off; + var b = Math.random()*amp+off; + + frame.push(Math.floor(r)); //R + frame.push(Math.floor(g)); //G + frame.push(Math.floor(b)); //B + + flex_stream.produceFrame(frame); +} + +//Configure stream + +function init(){ + flex_stream.setSize(8); + flex_stream.setProducerFramerate(4); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(0.05); + flex_stream.setOnFrame(unicorn); +} + +init(); From 07aa4ec6b461f6927d92aa9629d749e561bf0386 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:23:15 -0500 Subject: [PATCH 363/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 0a24359e..2a2bc36e 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -12,20 +12,20 @@ const flex_stream = require("./flex_stream.js"); var frame = flex_stream.newFrame(); -function unicorn() { - // Unicorn rainbow happy joy +function timesquare() { + // Scrolling ticker tape var off = 0; var amp = 150; - - frame.shift(); - var r = Math.random()*amp+off; var g = Math.random()*amp+off; var b = Math.random()*amp+off; - frame.push(Math.floor(r)); //R - frame.push(Math.floor(g)); //G - frame.push(Math.floor(b)); //B + if(frame !=null){ + frame.shift(); + frame.push(Math.floor(r)); //R + frame.push(Math.floor(g)); //G + frame.push(Math.floor(b)); //B + } flex_stream.produceFrame(frame); } @@ -37,7 +37,7 @@ function init(){ flex_stream.setProducerFramerate(4); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.05); - flex_stream.setOnFrame(unicorn); + flex_stream.setOnFrame(timesquare); } init(); From 65e83520d5295f8a4726e80d81dcb266abc4486c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:33:50 -0500 Subject: [PATCH 364/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 2a2bc36e..4df11358 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -19,14 +19,17 @@ function timesquare() { var r = Math.random()*amp+off; var g = Math.random()*amp+off; var b = Math.random()*amp+off; - - if(frame !=null){ - frame.shift(); - frame.push(Math.floor(r)); //R - frame.push(Math.floor(g)); //G - frame.push(Math.floor(b)); //B + var size = flex_stream.getSize(); + + for (i=1;i Date: Sun, 7 Jan 2018 17:34:49 -0500 Subject: [PATCH 365/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 4df11358..24b8acd4 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -37,9 +37,9 @@ function timesquare() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(4); + flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.05); + flex_stream.setAlpha(0.1); flex_stream.setOnFrame(timesquare); } From 9e887cb9d7f0d7329bc2c90c5250c557e26107c8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:35:43 -0500 Subject: [PATCH 366/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 24b8acd4..04808289 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -39,7 +39,7 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.1); + flex_stream.setAlpha(0.2); flex_stream.setOnFrame(timesquare); } From 4e5786a59428d9c6860362fb8375a04ce89e20c3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:36:42 -0500 Subject: [PATCH 367/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 04808289..45921de3 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -37,9 +37,9 @@ function timesquare() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(10); + flex_stream.setProducerFramerate(8); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.2); + flex_stream.setAlpha(0.1); flex_stream.setOnFrame(timesquare); } From 9c5dfe549eda077975e67afec44094672725c947 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:38:30 -0500 Subject: [PATCH 368/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 45921de3..2560683f 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -27,9 +27,15 @@ function timesquare() { frame[(i-1)*3+2] = frame[(i*3)+2]; } + if (Math.random()>.5){ + r = 0; g = 0; b = 0; + } + frame[(size-1)*3+0] = Math.floor(r); //R frame[(size-1)*3+1] = Math.floor(g); //G frame[(size-1)*3+2] = Math.floor(b); //B + + flex_stream.produceFrame(frame); } From d8a16cfc949ec361ae77163bec32dc6e2a475680 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:46:38 -0500 Subject: [PATCH 369/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 102b669d..59bbf698 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -8,6 +8,7 @@ const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); +const aurora = require("./timesquare.js"); const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() @@ -31,6 +32,9 @@ app.get('/', function (req, res) { case "ambilight": ambilight.init(); break; + case "timesquare": + timesquare.init(); + break; default: flex_stream.init(); example = "default" From 2f80da03532f1be2f3ab7ba8a1b31529d999842e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:48:16 -0500 Subject: [PATCH 370/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 59bbf698..ff38b02c 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -8,7 +8,7 @@ const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); -const aurora = require("./timesquare.js"); +const timesqaure = require("./timesquare.js"); const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() From 2de8492697a16b48bc19821df13ebe9fff1a7d35 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:49:04 -0500 Subject: [PATCH 371/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index ff38b02c..45a4b2e4 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -8,7 +8,7 @@ const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); -const timesqaure = require("./timesquare.js"); +const timesquare = require("./timesquare.js"); const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() From 193621e17c6283b0b5f71aa7968eee1b6ca0ecf3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:50:43 -0500 Subject: [PATCH 372/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 2560683f..52542c23 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -13,7 +13,7 @@ const flex_stream = require("./flex_stream.js"); var frame = flex_stream.newFrame(); function timesquare() { - // Scrolling ticker tape + // Scrolling random patterns var off = 0; var amp = 150; var r = Math.random()*amp+off; From 28eb40dde14c77f8a2dbe1527911b34466c95c10 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:51:46 -0500 Subject: [PATCH 373/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 52542c23..81ca4b9a 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -21,16 +21,19 @@ function timesquare() { var b = Math.random()*amp+off; var size = flex_stream.getSize(); + //Shift() not supported for Uint8Arrays for (i=1;i.5){ r = 0; g = 0; b = 0; } + //New random pixel frame[(size-1)*3+0] = Math.floor(r); //R frame[(size-1)*3+1] = Math.floor(g); //G frame[(size-1)*3+2] = Math.floor(b); //B From 5c8feec80841f0a5dd8d49f7661ff65bf63ceec6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 17:51:57 -0500 Subject: [PATCH 374/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 81ca4b9a..1f9e7a6e 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -21,7 +21,7 @@ function timesquare() { var b = Math.random()*amp+off; var size = flex_stream.getSize(); - //Shift() not supported for Uint8Arrays + //Shift() not supported for Uint8Arrays, so .. for (i=1;i Date: Sun, 7 Jan 2018 17:53:22 -0500 Subject: [PATCH 375/581] Signed-off-by: dcerisano --- examples/flex_stream/timesquare.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index 1f9e7a6e..e91b209c 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -28,17 +28,16 @@ function timesquare() { frame[(i-1)*3+2] = frame[(i*3)+2]; } - //Separator + // Random separators if (Math.random()>.5){ r = 0; g = 0; b = 0; } - //New random pixel + //Push() not supported for Uint8Arrays, so .. frame[(size-1)*3+0] = Math.floor(r); //R frame[(size-1)*3+1] = Math.floor(g); //G frame[(size-1)*3+2] = Math.floor(b); //B - flex_stream.produceFrame(frame); } From 8c76c799c5dcb07c9dbfe66e8cca2ce5057ed8b6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:02:41 -0500 Subject: [PATCH 376/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 45a4b2e4..e6caa892 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -1,5 +1,5 @@ //Very simple server to switch between examples -//eg. http://localhost:5000/?example=name +//eg. http://localhost:5000/?example=ambilight //Default is the flex stream signature const express = require('express'); From 72576251daffaee98c7e43894d24919ee570708c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:05:13 -0500 Subject: [PATCH 377/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 + examples/flex_stream/flex_stream_webserver.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 examples/flex_stream/flex_stream_webserver.html diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html new file mode 100644 index 00000000..a3c89544 --- /dev/null +++ b/examples/flex_stream/flex_stream_webserver.html @@ -0,0 +1 @@ +HEY THERE \ No newline at end of file diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index e6caa892..4488c780 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -40,7 +40,7 @@ app.get('/', function (req, res) { example = "default" } - res.send("Example is set to " + example); + res.sendfile('./flex_stream_webserver.html'); }) var port = process.env.PORT || 5000; From ee27eae753e4bfd846c93c770bf3634ed8d7eb83 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:05:57 -0500 Subject: [PATCH 378/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 4488c780..dade3935 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -40,7 +40,7 @@ app.get('/', function (req, res) { example = "default" } - res.sendfile('./flex_stream_webserver.html'); + res.sendfile('flex_stream_webserver.html'); }) var port = process.env.PORT || 5000; From 08325350cbaad8da90dce3b483e56b1664d5f817 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:07:59 -0500 Subject: [PATCH 379/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index dade3935..af0d0972 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -40,7 +40,7 @@ app.get('/', function (req, res) { example = "default" } - res.sendfile('flex_stream_webserver.html'); + res.sendfile( `${process.cwd()}/flex_stream_webserver.html`); }) var port = process.env.PORT || 5000; From b55c4daeb71191074d3c9856cd65aeef85e6b357 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:08:39 -0500 Subject: [PATCH 380/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index af0d0972..505cd83e 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -13,7 +13,7 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() -app.get('/', function (req, res) { +app.get('*', function (req, res) { var example = req.query.example; switch(example) { From 1673d552ee12146538ee2fbd1c8ed0a7aa732001 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:12:27 -0500 Subject: [PATCH 381/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 505cd83e..4dcdca2d 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -3,6 +3,7 @@ //Default is the flex stream signature const express = require('express'); +var path = require('path'); const flex_stream = require("./flex_stream.js"); const ambilight = require("./ambilight.js"); const unicorn = require("./unicorn.js"); @@ -40,7 +41,7 @@ app.get('*', function (req, res) { example = "default" } - res.sendfile( `${process.cwd()}/flex_stream_webserver.html`); + res.sendfile(path.join(__dirname + '/flex_stream_webserver.html')); }) var port = process.env.PORT || 5000; From 264304b01db186cfc39f92cba17d0dc5b920b535 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:15:53 -0500 Subject: [PATCH 382/581] Signed-off-by: dcerisano --- .../flex_stream/flex_stream_webserver.html | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index a3c89544..fd8fb180 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1 +1,25 @@ -HEY THERE \ No newline at end of file + + +Sample "Hello, World" Application + + + + + + + + +
+

Sample "Hello, World" Application

+
+ +

This is the home page for the HelloWorld Web application.

+

To prove that they work, you can execute either of the following + links: +

+ + + \ No newline at end of file From 114f94926095bc16aecae182644c3bd1814ec31e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:21:34 -0500 Subject: [PATCH 383/581] Signed-off-by: dcerisano --- .../flex_stream/flex_stream_webserver.html | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index fd8fb180..fc85885e 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,25 +1,35 @@ -Sample "Hello, World" Application +Flex Stream Examples + - - - - - - -
-

Sample "Hello, World" Application

-
- -

This is the home page for the HelloWorld Web application.

-

To prove that they work, you can execute either of the following - links:

- - \ No newline at end of file + + + + switch(example) { + case "cpu_meter": + cpu_meter.init(); + break; + case "aurora": + aurora.init(); + break; + case "unicorn": + unicorn.init(); + break; + case "fireplace": + fireplace.init(); + break; + case "ambilight": + ambilight.init(); + break; + case "timesquare": + timesquare.init(); + break; + default: + flex_stream.init(); + example = "default" \ No newline at end of file From e8708a340b17ff900ef7569850ca0599d2e2677a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:24:22 -0500 Subject: [PATCH 384/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index fc85885e..b87819df 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -5,7 +5,12 @@ From f89bb53b2d00de96d1d8fe454b3761b828210212 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:24:34 -0500 Subject: [PATCH 385/581] Signed-off-by: dcerisano --- .../flex_stream/flex_stream_webserver.html | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index b87819df..8a7e3a82 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -13,28 +13,4 @@
  • Aurora. - - - - switch(example) { - case "cpu_meter": - cpu_meter.init(); - break; - case "aurora": - aurora.init(); - break; - case "unicorn": - unicorn.init(); - break; - case "fireplace": - fireplace.init(); - break; - case "ambilight": - ambilight.init(); - break; - case "timesquare": - timesquare.init(); - break; - default: - flex_stream.init(); - example = "default" \ No newline at end of file + \ No newline at end of file From a58f09aeade270a6d2064cc05b66d9827198b1ed Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:26:34 -0500 Subject: [PATCH 386/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 8a7e3a82..84bf7c7a 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -4,13 +4,14 @@ +

    Flex Stream Examples

    \ No newline at end of file From fc06bc701c7f2f47d1a9d09d3c3306a31a1b5846 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:29:42 -0500 Subject: [PATCH 387/581] Signed-off-by: dcerisano --- .../flex_stream/flex_stream_webserver.html | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 84bf7c7a..88a4e74a 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -4,14 +4,16 @@ -

    Flex Stream Examples

    - + +

    Flex Stream Examples

    + +
    \ No newline at end of file From bac787f232c9677ad884f5b378cd9604ad3e3e0f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:31:09 -0500 Subject: [PATCH 388/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 88a4e74a..b0416a3e 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -13,6 +13,7 @@

    Flex Stream Examples

  • Fireplace
  • Unicorn
  • Aurora +
  • Default From 64f421f277f060f7bdbe9411a9a5660c020e1744 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:32:11 -0500 Subject: [PATCH 389/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 7b9b5cb2..e0d70230 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -15,7 +15,7 @@ var frame = flex_stream.newFrame(); function aurora() { //Aurora a = Math.random(); - flex_stream.setProducerFramerate(a*2+1); + flex_stream.setProducerFramerate(a*4+4); flex_stream.setAlpha(.001+(a/100)); //Borealis From 8dc6e315ecb69cfe3049b68bca51354b97a4e31f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:33:32 -0500 Subject: [PATCH 390/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index e0d70230..4493b7dc 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*4+4); - flex_stream.setAlpha(.001+(a/100)); + flex_stream.setAlpha(.0005+(a/200)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 18:34:39 -0500 Subject: [PATCH 391/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 4493b7dc..97b58f07 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*4+4); - flex_stream.setAlpha(.0005+(a/200)); + flex_stream.setAlpha(.001+(a/200)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 18:35:06 -0500 Subject: [PATCH 392/581] Signed-off-by: dcerisano --- examples/flex_stream/aurora.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 97b58f07..49959ef5 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -16,7 +16,7 @@ function aurora() { //Aurora a = Math.random(); flex_stream.setProducerFramerate(a*4+4); - flex_stream.setAlpha(.001+(a/200)); + flex_stream.setAlpha(.01+(a/200)); //Borealis for (i=0; i Date: Sun, 7 Jan 2018 18:36:44 -0500 Subject: [PATCH 393/581] Signed-off-by: dcerisano --- examples/flex_stream/unicorn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index ab68ec5c..190c0b21 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -34,9 +34,9 @@ function unicorn() { function init(){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(4); + flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.05); + flex_stream.setAlpha(0.1); flex_stream.setOnFrame(unicorn); } From 16e65b4764d542aa7f39ff63bcf88efa8097472c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:53:23 -0500 Subject: [PATCH 394/581] Signed-off-by: dcerisano --- examples/flex_stream/favicon.ico | Bin 0 -> 16958 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/flex_stream/favicon.ico diff --git a/examples/flex_stream/favicon.ico b/examples/flex_stream/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..593a9ba76966c8fb61c5dd6bcf59ef9cce5f1024 GIT binary patch literal 16958 zcmeI4ONbm*6o#w2lj+GkY@5U+YBJqpAP$PL4F-c?dJ@Gq$S|Ow=xz{$C~71)@zKUf zh(F-ixDe6y2^w_a#+4Az#Y6+PZX7TezyD61vc{RN?w(!r+~MnUy6T>~ z{r|VB?#(7ql;dxFJmRw&jqQq}wNVs}0f(Xn=(sm`z#VW0+yQsM9dHNS0e8S1a0lE0 zcfcKR2iyU7z#VW0+yQsM9r*t`(04Lhd)E1rZ)Df%d{&>IqU^yto!^jApLNcDby^#F zKb!?;!!YzM)z6Nlb&>bOxln}>SPePryHreTBVP{}Lk-5DY&GPTCNZszd;qpU9d^J) zutJ@Qfut}_&=v_bqI6#Xm%(IE;^RN|ehx=eJ?18)CW>}{p;(}(H zi0fcCya;c>dvFAvgYl1s;W`;K>yG$;CskSw+Oqq(zOW`F@3<4YM5I7Y5^lJfx<9xC*3Qx}`Y_-3#G9IB{hDis-opq`Q%UJb4VleK0%m zNGL|rT6h=?Dq?a8wB%qEc0rbIJE!|#gIxeU zYv3ScX}5FoV7JvOqURud3|ZRk+%fuXgK!CS=vn^(Ok<~bjJ~5PCWdREMbG@@(9PV- zgPm{*tkeb2GXb6E-t;Rz4pr5nV-(&5)7L3}N#8@D-=Bji=%hJ){uKT1(Ad_{F$6ZZ z-9-7McVc)Sp+)aF&1+g?RxbVH8Xq0k!TZojx1HBB@&QP@-t{l_s9#>}hkQ!E*0-yB z@Id;tE)44$J?J)1o}lJN)uLlE)?@m*iC@S1htcu&GW0)BO?ZdvH=slF-|fAx`@`mc zNcCuW7>LF22TN6-JZ9z2l#EfDrZXrF{$o`002$Hp5ZqX5Q833wRFn{A=C2XBqnM(%9C}kq7O0^j_=c`B$G2t4GUuFavgfXGPs7 z_gk$ZS`I_E`oE&@RS+(L_8R=yg9qQz_d**V9ib5ip_?^8bFcM3%>C>?>%aDQw(n`D zUwfc^P}QKblY7J1XxRi>1GLX+=Y#EwX6TbVyJ*pSa2o!C^m~4({15uv8wO2%pd~b7 z8RUWP1L;iP3;M48fwT{)fS5Ei^?}wwY1h4wejiA;_6H9_O-01e&|+~r`75AzoAx=< zD=!pv&&!*qVZ927$@-0^A$SI|_CUXLemV@s2f3vSbf9Sfs$lN}TNku9+z3S#5*IZz z$%7i)3EBrAf&=gX+yr6IL|o9MMU6NLQ}8OtgKt3l-WNdY#G-!(nGRwRCg2@tfzAI3 za_#@GwL!@(O``OeCSneXpgpntQ0#-83W!NxeU~276z2oPGMoe28ug!P)3^tJl59`Z7b!dOg&7}ja^C%3XCqqJqUtn+B>*t+S{?jq9O zu65F-x^DWkyS^WH2iyU7z#VW0+yQsM9dHNS0e8S1a0lE0cfcKR2iyU7z#VW0&Ljs; z|3})X%3Nix-m15X$4mTGju)E6X0cIf=9+~@p;2t)_$)+)M%2hf`8e`lBZTk&jyfOr ZZ-)A)XxE#+ezP)Hnya)bt@@d6-``?cFu4E# literal 0 HcmV?d00001 From 229975571425ea4d8a8442f2574e134b8b16e9a6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:56:05 -0500 Subject: [PATCH 395/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 4dcdca2d..6f309001 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -14,7 +14,7 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() -app.get('*', function (req, res) { +app.get('/?example', function (req, res) { var example = req.query.example; switch(example) { From cdd009e4f4863e33d462e011bc85b2721aa0ac67 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 18:59:24 -0500 Subject: [PATCH 396/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 6f309001..afe6aeba 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -14,9 +14,13 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() -app.get('/?example', function (req, res) { +app.use('/favicon.ico', express.static('favicon.ico')); + +app.get('*', function (req, res) { var example = req.query.example; + var filename = "/flex_stream_webserver.html"; + switch(example) { case "cpu_meter": cpu_meter.init(); @@ -41,7 +45,7 @@ app.get('/?example', function (req, res) { example = "default" } - res.sendfile(path.join(__dirname + '/flex_stream_webserver.html')); + res.sendfile(path.join(__dirname + filename)); }) var port = process.env.PORT || 5000; From eabf53d8b7b4f42e27c6895e091f607ed3810083 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:05:56 -0500 Subject: [PATCH 397/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index afe6aeba..31edb49d 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -14,7 +14,7 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() -app.use('/favicon.ico', express.static('favicon.ico')); +app.use('/favicon.ico', express.static(path.join(__dirname + '/favicon.ico'))); app.get('*', function (req, res) { var example = req.query.example; From a261fa0aca188bb332447b7d121256316648906b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:06:53 -0500 Subject: [PATCH 398/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 31edb49d..9d121a5c 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -14,7 +14,6 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() -app.use('/favicon.ico', express.static(path.join(__dirname + '/favicon.ico'))); app.get('*', function (req, res) { var example = req.query.example; @@ -48,6 +47,8 @@ app.get('*', function (req, res) { res.sendfile(path.join(__dirname + filename)); }) +app.use('/favicon.ico', express.static(path.join(__dirname + '/favicon.ico'))); + var port = process.env.PORT || 5000; app.listen(port, function() { From ada8a38019bd314fc886e4c4eb447bfba17e507d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:07:39 -0500 Subject: [PATCH 399/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 9d121a5c..4402e241 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -15,7 +15,7 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() -app.get('*', function (req, res) { +app.get('/', function (req, res) { var example = req.query.example; var filename = "/flex_stream_webserver.html"; From 797f6171379f9057c5536e13234faa1df09abfdf Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:12:37 -0500 Subject: [PATCH 400/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 4402e241..c48f64e4 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -19,7 +19,7 @@ app.get('/', function (req, res) { var example = req.query.example; var filename = "/flex_stream_webserver.html"; - + switch(example) { case "cpu_meter": cpu_meter.init(); @@ -41,13 +41,15 @@ app.get('/', function (req, res) { break; default: flex_stream.init(); - example = "default" + example = "default" } res.sendfile(path.join(__dirname + filename)); }) -app.use('/favicon.ico', express.static(path.join(__dirname + '/favicon.ico'))); +app.get('/favicon.ico', function (req, res) { + res.sendfile(path.join(__dirname + '/favicon.ico')); +}) var port = process.env.PORT || 5000; From 8e95516c3d0260e3b9861dbb84717f88d0d0c582 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:13:54 -0500 Subject: [PATCH 401/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index c48f64e4..372c9b00 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -48,6 +48,7 @@ app.get('/', function (req, res) { }) app.get('/favicon.ico', function (req, res) { + console.log("FAVICO"); res.sendfile(path.join(__dirname + '/favicon.ico')); }) From 305c5e9dbdad1f8d2f7bb3461ba94aa3a5228064 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:16:56 -0500 Subject: [PATCH 402/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 372c9b00..ffd19fa5 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -47,10 +47,12 @@ app.get('/', function (req, res) { res.sendfile(path.join(__dirname + filename)); }) -app.get('/favicon.ico', function (req, res) { - console.log("FAVICO"); - res.sendfile(path.join(__dirname + '/favicon.ico')); -}) +//app.get('/favicon.ico', function (req, res) { +// console.log("FAVICO"); +// res.sendfile(path.join(__dirname + '/favicon.ico')); +//}) + +app.use(express.favicon()); var port = process.env.PORT || 5000; From b63034e6d67f46f4a5d7d36d071547f372bceaf3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:19:39 -0500 Subject: [PATCH 403/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- examples/flex_stream/flex_stream_webserver.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index b0416a3e..35844786 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,7 +1,7 @@ Flex Stream Examples - + diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index ffd19fa5..7eb12c5c 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -47,12 +47,12 @@ app.get('/', function (req, res) { res.sendfile(path.join(__dirname + filename)); }) -//app.get('/favicon.ico', function (req, res) { -// console.log("FAVICO"); -// res.sendfile(path.join(__dirname + '/favicon.ico')); -//}) +app.get('/favicon.ico', function (req, res) { + console.log("FAVICO"); + res.sendfile(path.join(__dirname + '/favicon.ico')); +}) + -app.use(express.favicon()); var port = process.env.PORT || 5000; From 880ff500e1e8596a06e3c3e34dfd6efdd894e32b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:21:40 -0500 Subject: [PATCH 404/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 35844786..2a80eb7f 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,7 +1,7 @@ Flex Stream Examples - + From 67bc678d1f328fe3133f382e53e57a1d5630fe01 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:24:07 -0500 Subject: [PATCH 405/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 2a80eb7f..481ece72 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,7 +1,7 @@ -Flex Stream Examples +Flex Stream Examples From 7cd1e873842ecf7cb4f6215746aaf9056adb3f18 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:24:22 -0500 Subject: [PATCH 406/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 481ece72..b96d84f8 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,6 +1,6 @@ - + Flex Stream Examples From bc9506a472bde89f986307498365a0585efe2cfa Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:25:32 -0500 Subject: [PATCH 407/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 - examples/flex_stream/flex_stream_webserver.js | 6 ------ 2 files changed, 7 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index b96d84f8..7437e9b1 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,6 +1,5 @@ - Flex Stream Examples diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 7eb12c5c..949de51d 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -47,12 +47,6 @@ app.get('/', function (req, res) { res.sendfile(path.join(__dirname + filename)); }) -app.get('/favicon.ico', function (req, res) { - console.log("FAVICO"); - res.sendfile(path.join(__dirname + '/favicon.ico')); -}) - - var port = process.env.PORT || 5000; From e382be95824e0a64a0a4aa0503b2a7e6888932cc Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:30:48 -0500 Subject: [PATCH 408/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 6 ++++++ examples/flex_stream/flex_stream_webserver.js | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 7437e9b1..4bb11321 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,5 +1,11 @@ + + + + + + Flex Stream Examples diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 949de51d..362f0bcf 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -47,6 +47,11 @@ app.get('/', function (req, res) { res.sendfile(path.join(__dirname + filename)); }) +app.get('/favicon.ico', function (req, res) { + res.sendfile(path.join(__dirname + '/favicon.ico')); +}) + + var port = process.env.PORT || 5000; From 8cad962557585fe5552f78b45fc0c23bedd80eda Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:32:19 -0500 Subject: [PATCH 409/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 4bb11321..b96d84f8 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,11 +1,6 @@ - - - - - Flex Stream Examples From 610fbdebb73fae2d898c326e5dcc2163347c7b40 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:47:40 -0500 Subject: [PATCH 410/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 4 ++++ examples/flex_stream/flex_stream_webserver.js | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index b96d84f8..596187da 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -15,6 +15,10 @@

    Flex Stream Examples

  • Aurora
  • Default + \ No newline at end of file diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 362f0bcf..25268241 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -39,6 +39,12 @@ app.get('/', function (req, res) { case "timesquare": timesquare.init(); break; + case "stop": + flex_stream.stop(); + break; + case "start": + flex_Stream.start(); + break; default: flex_stream.init(); example = "default" From 7ec75f2f20355cd11af921caf023957ba3a36a37 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:48:44 -0500 Subject: [PATCH 411/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 25268241..b7f25427 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -43,7 +43,7 @@ app.get('/', function (req, res) { flex_stream.stop(); break; case "start": - flex_Stream.start(); + flex_stream.start(); break; default: flex_stream.init(); From 1c82353e5b1af1584983e31a20f78d06fee98d9d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:49:09 -0500 Subject: [PATCH 412/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 596187da..2f3ec35a 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -16,8 +16,8 @@

    Flex Stream Examples

  • Default From 42d61843eeef744e8b6ad33bf47b4c939a4176fd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:51:30 -0500 Subject: [PATCH 413/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 09f5f510..10003e34 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -96,13 +96,15 @@ var consumer_timer = null; //Stream Producer function producer(){ - onFrame(); //Call user defined function + if (streaming) + onFrame(); //Call user defined function producer_timer = setTimeout(producer, 1000/producer_framerate); } //Stream Consumer function consumer(){ - consumeFrame(); //Render frame to BlinkStick + if (streaming) + consumeFrame(); //Render frame to BlinkStick consumer_timer = setTimeout(consumer, 1000/consumer_framerate); } @@ -164,7 +166,7 @@ function morphFrame(current) } } - if (streaming && !busy) + if (!busy) { busy = true; device.setColors(0, composite, function(err, composite) { @@ -179,9 +181,9 @@ function morphFrame(current) function setOnFrame(fn) { //Hard or soft transition - if (!crossFade) - clearFrame(composite); - + if (!crossFade) + clearFrame(composite); + onFrame = fn; if (producer_timer != null) From a0ab002d5b5d408df6a6f3c130cef25c177cba33 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:54:59 -0500 Subject: [PATCH 414/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 10003e34..5fe43676 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -180,6 +180,7 @@ function morphFrame(current) function setOnFrame(fn) { + //Hard or soft transition if (!crossFade) clearFrame(composite); @@ -193,6 +194,8 @@ function setOnFrame(fn) if (consumer_timer != null) clearTimeout(consumer_timer); consumer_timer = setTimeout(consumer, 1000/consumer_framerate); + + streaming = true; } From e16b098addfc87d4cd6c56b355e88869947ea0cf Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 19:55:29 -0500 Subject: [PATCH 415/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 5fe43676..f3e583d2 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -195,7 +195,7 @@ function setOnFrame(fn) clearTimeout(consumer_timer); consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - streaming = true; + start(); } @@ -290,7 +290,6 @@ function init(){ setAlpha(0.1); setOnFrame(signature); pos = 0; - start(); } init(); From 8df818152549a424ab6611c8b42e128efdfce2c0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:04:04 -0500 Subject: [PATCH 416/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index f3e583d2..5b702840 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -10,6 +10,9 @@ module.exports = { init: function() { init(); }, + clearAll: function() { + clearAll(); + }, setOnFrame: function(fn) { setOnFrame(fn); }, @@ -124,13 +127,20 @@ function newFrame(){ return new Uint8Array(getSize()*3); } -//Create an empty frame +//Clear a frame function clearFrame(frame){ if (frame != null) for (i=0; i Date: Sun, 7 Jan 2018 20:05:33 -0500 Subject: [PATCH 417/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 5b702840..9f336500 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -10,8 +10,8 @@ module.exports = { init: function() { init(); }, - clearAll: function() { - clearAll(); + fadeOut: function() { + fadeOut(); }, setOnFrame: function(fn) { setOnFrame(fn); @@ -135,13 +135,10 @@ function clearFrame(frame){ } //Clear all LEDs -function clearAll(frame){ - setOnFrame(fadeOut); +function fadeOut(frame){ + setOnFrame(fadeToBlack); } - - - //Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { @@ -293,8 +290,8 @@ var signature = function(){ produceFrame(frame); }; -//Fade to Black -var fadeOut = function(){ +//Fade to Black used with fadeOut() +var fadeToBlack = function(){ setProducerFramerate(10); setConsumerFramerate(60); setAlpha(0.1); From e98763e77a0911a84de7acd58bf392db250ab61d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:07:02 -0500 Subject: [PATCH 418/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 + examples/flex_stream/flex_stream_webserver.js | 3 +++ 2 files changed, 4 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 2f3ec35a..4f66e229 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -18,6 +18,7 @@

    Flex Stream Examples

    diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index b7f25427..5cc2f9bb 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -45,6 +45,9 @@ app.get('/', function (req, res) { case "start": flex_stream.start(); break; + case "clear": + flex_stream.fadeOut(); + break; default: flex_stream.init(); example = "default" From 4c0ec1a1c2c4420584c9d1fb4b32cc3aed4643e0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:08:04 -0500 Subject: [PATCH 419/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 9f336500..1576b145 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -294,7 +294,6 @@ var signature = function(){ var fadeToBlack = function(){ setProducerFramerate(10); setConsumerFramerate(60); - setAlpha(0.1); var frame = newFrame(); produceFrame(frame); }; From d94c1ea9d96cca319c0438401f95cb9f20946dbf Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:08:14 -0500 Subject: [PATCH 420/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 1576b145..35d28c99 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -292,8 +292,6 @@ var signature = function(){ //Fade to Black used with fadeOut() var fadeToBlack = function(){ - setProducerFramerate(10); - setConsumerFramerate(60); var frame = newFrame(); produceFrame(frame); }; From 6237bf2b4893ec28fa5cd3caf697e77ccf8d50cc Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:13:54 -0500 Subject: [PATCH 421/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 ++ examples/flex_stream/flex_stream_webserver.js | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 4f66e229..ed919d31 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -18,6 +18,8 @@

    Flex Stream Examples

    diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 5cc2f9bb..a2545e18 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -45,6 +45,12 @@ app.get('/', function (req, res) { case "start": flex_stream.start(); break; + case "crossFadeOn": + flex_stream.crossFade(true); + break; + case "crossFadeOff": + flex_stream.crossFade(false); + break; case "clear": flex_stream.fadeOut(); break; From c2c07b0f1af25d0a5039c9b2df46b4d938a69f5f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:14:42 -0500 Subject: [PATCH 422/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index a2545e18..61679a5e 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -46,10 +46,10 @@ app.get('/', function (req, res) { flex_stream.start(); break; case "crossFadeOn": - flex_stream.crossFade(true); + flex_stream.setCrossFade(true); break; case "crossFadeOff": - flex_stream.crossFade(false); + flex_stream.setCrossFade(false); break; case "clear": flex_stream.fadeOut(); From dcc8e21c543ae6e669a21665198184779cc7bdfb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:18:12 -0500 Subject: [PATCH 423/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index b99720a2..8fc9f67e 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -31,8 +31,8 @@ function cpuMeter() { cpu_avg = (cpu_avg+percentageCPU)/2; - //Vary the producer framerate by percentage CPU load (10 to 60 fps) - framerate = cpu_avg*0.50+10; + //Vary the producer framerate by percentage CPU load (15 to 60 fps) + framerate = cpu_avg*0.45+15; //Bounce particle off edges of LED strip if (pos<=0 || pos>=flex_stream.getSize()-1) @@ -71,7 +71,7 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.3); + flex_stream.setAlpha(0.25); flex_stream.setOnFrame(cpuMeter); startMeasure = cpuLoad(); percentageCPU = 0; From 717a332155d5b376ed9858073e5bc5e2315a9188 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:20:50 -0500 Subject: [PATCH 424/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index ed919d31..55c16521 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -16,10 +16,14 @@

    Flex Stream Examples

  • Default + + From 02294556b6e26cda3c1196975de1325ac6c57f90 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:21:17 -0500 Subject: [PATCH 425/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 35d28c99..44ca3819 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -93,7 +93,7 @@ var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause var busy = false; //Semaphore -var crossFade = false; //Hard or soft transitions. +var crossFade = true; //Hard or soft transitions. var producer_timer = null; var consumer_timer = null; From 34359b56517c669304e39c5e00f79cf67aed27e2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:24:09 -0500 Subject: [PATCH 426/581] Signed-off-by: dcerisano --- examples/flex_stream/cpu_meter.js | 5 ----- examples/flex_stream/flex_stream.js | 1 - 2 files changed, 6 deletions(-) diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 8fc9f67e..05be8e5a 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -73,11 +73,6 @@ function init(){ flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(0.25); flex_stream.setOnFrame(cpuMeter); - startMeasure = cpuLoad(); - percentageCPU = 0; - cpu_avg = 0; - pos = 1; - speed = 1; } init(); diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 44ca3819..4a65f727 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -302,7 +302,6 @@ function init(){ setConsumerFramerate(60); setAlpha(0.1); setOnFrame(signature); - pos = 0; } init(); From d484086646e50b2528c90e944db6461ae3dbd0cc Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:31:17 -0500 Subject: [PATCH 427/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 55c16521..8f9aad54 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -15,10 +15,6 @@

    Flex Stream Examples

  • Aurora
  • Default -
    • PAUSE
    • RESUME From 39d6b5e9e34c120983cabbefe83cc157010e4809 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:33:06 -0500 Subject: [PATCH 428/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 8f9aad54..89b841d3 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -14,14 +14,12 @@

      Flex Stream Examples

    • Unicorn
    • Aurora
    • Default +
    • Fade Out
    - \ No newline at end of file From 5a93c149e2c1da2b569ffa5418bf659892cc81ba Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:33:32 -0500 Subject: [PATCH 429/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 89b841d3..5407a8f3 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -14,7 +14,7 @@

    Flex Stream Examples

  • Unicorn
  • Aurora
  • Default -
  • Fade Out +
  • Clear
    • PAUSE From be8318ada575e70b26dfa1acc21531de061a3816 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:55:41 -0500 Subject: [PATCH 430/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 61679a5e..4d3b1f1a 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -1,5 +1,6 @@ //Very simple server to switch between examples -//eg. http://localhost:5000/?example=ambilight +//eg. http://localhost:5000 for the UI +//eg. http://localhost:5000/?example=ambilight for a specific example //Default is the flex stream signature const express = require('express'); From 885a1bf5543a8985fbfb0706c4f1d1841b8c7309 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 20:55:55 -0500 Subject: [PATCH 431/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 4d3b1f1a..a9354060 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -1,5 +1,5 @@ //Very simple server to switch between examples -//eg. http://localhost:5000 for the UI +//eg. http://localhost:5000 for the client UI //eg. http://localhost:5000/?example=ambilight for a specific example //Default is the flex stream signature From cca6f4c545afa31b7c8cb52deea693a487029300 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:27:32 -0500 Subject: [PATCH 432/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 examples/flex_stream/image.js diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js new file mode 100644 index 00000000..419e415d --- /dev/null +++ b/examples/flex_stream/image.js @@ -0,0 +1,46 @@ +//Image display flex_stream.js +//User defined OnFrame() converts images, and morphs scaled frames to BlinkStick +//Minimum Requirements: +//- Latest version of nodejs (tested with v8.9.3) +//- Latest blinkstick, sharp npm packages (all cross-platform) +//For Windows, Linux and Mac + +module.exports = { + init: function(filename) { + init(filename); + } +} + +const flex_stream = require("./flex_stream.js"); +const sharp = require('sharp'); //Available at npmjs.com +var frame = null; + +//Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline +function image(){ + screenshot().then((img) => { + sharp(img).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { + flex_stream.produceFrame(frame); + }) + }); +} + +//Configure stream + +function init(filename){ + + flex_stream.setSize(8); + flex_stream.setProducerFramerate(10); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(1); + + sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { + frame = data; + flex_stream.setOnFrame(image); + }); + + +} + +console.log(process.argv[0]); + + From 55085efe09ea7e409c9d8261dc32c9959aea8635 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:28:37 -0500 Subject: [PATCH 433/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 419e415d..ae0a17b2 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -41,6 +41,6 @@ function init(filename){ } -console.log(process.argv[0]); +console.log("ARGV[0]: = "+process.argv[0]); From e5cb2124c4d31b7c540c83d50bfe45ce3fb41f56 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:29:52 -0500 Subject: [PATCH 434/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index ae0a17b2..80c08b8c 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -41,6 +41,6 @@ function init(filename){ } -console.log("ARGV[0]: = "+process.argv[0]); +console.log("ARGV[0]: = "+process.argv[1]); From ae43e9fd7cab89a81cdedde83e22d5c30904f875 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:30:33 -0500 Subject: [PATCH 435/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 80c08b8c..42f9c6f7 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -41,6 +41,6 @@ function init(filename){ } -console.log("ARGV[0]: = "+process.argv[1]); +console.log("ARGV[2]: = "+process.argv[2]); From 0bc2787a4916632c9bdb53fa7ce977b9c3269763 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:31:45 -0500 Subject: [PATCH 436/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 42f9c6f7..d1a7ceaa 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -17,11 +17,7 @@ var frame = null; //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - screenshot().then((img) => { - sharp(img).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { - flex_stream.produceFrame(frame); - }) - }); + flex_stream.produceFrame(frame); } //Configure stream @@ -41,6 +37,6 @@ function init(filename){ } -console.log("ARGV[2]: = "+process.argv[2]); +init(process.argv[2]); From a9e4cf547b52c5fa1208354e30f6060e95342250 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:37:12 -0500 Subject: [PATCH 437/581] Signed-off-by: dcerisano --- examples/flex_stream/favicon.png | Bin 0 -> 1244 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/flex_stream/favicon.png diff --git a/examples/flex_stream/favicon.png b/examples/flex_stream/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1d3632d368ccb2a5d6a2ad61d8ea096bd65d97 GIT binary patch literal 1244 zcmV<21S9*2P)nID#D$

      _Vl2osA1u3Z)tCh2XHG)>aH%*=B!=g!=DlTPN13qj9slgYe$ z?!D)K&b{xP0Yy<1MNt$*Q4~c{6h%=KMfo3NgW;c7?e_BzGUjSa6ZLr(4q)FqCfDPb ziNOXrAOP|*CIK42CMHh0#`;cGjQczei~>cm-2~RCn9cV1is^C85Mqf&fNOv;S-%df z0n3K4>5ugtGxEJ9+zm|1`T*;|MMJcb9@`PX1|4T?Fb-S~TnFp`3bKh6;5@K^i8s1z zI?)Y)JAk`@8-WQC&H|@_lT=K!l>p-WO~AvzgTT!q!ZPq1@C9(f5H5Dxv>dX8qrhXp zGr&V4BESN09QfD}9Z!qUEr1Pn1Jl4xiCmJ(mOO9)ID?5VcZtw){s1r|k#BhRdHK!) zC#aa8od}-uv%vGf?Lh3==ft)Nd;`2|2y3lOn03xi0IvZr$k?q|0p2u3ulpk8J?D3b z^AoaIlA6FBgO*4(2rw}mt-0rq0{6;>>nZ!DI5i0zplbJ0F}!rJ=A54fUX-Y>rR?1i zY61@chb>XbbRwSvj);A+&lRu}c-0afZXKaWBGYm{4@`NH??)nzlmR$YhN|5I%%-Bg z6-~KY9tU`9uI#>l4lrWhZ{0fZ2(aI~5N9NFas%9>CE!_0cq?9NBAdE)0O$SVFo_M^ zE8+eOwh6F{s-2dzybsu$;bl+ttG$z6!soTt8n*(l; z&(pGY76E2tjxk{W5O36dmayOpkdxa!3k5IjvWn+6?_Qb347RNd>I86d2my8hBfbFc zd}X2GMg8)CXV7vZIVXQldtwa2 z2=JqbxDI?bMBq*tqNXpvhA5fOFv%h&-jx5p&TxcsfTd#2Nkw;7L`X6SFek6F1o#&C zJ%a#0Nj-rjY}Ww^P?OXcBny^hJRF^eifI)%+l%08ggJnhpKR9<@5!9otz86;0l&IZ z*bw~!yg%SEx&(Y^h|YEjp;jFLCSI3RzT|B-m-?K@Mo(elIyQhqQ*QDvfgfZe1<%G+ zka?N=Qz~Yjs^yJiWmgF<0IvXlc$Ht?vn|Md^A+%cAzZhuBFL@%j)=I_$N72SZA0`? zZ!^^02$g_6QcI7@1{%N>U=jGM?R;-9kO%GtZj-`hOl((xKY{O^^H=EwrhtRMol=;M z$o&w>S^vxsu68$1U5(Jwz*AyxBw#h*B=CtL`h4qN!0!kdz1tHCnLH50000 Date: Sun, 7 Jan 2018 21:40:04 -0500 Subject: [PATCH 438/581] Signed-off-by: dcerisano --- .../{favicon.png => img/flex_stream.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/flex_stream/{favicon.png => img/flex_stream.png} (100%) diff --git a/examples/flex_stream/favicon.png b/examples/flex_stream/img/flex_stream.png similarity index 100% rename from examples/flex_stream/favicon.png rename to examples/flex_stream/img/flex_stream.png From 17dc7d43fb76a95e0856ae13460405c03c8bc23d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:41:37 -0500 Subject: [PATCH 439/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 3 --- examples/flex_stream/img/flex_stream.jpg | Bin 0 -> 2963 bytes 2 files changed, 3 deletions(-) create mode 100644 examples/flex_stream/img/flex_stream.jpg diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index d1a7ceaa..b753b6b6 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -23,7 +23,6 @@ function image(){ //Configure stream function init(filename){ - flex_stream.setSize(8); flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); @@ -33,8 +32,6 @@ function init(filename){ frame = data; flex_stream.setOnFrame(image); }); - - } init(process.argv[2]); diff --git a/examples/flex_stream/img/flex_stream.jpg b/examples/flex_stream/img/flex_stream.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fec32c0101987ce05da8fae2685921e173bfd012 GIT binary patch literal 2963 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 avH&&q4owj5T%-iwa&Vk5$}t(*AN@B`e76Vy literal 0 HcmV?d00001 From d5b6743bf4734ad0c92392d6f868dc7d512feb54 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 21:42:22 -0500 Subject: [PATCH 440/581] Signed-off-by: dcerisano --- examples/flex_stream/img/flex_stream.jpg | Bin 2963 -> 2881 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/flex_stream.jpg b/examples/flex_stream/img/flex_stream.jpg index fec32c0101987ce05da8fae2685921e173bfd012..b782e8cf0e6be3e2f534619acbb82d1fb7d9b781 100644 GIT binary patch delta 1788 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 From fe700f9ba335d7f76d781e001e28dbf7efc2a467 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:02:29 -0500 Subject: [PATCH 441/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 +++ examples/flex_stream/image.js | 26 ++++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 4a65f727..51c554aa 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -16,6 +16,9 @@ module.exports = { setOnFrame: function(fn) { setOnFrame(fn); }, + getOnFrame: function() { + onFrame; + }, newFrame: function() { return newFrame(); }, diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index b753b6b6..91c81a38 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -14,26 +14,40 @@ module.exports = { const flex_stream = require("./flex_stream.js"); const sharp = require('sharp'); //Available at npmjs.com var frame = null; +var oldOnFrame = flex_stream.getOnFrame(); +var oldConsumerFramerate = flex_stream.getConsumerFramerate(); +var oldProducerFramerate = flex_stream.getProducerFramerate(); +var oldAlpha = flex_stream.getAlpha(); +var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - flex_stream.produceFrame(frame); + if (duration-- == 0){ + flex_stream.setConsumerFramerate(oldConsumerFramerate); + flex_stream.setProducerFramerate(oldProducerFramerate); + flex_stream.setAlpha(oldAlpha); + } + else + flex_stream.produceFrame(frame); } //Configure stream -function init(filename){ +function init(filename, duration){ flex_stream.setSize(8); - flex_stream.setProducerFramerate(10); - flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; + num_frames = duration; + flex_stream.setProducerFramerate(60); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(1); flex_stream.setOnFrame(image); }); } -init(process.argv[2]); +//Run from commandline +if (!module.parent) + init(process.argv[2], process.argv[3]); From 4521bb9f51a88b57eb6a05720b728b1788a04a5f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:04:32 -0500 Subject: [PATCH 442/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 91c81a38..c25f055c 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -33,12 +33,12 @@ function image(){ //Configure stream -function init(filename, duration){ +function init(filename, num_frames){ flex_stream.setSize(8); sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; - num_frames = duration; + duration = num_frames; flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); From 4a5f046a162633be978852f71d43ff5b9128abca Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:05:04 -0500 Subject: [PATCH 443/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index c25f055c..8635e3ce 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -25,7 +25,8 @@ function image(){ if (duration-- == 0){ flex_stream.setConsumerFramerate(oldConsumerFramerate); flex_stream.setProducerFramerate(oldProducerFramerate); - flex_stream.setAlpha(oldAlpha); + flex_stream.setAlpha(oldAlpha); + flex_stream.setOnFrame(oldOnFrame); } else flex_stream.produceFrame(frame); @@ -42,7 +43,7 @@ function init(filename, num_frames){ flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); - flex_stream.setOnFrame(image); + }); } From 223e1d3b096a3754fcada7585d4d06c898880173 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:06:04 -0500 Subject: [PATCH 444/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 8635e3ce..ee399e6c 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -37,13 +37,16 @@ function image(){ function init(filename, num_frames){ flex_stream.setSize(8); + oldConsumerFramerate = flex_stream.getConsumerFramerate(); + oldProducerFramerate = flex_stream.getProducerFramerate(); + oldAlpha = flex_stream.getAlpha(); + sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); - }); } From 94eb433e9266e6eb61916e31db981bd3c5f21809 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:07:20 -0500 Subject: [PATCH 445/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index ee399e6c..47dca155 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -30,6 +30,8 @@ function image(){ } else flex_stream.produceFrame(frame); + + console.log(duration); } //Configure stream From b61b85a9fd457acf4058aca32f73b3b597e5d00d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:09:04 -0500 Subject: [PATCH 446/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 47dca155..9e5e0768 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -39,6 +39,7 @@ function image(){ function init(filename, num_frames){ flex_stream.setSize(8); + oldOnFrame = flex_stream.getOnFrame(); oldConsumerFramerate = flex_stream.getConsumerFramerate(); oldProducerFramerate = flex_stream.getProducerFramerate(); oldAlpha = flex_stream.getAlpha(); From 615af37cb8d4d2cc32faaf4eab0bdd98546c78b0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:09:39 -0500 Subject: [PATCH 447/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 9e5e0768..3cabc01d 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -53,8 +53,7 @@ function init(filename, num_frames){ }); } -//Run from commandline -if (!module.parent) + init(process.argv[2], process.argv[3]); From 90c9d818d14a85218afb28393a2cb2e91ee9dcb2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:10:42 -0500 Subject: [PATCH 448/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 3cabc01d..90b70ab2 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -50,10 +50,12 @@ function init(filename, num_frames){ flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); + flex_stream.setOnFrame(image); }); } - +//Run from commandline +if (!module.parent) init(process.argv[2], process.argv[3]); From e9e28fdd97728e6602d07e3ce6d6dbf766adf492 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:12:12 -0500 Subject: [PATCH 449/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- examples/flex_stream/image.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 51c554aa..c52a4020 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -211,7 +211,7 @@ function setOnFrame(fn) //Default onFrame() stub -var onFrame = function(){}; +var onFrame = signature; function setProducerFramerate(framerate) { diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 90b70ab2..be3a3449 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -14,7 +14,7 @@ module.exports = { const flex_stream = require("./flex_stream.js"); const sharp = require('sharp'); //Available at npmjs.com var frame = null; -var oldOnFrame = flex_stream.getOnFrame(); +var oldOnFrame = flex_stream.getOnFrame(); var oldConsumerFramerate = flex_stream.getConsumerFramerate(); var oldProducerFramerate = flex_stream.getProducerFramerate(); var oldAlpha = flex_stream.getAlpha(); From 4acad66f6bccdd7d6d6c7eabed156bac693dde2b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:12:47 -0500 Subject: [PATCH 450/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- .../img/{flex_stream.png => favicon.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename examples/flex_stream/img/{flex_stream.png => favicon.png} (100%) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c52a4020..51c554aa 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -211,7 +211,7 @@ function setOnFrame(fn) //Default onFrame() stub -var onFrame = signature; +var onFrame = function(){}; function setProducerFramerate(framerate) { diff --git a/examples/flex_stream/img/flex_stream.png b/examples/flex_stream/img/favicon.png similarity index 100% rename from examples/flex_stream/img/flex_stream.png rename to examples/flex_stream/img/favicon.png From 2b1a65889639d47004e3dddd8c3ca478a607daaa Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:14:24 -0500 Subject: [PATCH 451/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 51c554aa..19619aaa 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -305,6 +305,7 @@ function init(){ setConsumerFramerate(60); setAlpha(0.1); setOnFrame(signature); + console.log("set"); } init(); From 1552c905990afb3d6d1c194693ffce8f051ec10f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:14:59 -0500 Subject: [PATCH 452/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 19619aaa..03aeab93 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -17,7 +17,7 @@ module.exports = { setOnFrame(fn); }, getOnFrame: function() { - onFrame; + return onFrame; }, newFrame: function() { return newFrame(); @@ -305,7 +305,6 @@ function init(){ setConsumerFramerate(60); setAlpha(0.1); setOnFrame(signature); - console.log("set"); } init(); From 68111c0f3f1767e2b180aaf4acac54721d60a3f0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:15:19 -0500 Subject: [PATCH 453/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 03aeab93..b1f1feab 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -76,7 +76,7 @@ module.exports = { }, stop: function() { - return stop(); + stop(); }, isStreaming: function() { From 9cdd2bb2765c04cdfc59176e2c1c3be2857035c7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:16:14 -0500 Subject: [PATCH 454/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index b1f1feab..c12c75fb 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -301,7 +301,7 @@ var fadeToBlack = function(){ function init(){ setSize(8); - setProducerFramerate(20); + setProducerFramerate(10); setConsumerFramerate(60); setAlpha(0.1); setOnFrame(signature); From a99b96a588c6383c0a68c74e5b2877b39c24b4f0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:16:45 -0500 Subject: [PATCH 455/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c12c75fb..bd7551f1 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -303,7 +303,7 @@ function init(){ setSize(8); setProducerFramerate(10); setConsumerFramerate(60); - setAlpha(0.1); + setAlpha(0.01); setOnFrame(signature); } From 5ebfeac5e45a8f963fcb93b7cff99127fbdb6d6d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:17:22 -0500 Subject: [PATCH 456/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index bd7551f1..3e479d08 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -303,7 +303,7 @@ function init(){ setSize(8); setProducerFramerate(10); setConsumerFramerate(60); - setAlpha(0.01); + setAlpha(0.05); setOnFrame(signature); } From 485f00e2467e18175c10596239d606a09746566b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:21:33 -0500 Subject: [PATCH 457/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index be3a3449..e0a40fee 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -30,8 +30,6 @@ function image(){ } else flex_stream.produceFrame(frame); - - console.log(duration); } //Configure stream From e7ae42403dbfabfec9f8b04490230b83dbb50348 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:25:03 -0500 Subject: [PATCH 458/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index e0a40fee..56a5fd2d 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -27,6 +27,10 @@ function image(){ flex_stream.setProducerFramerate(oldProducerFramerate); flex_stream.setAlpha(oldAlpha); flex_stream.setOnFrame(oldOnFrame); + + console.log(flex_stream.getConsumerFramerate()); + console.log(flex_stream.getProducerFramerate()); + console.log(flex_stream.getAlpha()); } else flex_stream.produceFrame(frame); From 3c92fd141f4e35d642e2142079a309b09a8ca368 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:26:11 -0500 Subject: [PATCH 459/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 3e479d08..615dd4e9 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -291,6 +291,7 @@ var signature = function(){ frame[pos*3+2] = 255; //B } produceFrame(frame); + console.log(pos); }; //Fade to Black used with fadeOut() From e72f4f744c2062e51e7745dc0e1ba1431b18de39 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:30:53 -0500 Subject: [PATCH 460/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 - examples/flex_stream/image.js | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 615dd4e9..3e479d08 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -291,7 +291,6 @@ var signature = function(){ frame[pos*3+2] = 255; //B } produceFrame(frame); - console.log(pos); }; //Fade to Black used with fadeOut() diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 56a5fd2d..c269e0ff 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -39,7 +39,7 @@ function image(){ //Configure stream function init(filename, num_frames){ - flex_stream.setSize(8); + oldOnFrame = flex_stream.getOnFrame(); oldConsumerFramerate = flex_stream.getConsumerFramerate(); @@ -49,7 +49,8 @@ function init(filename, num_frames){ sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; - flex_stream.setProducerFramerate(60); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); flex_stream.setOnFrame(image); From f36e650bc9096d38625ccfcc9d54c524f4d324b7 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:32:44 -0500 Subject: [PATCH 461/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index c269e0ff..33973061 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -23,8 +23,8 @@ var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ if (duration-- == 0){ - flex_stream.setConsumerFramerate(oldConsumerFramerate); flex_stream.setProducerFramerate(oldProducerFramerate); + flex_stream.setConsumerFramerate(oldConsumerFramerate); flex_stream.setAlpha(oldAlpha); flex_stream.setOnFrame(oldOnFrame); From 6804030fe77c62b82a1eccc199791086c78cd145 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:37:20 -0500 Subject: [PATCH 462/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- examples/flex_stream/image.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 3e479d08..ea063db1 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -283,7 +283,7 @@ function onExit(){ var pos = 0; var signature = function(){ //Bounce particle off edges of LED strip - if (pos++ >= size+20) pos=0; + if (pos++ >= getSize()+20) pos=0; var frame = newFrame(); if(pos < size){ frame[pos*3+0] = 255; //R diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 33973061..4b86ac25 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -40,7 +40,6 @@ function image(){ function init(filename, num_frames){ - oldOnFrame = flex_stream.getOnFrame(); oldConsumerFramerate = flex_stream.getConsumerFramerate(); oldProducerFramerate = flex_stream.getProducerFramerate(); From b36160c43b85a4621bcf3f0a094c95cb9248436a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:39:17 -0500 Subject: [PATCH 463/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 4b86ac25..2ccee572 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -14,10 +14,10 @@ module.exports = { const flex_stream = require("./flex_stream.js"); const sharp = require('sharp'); //Available at npmjs.com var frame = null; -var oldOnFrame = flex_stream.getOnFrame(); -var oldConsumerFramerate = flex_stream.getConsumerFramerate(); -var oldProducerFramerate = flex_stream.getProducerFramerate(); -var oldAlpha = flex_stream.getAlpha(); +var oldOnFrame = null; +var oldConsumerFramerate = 0; +var oldProducerFramerate = 0; +var oldAlpha = 0; var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline From 1a609d553b6c4444ba34bced5a35452a791d57e3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:42:29 -0500 Subject: [PATCH 464/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index ea063db1..e24ffd09 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -301,7 +301,7 @@ var fadeToBlack = function(){ function init(){ setSize(8); - setProducerFramerate(10); + setProducerFramerate(20); setConsumerFramerate(60); setAlpha(0.05); setOnFrame(signature); From 2743d601278488b40f5017b03be444d8baffba1f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:48:07 -0500 Subject: [PATCH 465/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 2ccee572..0f61c33a 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -22,7 +22,7 @@ var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - if (duration-- == 0){ + if (true){ flex_stream.setProducerFramerate(oldProducerFramerate); flex_stream.setConsumerFramerate(oldConsumerFramerate); flex_stream.setAlpha(oldAlpha); @@ -48,11 +48,11 @@ function init(filename, num_frames){ sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; - flex_stream.setSize(8); - flex_stream.setProducerFramerate(30); - flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); - flex_stream.setOnFrame(image); +// flex_stream.setSize(8); +// flex_stream.setProducerFramerate(30); +// flex_stream.setConsumerFramerate(60); +// flex_stream.setAlpha(1); +// flex_stream.setOnFrame(image); }); } From 0794991680f493f1cf9a9c6a580c62df018e49e4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:49:01 -0500 Subject: [PATCH 466/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 0f61c33a..6ababdbd 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -48,11 +48,11 @@ function init(filename, num_frames){ sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; -// flex_stream.setSize(8); -// flex_stream.setProducerFramerate(30); -// flex_stream.setConsumerFramerate(60); -// flex_stream.setAlpha(1); -// flex_stream.setOnFrame(image); + flex_stream.setSize(8); + flex_stream.setProducerFramerate(30); + flex_stream.setConsumerFramerate(60); + flex_stream.setAlpha(.9); + flex_stream.setOnFrame(image); }); } From 7417e124752e6d95d60e971083929ca929f52205 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:52:51 -0500 Subject: [PATCH 467/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 ++++++ examples/flex_stream/image.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e24ffd09..a498ce3a 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -13,6 +13,12 @@ module.exports = { fadeOut: function() { fadeOut(); }, + signature: function() { + return sigature; + }, + fadeToBlack: function() { + return fadeToBlack; + }, setOnFrame: function(fn) { setOnFrame(fn); }, diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 6ababdbd..72ea1868 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -51,7 +51,7 @@ function init(filename, num_frames){ flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(.9); + flex_stream.setAlpha(1); flex_stream.setOnFrame(image); }); } From 320970bfd7d442bc2bd737944d0887608aafc43b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 22:53:00 -0500 Subject: [PATCH 468/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a498ce3a..af113d50 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -14,7 +14,7 @@ module.exports = { fadeOut(); }, signature: function() { - return sigature; + return signature; }, fadeToBlack: function() { return fadeToBlack; From 7ea5059974561a7a49826de948ef472e0df77341 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:11:21 -0500 Subject: [PATCH 469/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 44 +++++++++++++++++++++++------ examples/flex_stream/image.js | 23 +++------------ 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index af113d50..45375cf0 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -13,17 +13,14 @@ module.exports = { fadeOut: function() { fadeOut(); }, - signature: function() { - return signature; - }, - fadeToBlack: function() { - return fadeToBlack; - }, setOnFrame: function(fn) { setOnFrame(fn); }, - getOnFrame: function() { - return onFrame; + saveOnFrame: function() { + saveOnFrame(); + }, + restoreOnFrame: function() { + restoreOnFrame(); }, newFrame: function() { return newFrame(); @@ -105,6 +102,10 @@ var busy = false; //Semaphore var crossFade = true; //Hard or soft transitions. var producer_timer = null; var consumer_timer = null; +var prevOnFrame = null; +var prevConsumerFramerate = 0; +var prevProducerFramerate = 0; +var prevAlpha = 0; //Stream Producer function producer(){ @@ -200,7 +201,7 @@ function setOnFrame(fn) //Hard or soft transition if (!crossFade) clearFrame(composite); - + onFrame = fn; if (producer_timer != null) @@ -214,6 +215,30 @@ function setOnFrame(fn) start(); } +function saveOnFrame(){ + prevOnFrame = onFrame; + prevConsumerFramerate = consumer_framerate; + prevProducerFramerate = producer_framerate; + prevAlpha = alpha; +} +function restoreOnFrame(){ + //Hard or soft transition + if (!crossFade) + clearFrame(composite); + + consumer_framerate = prevConsumerFramerate; + producer_framerate = prevProducerFramerate; + prevAlpha = alpha; + onFrame = prevOnFrame; + + if (producer_timer != null) + clearTimeout(producer_timer); + producer_timer = setTimeout(producer, 1000/producer_framerate); + + if (consumer_timer != null) + clearTimeout(consumer_timer); + consumer_timer = setTimeout(consumer, 1000/consumer_framerate); +} //Default onFrame() stub @@ -231,6 +256,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { + consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 72ea1868..ddd423f9 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -14,24 +14,13 @@ module.exports = { const flex_stream = require("./flex_stream.js"); const sharp = require('sharp'); //Available at npmjs.com var frame = null; -var oldOnFrame = null; -var oldConsumerFramerate = 0; -var oldProducerFramerate = 0; -var oldAlpha = 0; + var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - if (true){ - flex_stream.setProducerFramerate(oldProducerFramerate); - flex_stream.setConsumerFramerate(oldConsumerFramerate); - flex_stream.setAlpha(oldAlpha); - flex_stream.setOnFrame(oldOnFrame); - - console.log(flex_stream.getConsumerFramerate()); - console.log(flex_stream.getProducerFramerate()); - console.log(flex_stream.getAlpha()); - } + if (duration-- == 0) + flex_stream.restoreOnFrame(); else flex_stream.produceFrame(frame); } @@ -40,14 +29,10 @@ function image(){ function init(filename, num_frames){ - oldOnFrame = flex_stream.getOnFrame(); - oldConsumerFramerate = flex_stream.getConsumerFramerate(); - oldProducerFramerate = flex_stream.getProducerFramerate(); - oldAlpha = flex_stream.getAlpha(); - sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; + flex_stream.saveOnFrame(); flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); From f236affec224ba724de254dec06022380ef61fb6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:12:51 -0500 Subject: [PATCH 470/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 45375cf0..ba998c62 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -228,8 +228,8 @@ function restoreOnFrame(){ consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; - prevAlpha = alpha; - onFrame = prevOnFrame; + alpha = prevAlpha; + onFrame = prevOnFrame; if (producer_timer != null) clearTimeout(producer_timer); From e7f9c83e917b2169353e8a6a9babb17e73c4f4f3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:18:20 -0500 Subject: [PATCH 471/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index ba998c62..6fe755ba 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -222,22 +222,10 @@ function saveOnFrame(){ prevAlpha = alpha; } function restoreOnFrame(){ - //Hard or soft transition - if (!crossFade) - clearFrame(composite); - consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; - onFrame = prevOnFrame; - - if (producer_timer != null) - clearTimeout(producer_timer); - producer_timer = setTimeout(producer, 1000/producer_framerate); - - if (consumer_timer != null) - clearTimeout(consumer_timer); - consumer_timer = setTimeout(consumer, 1000/consumer_framerate); + setOnFrame(prevOnFrame); } //Default onFrame() stub From eb4251d3061c3dc88c58c0cbd956ee0ef4d6e08c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:22:18 -0500 Subject: [PATCH 472/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 6fe755ba..e5b2a5ff 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -197,11 +197,11 @@ function morphFrame(current) function setOnFrame(fn) { - + //Hard or soft transition if (!crossFade) clearFrame(composite); - + onFrame = fn; if (producer_timer != null) @@ -211,7 +211,7 @@ function setOnFrame(fn) if (consumer_timer != null) clearTimeout(consumer_timer); consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - + start(); } @@ -244,7 +244,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { - + consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } @@ -303,13 +303,13 @@ function onExit(){ var pos = 0; var signature = function(){ //Bounce particle off edges of LED strip - if (pos++ >= getSize()+20) pos=0; + if (pos++ >= getSize()) pos=0; var frame = newFrame(); - if(pos < size){ - frame[pos*3+0] = 255; //R - frame[pos*3+1] = 255; //G - frame[pos*3+2] = 255; //B - } + + frame[pos*3+0] = 255; //R + frame[pos*3+1] = 255; //G + frame[pos*3+2] = 255; //B + produceFrame(frame); }; From fcef24b9df14f033c8d755f419b9a9c6cfdf282f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:23:21 -0500 Subject: [PATCH 473/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e5b2a5ff..9438fc7f 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -310,6 +310,7 @@ var signature = function(){ frame[pos*3+1] = 255; //G frame[pos*3+2] = 255; //B + console.log(stream_buffer.length); produceFrame(frame); }; From 069daa6f4448b1fb2712d8d3ce45acc42eeb1298 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:25:37 -0500 Subject: [PATCH 474/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 9438fc7f..b29cab34 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -197,21 +197,24 @@ function morphFrame(current) function setOnFrame(fn) { - + //Hard or soft transition if (!crossFade) clearFrame(composite); - + onFrame = fn; if (producer_timer != null) clearTimeout(producer_timer); - producer_timer = setTimeout(producer, 1000/producer_framerate); if (consumer_timer != null) clearTimeout(consumer_timer); - consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - + + stream_buffer = []; + + consumer_timer = setTimeout(consumer, 1000/consumer_framerate); + producer_timer = setTimeout(producer, 1000/producer_framerate); + start(); } @@ -222,6 +225,7 @@ function saveOnFrame(){ prevAlpha = alpha; } function restoreOnFrame(){ + consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; @@ -244,7 +248,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { - + consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } @@ -303,14 +307,13 @@ function onExit(){ var pos = 0; var signature = function(){ //Bounce particle off edges of LED strip - if (pos++ >= getSize()) pos=0; + if (pos++ >= getSize()+20) pos=0; var frame = newFrame(); - - frame[pos*3+0] = 255; //R - frame[pos*3+1] = 255; //G - frame[pos*3+2] = 255; //B - - console.log(stream_buffer.length); + if(pos < size){ + frame[pos*3+0] = 255; //R + frame[pos*3+1] = 255; //G + frame[pos*3+2] = 255; //B + } produceFrame(frame); }; From c2a91b58b45a5c1d40d241bf103cd4fd70b78f8e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:27:02 -0500 Subject: [PATCH 475/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index b29cab34..83eec601 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -152,7 +152,8 @@ function fadeOut(frame){ //Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { - if (stream_buffer.length==0) //Skip frame if consumer is falling behind + console.log(stream_buffer.length); + if (sh==0) //Skip frame if consumer is falling behind stream_buffer.push(frame); } From 7b9215ad1f206845b95c8638b800c22e5348156f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:27:44 -0500 Subject: [PATCH 476/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 83eec601..02fc3848 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -153,7 +153,7 @@ function fadeOut(frame){ function produceFrame(frame) { console.log(stream_buffer.length); - if (sh==0) //Skip frame if consumer is falling behind + if (stream_buffer.length==0) //Skip frame if consumer is falling behind stream_buffer.push(frame); } From 412951e9559ca98bade52b0c4bfa5b501b87c2bd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:28:07 -0500 Subject: [PATCH 477/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 02fc3848..dd90025d 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -153,7 +153,7 @@ function fadeOut(frame){ function produceFrame(frame) { console.log(stream_buffer.length); - if (stream_buffer.length==0) //Skip frame if consumer is falling behind + if (stream_buffer.length<2) //Skip frame if consumer is falling behind stream_buffer.push(frame); } From d15b66fe15eb047c7f261cfbbec7cc160b7cbac3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:32:58 -0500 Subject: [PATCH 478/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index ddd423f9..6aff14ae 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -28,11 +28,12 @@ function image(){ //Configure stream function init(filename, num_frames){ + flex_stream.saveOnFrame(); sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; - flex_stream.saveOnFrame(); + flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); From 0c359244e7823e3f1d390f460fae0f76b2cb0317 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:38:43 -0500 Subject: [PATCH 479/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index dd90025d..423bb7ac 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -205,16 +205,16 @@ function setOnFrame(fn) onFrame = fn; - if (producer_timer != null) - clearTimeout(producer_timer); - - if (consumer_timer != null) - clearTimeout(consumer_timer); +// if (producer_timer != null) +// clearTimeout(producer_timer); +// +// if (consumer_timer != null) +// clearTimeout(consumer_timer); stream_buffer = []; - consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - producer_timer = setTimeout(producer, 1000/producer_framerate); +// consumer_timer = setTimeout(consumer, 1000/consumer_framerate); +// producer_timer = setTimeout(producer, 1000/producer_framerate); start(); } From 066994a984184f6c78da0d16ff63a612ccef2869 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:38:55 -0500 Subject: [PATCH 480/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 6aff14ae..97f51d7d 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -28,12 +28,12 @@ function image(){ //Configure stream function init(filename, num_frames){ - flex_stream.saveOnFrame(); + sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; - + flex_stream.saveOnFrame(); flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); From 75120a8b97e6f7011df1becfb85a5cdea9368873 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:40:46 -0500 Subject: [PATCH 481/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 423bb7ac..c9325e45 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -198,24 +198,24 @@ function morphFrame(current) function setOnFrame(fn) { - + //Hard or soft transition if (!crossFade) clearFrame(composite); - + onFrame = fn; // if (producer_timer != null) -// clearTimeout(producer_timer); -// +// clearTimeout(producer_timer); + // if (consumer_timer != null) -// clearTimeout(consumer_timer); - +// clearTimeout(consumer_timer); + stream_buffer = []; - + // consumer_timer = setTimeout(consumer, 1000/consumer_framerate); // producer_timer = setTimeout(producer, 1000/producer_framerate); - + start(); } @@ -249,7 +249,7 @@ function getProducerFramerate() function setConsumerFramerate(framerate) { - + consumer_framerate = Math.max(1, Math.min(framerate, 60)); //Clamp between 1 and 60 fps } @@ -330,7 +330,10 @@ function init(){ setConsumerFramerate(60); setAlpha(0.05); setOnFrame(signature); + producer(); + consumer(); } -init(); +if (device) + init(); From 14a333d178656c23115f556e68ac23bd07ab57ca Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:44:28 -0500 Subject: [PATCH 482/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index c9325e45..aeee9c78 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -330,10 +330,12 @@ function init(){ setConsumerFramerate(60); setAlpha(0.05); setOnFrame(signature); - producer(); - consumer(); + } if (device) +{ init(); - + producer(); + consumer(); +} From 096f333d84c1922e9c8afff051619b9e6c424eeb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:45:31 -0500 Subject: [PATCH 483/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index aeee9c78..27614504 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -152,7 +152,6 @@ function fadeOut(frame){ //Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { - console.log(stream_buffer.length); if (stream_buffer.length<2) //Skip frame if consumer is falling behind stream_buffer.push(frame); } @@ -294,7 +293,6 @@ process.on('SIGTERM', onExit); process.on('SIGINT', onExit); function onExit(){ - console.log("FLEX STREAM EXIT"); stop(); //Disable streaming to ensure no pending frames are set after LEDs are turned off var frame = newFrame(); clearFrame(frame); From 43d639bc41509bfedfe3d4326b8d74c4322f4c46 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:48:45 -0500 Subject: [PATCH 484/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 + examples/flex_stream/flex_stream_webserver.js | 4 ++++ examples/flex_stream/image.js | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 5407a8f3..ab09e4bd 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,6 +9,7 @@

      Flex Stream Examples

      • CPU Meter
      • Ambilight +
      • Image
      • Times Square
      • Fireplace
      • Unicorn diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index a9354060..56f1acbf 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -7,6 +7,7 @@ const express = require('express'); var path = require('path'); const flex_stream = require("./flex_stream.js"); const ambilight = require("./ambilight.js"); +const ambilight = require("./image.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); @@ -25,6 +26,9 @@ app.get('/', function (req, res) { case "cpu_meter": cpu_meter.init(); break; + case "image": + image.init("/img/flex_stream.jpg", 60); + break; case "aurora": aurora.init(); break; diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 97f51d7d..5528348f 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -35,7 +35,7 @@ function init(filename, num_frames){ duration = num_frames; flex_stream.saveOnFrame(); flex_stream.setSize(8); - flex_stream.setProducerFramerate(30); + flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); flex_stream.setOnFrame(image); From 6228b54a607b8a444c15d9d68fa881b08d560748 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:49:05 -0500 Subject: [PATCH 485/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 56f1acbf..6d569fac 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -7,7 +7,7 @@ const express = require('express'); var path = require('path'); const flex_stream = require("./flex_stream.js"); const ambilight = require("./ambilight.js"); -const ambilight = require("./image.js"); +const image = require("./image.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); From aa08e4defc51caa04f06d1374fc7090af66324c0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:50:54 -0500 Subject: [PATCH 486/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 6d569fac..b5a9c447 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "image": - image.init("/img/flex_stream.jpg", 60); + image.init("img/flex_stream.jpg", 60); break; case "aurora": aurora.init(); From e50c684d52348fd61393c3d47e192f7b2797ef59 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:54:47 -0500 Subject: [PATCH 487/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 5528348f..2d9c3cd5 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -35,7 +35,7 @@ function init(filename, num_frames){ duration = num_frames; flex_stream.saveOnFrame(); flex_stream.setSize(8); - flex_stream.setProducerFramerate(60); + flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); flex_stream.setOnFrame(image); From 968eb6bd8f82f2e5abbaec0d1266bf141c1057f3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Sun, 7 Jan 2018 23:55:02 -0500 Subject: [PATCH 488/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index b5a9c447..78c82332 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "image": - image.init("img/flex_stream.jpg", 60); + image.init("img/flex_stream.jpg", 10); break; case "aurora": aurora.init(); From b4343e47712d5825115753f83811ce02f23618e4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:02:23 -0500 Subject: [PATCH 489/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 ++- examples/flex_stream/image.js | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 27614504..39ac64bb 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -219,13 +219,14 @@ function setOnFrame(fn) } function saveOnFrame(){ + console.log("RESTSORE"); prevOnFrame = onFrame; prevConsumerFramerate = consumer_framerate; prevProducerFramerate = producer_framerate; prevAlpha = alpha; } function restoreOnFrame(){ - + console.log("RESTSORE"); consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 2d9c3cd5..92407617 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -29,7 +29,6 @@ function image(){ function init(filename, num_frames){ - sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; duration = num_frames; @@ -42,7 +41,7 @@ function init(filename, num_frames){ }); } -//Run from commandline +//Run from command line if (!module.parent) init(process.argv[2], process.argv[3]); From a327d60449328a7eeeb0ba7450322774a26f0a94 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:02:56 -0500 Subject: [PATCH 490/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 39ac64bb..4b1710ab 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -226,7 +226,7 @@ function saveOnFrame(){ prevAlpha = alpha; } function restoreOnFrame(){ - console.log("RESTSORE"); + console.log("RESTORE"); consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; From 12c7b75ca648b39c2a5e6daaf92f67d3dcd5579d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:04:04 -0500 Subject: [PATCH 491/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 4b1710ab..e74733ba 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -219,7 +219,7 @@ function setOnFrame(fn) } function saveOnFrame(){ - console.log("RESTSORE"); + console.log("SAVE"); prevOnFrame = onFrame; prevConsumerFramerate = consumer_framerate; prevProducerFramerate = producer_framerate; From 19cf8bade2c88f3ec5e81ee6f46a639ea282e56a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:05:01 -0500 Subject: [PATCH 492/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 92407617..d83eb007 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -28,10 +28,9 @@ function image(){ //Configure stream function init(filename, num_frames){ - + duration = num_frames; sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; - duration = num_frames; flex_stream.saveOnFrame(); flex_stream.setSize(8); flex_stream.setProducerFramerate(10); From a1d323989fd6e164da699761578a145de2d4a6ea Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:07:12 -0500 Subject: [PATCH 493/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index d83eb007..fc26c3b4 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -19,6 +19,7 @@ var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ + console.log(duration); if (duration-- == 0) flex_stream.restoreOnFrame(); else From 705d47777d5ba3e8625681363d382b16e3e4b177 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:08:41 -0500 Subject: [PATCH 494/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index fc26c3b4..ccbe8fa9 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -6,8 +6,8 @@ //For Windows, Linux and Mac module.exports = { - init: function(filename) { - init(filename); + init: function(filename, duration) { + init(filename, duration); } } @@ -19,7 +19,6 @@ var duration = -1; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - console.log(duration); if (duration-- == 0) flex_stream.restoreOnFrame(); else From a5e5cbdd293b707e0695991a74984dbcf6696a84 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:12:08 -0500 Subject: [PATCH 495/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index ccbe8fa9..88ba868f 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -6,8 +6,8 @@ //For Windows, Linux and Mac module.exports = { - init: function(filename, duration) { - init(filename, duration); + init: function(filename, sec) { + init(filename, sec); } } @@ -15,25 +15,28 @@ const flex_stream = require("./flex_stream.js"); const sharp = require('sharp'); //Available at npmjs.com var frame = null; -var duration = -1; //Default static image. +var num_frames = 0; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - if (duration-- == 0) - flex_stream.restoreOnFrame(); - else + if (duration-- > 0) flex_stream.produceFrame(frame); + else + flex_stream.restoreOnFrame(); } //Configure stream -function init(filename, num_frames){ - duration = num_frames; +function init(filename, sec){ + + if (sec >= 0) + num_frames = sec/60; + sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; flex_stream.saveOnFrame(); flex_stream.setSize(8); - flex_stream.setProducerFramerate(10); + flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); flex_stream.setOnFrame(image); From 7e09cc1e1d94f7e146e057d02e5fe7b2114743ac Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:13:12 -0500 Subject: [PATCH 496/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 88ba868f..bf8122fc 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -19,7 +19,7 @@ var num_frames = 0; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - if (duration-- > 0) + if (num_frames-- > 0) flex_stream.produceFrame(frame); else flex_stream.restoreOnFrame(); @@ -30,7 +30,7 @@ function image(){ function init(filename, sec){ if (sec >= 0) - num_frames = sec/60; + num_frames = sec*60; sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; From 2319e08646f1bde20fea03119ff1533e85140117 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:15:10 -0500 Subject: [PATCH 497/581] Signed-off-by: dcerisano --- examples/flex_stream/image.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index bf8122fc..7903d2e8 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -19,6 +19,8 @@ var num_frames = 0; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ + console.log(num_frames); + if (num_frames-- > 0) flex_stream.produceFrame(frame); else From 7e5e570ef8046991c97a44aef0df48e331b25072 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:16:36 -0500 Subject: [PATCH 498/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 78c82332..5db224f8 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "image": - image.init("img/flex_stream.jpg", 10); + image.init("img/flex_stream.jpg", .5); break; case "aurora": aurora.init(); From b2a9fe7813be39a6b9e5595c0add81ba8a7e8b70 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:18:06 -0500 Subject: [PATCH 499/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 5db224f8..6dfdd4f7 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "image": - image.init("img/flex_stream.jpg", .5); + image.init("img/flex_stream.jpg", .1); break; case "aurora": aurora.init(); From d18596af2602fff53722270a23ef78ee6c9e9aa9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:18:53 -0500 Subject: [PATCH 500/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index ab09e4bd..aa09c695 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@

        Flex Stream Examples

        • CPU Meter
        • Ambilight -
        • Image +
        • Notification
        • Times Square
        • Fireplace
        • Unicorn From 1799f7b34dbbad94ed603be31bc1ecef4271a4a9 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:20:32 -0500 Subject: [PATCH 501/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 -- examples/flex_stream/image.js | 2 -- 2 files changed, 4 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e74733ba..0136d07c 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -219,14 +219,12 @@ function setOnFrame(fn) } function saveOnFrame(){ - console.log("SAVE"); prevOnFrame = onFrame; prevConsumerFramerate = consumer_framerate; prevProducerFramerate = producer_framerate; prevAlpha = alpha; } function restoreOnFrame(){ - console.log("RESTORE"); consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; diff --git a/examples/flex_stream/image.js b/examples/flex_stream/image.js index 7903d2e8..bf8122fc 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/image.js @@ -19,8 +19,6 @@ var num_frames = 0; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function image(){ - console.log(num_frames); - if (num_frames-- > 0) flex_stream.produceFrame(frame); else From 5da77b1e601adf7960e20b9f24e1750431722412 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:27:03 -0500 Subject: [PATCH 502/581] Signed-off-by: dcerisano --- .../flex_stream/{image.js => notifier.js} | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) rename examples/flex_stream/{image.js => notifier.js} (88%) diff --git a/examples/flex_stream/image.js b/examples/flex_stream/notifier.js similarity index 88% rename from examples/flex_stream/image.js rename to examples/flex_stream/notifier.js index bf8122fc..94f50dcf 100644 --- a/examples/flex_stream/image.js +++ b/examples/flex_stream/notifier.js @@ -14,32 +14,38 @@ module.exports = { const flex_stream = require("./flex_stream.js"); const sharp = require('sharp'); //Available at npmjs.com var frame = null; - +var notifying = false; var num_frames = 0; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline -function image(){ +function notifier(){ if (num_frames-- > 0) flex_stream.produceFrame(frame); else + { flex_stream.restoreOnFrame(); + notifying = false; + } } //Configure stream function init(filename, sec){ + + if (sec >= 0) + num_frames = sec*60; - if (sec >= 0) - num_frames = sec*60; - + if(!notifying) + flex_stream.saveOnFrame(); + sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; - flex_stream.saveOnFrame(); + flex_stream.setSize(8); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setAlpha(1); - flex_stream.setOnFrame(image); + flex_stream.setOnFrame(notifier); }); } From ec2f5c91aa156ecbf684bce0d0495417ad744b44 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:27:37 -0500 Subject: [PATCH 503/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 94f50dcf..aeabcbbb 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -34,9 +34,11 @@ function init(filename, sec){ if (sec >= 0) num_frames = sec*60; - - if(!notifying) + + if(!notifying){ + notifying = true; flex_stream.saveOnFrame(); + } sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; From f9606cbbe397e59def4ccc976170a6baa0f10d39 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:29:29 -0500 Subject: [PATCH 504/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- examples/flex_stream/flex_stream_webserver.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index aa09c695..0c38a157 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@

          Flex Stream Examples

          • CPU Meter
          • Ambilight -
          • Notification +
          • Notifier
          • Times Square
          • Fireplace
          • Unicorn diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 6dfdd4f7..c43e281e 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -7,7 +7,7 @@ const express = require('express'); var path = require('path'); const flex_stream = require("./flex_stream.js"); const ambilight = require("./ambilight.js"); -const image = require("./image.js"); +const notifier = require("./notifier.js"); const unicorn = require("./unicorn.js"); const fireplace = require("./fireplace.js"); const aurora = require("./aurora.js"); @@ -26,8 +26,8 @@ app.get('/', function (req, res) { case "cpu_meter": cpu_meter.init(); break; - case "image": - image.init("img/flex_stream.jpg", .1); + case "notifier": + notifier.init("img/flex_stream.jpg", .1); break; case "aurora": aurora.init(); From 72c2853c47c66a20b41200963ded1a544c344d62 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:30:31 -0500 Subject: [PATCH 505/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index c43e281e..9365753f 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - notifier.init("img/flex_stream.jpg", .1); + notifier.init("img/flex_stream.jpg", .2); break; case "aurora": aurora.init(); From ed809a7e3e76cc049b0a8422bcf2d4d131d12094 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:36:08 -0500 Subject: [PATCH 506/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 5 +++-- examples/flex_stream/notifier.js | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 0136d07c..e6155d98 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -199,8 +199,10 @@ function setOnFrame(fn) { //Hard or soft transition - if (!crossFade) + if (!crossFade){ clearFrame(composite); + stream_buffer = []; + } onFrame = fn; @@ -210,7 +212,6 @@ function setOnFrame(fn) // if (consumer_timer != null) // clearTimeout(consumer_timer); - stream_buffer = []; // consumer_timer = setTimeout(consumer, 1000/consumer_framerate); // producer_timer = setTimeout(producer, 1000/producer_framerate); diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index aeabcbbb..d441b228 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -42,7 +42,6 @@ function init(filename, sec){ sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; - flex_stream.setSize(8); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); From ad1161cbad865622c8621e8245d59ad8ce03ae8f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:42:37 -0500 Subject: [PATCH 507/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index e6155d98..91a93940 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -98,6 +98,7 @@ var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause +var transitioning = false; //Semaphore var busy = false; //Semaphore var crossFade = true; //Hard or soft transitions. var producer_timer = null; @@ -116,9 +117,10 @@ function producer(){ //Stream Consumer function consumer(){ - if (streaming) + if (streaming && !transitioning) consumeFrame(); //Render frame to BlinkStick consumer_timer = setTimeout(consumer, 1000/consumer_framerate); + transitioning = true; } //Convert to internal BlinkStick buffer @@ -197,7 +199,7 @@ function morphFrame(current) function setOnFrame(fn) { - + transitioning = true; //Hard or soft transition if (!crossFade){ clearFrame(composite); From 3e56e56bd19ca3dc7f8652e6b127dda335953b8e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:43:20 -0500 Subject: [PATCH 508/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 91a93940..b22eafd6 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -120,7 +120,7 @@ function consumer(){ if (streaming && !transitioning) consumeFrame(); //Render frame to BlinkStick consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - transitioning = true; + transitioning = false; } //Convert to internal BlinkStick buffer From 570ede8af821a6fbb8bf047c95477348f716e407 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:46:24 -0500 Subject: [PATCH 509/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index b22eafd6..dc2a11d9 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -166,7 +166,7 @@ function consumeFrame() var grb = convert_grb(rgb); currentFrame = grb; } - if (currentFrame != null) + if (currentFrame != null && !transitioning) morphFrame(currentFrame); //Morph to the current frame } From bfe180b4f345813994c7f3967d440406d28e378a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:50:29 -0500 Subject: [PATCH 510/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index dc2a11d9..eb69b077 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -98,7 +98,6 @@ var stream_buffer = []; //Stream buffer for frames var composite = null; //Composite frame for morphing var currentFrame = null; //Latest frame from stream var streaming = false; //Pause -var transitioning = false; //Semaphore var busy = false; //Semaphore var crossFade = true; //Hard or soft transitions. var producer_timer = null; @@ -117,10 +116,9 @@ function producer(){ //Stream Consumer function consumer(){ - if (streaming && !transitioning) + if (streaming) consumeFrame(); //Render frame to BlinkStick consumer_timer = setTimeout(consumer, 1000/consumer_framerate); - transitioning = false; } //Convert to internal BlinkStick buffer @@ -166,7 +164,7 @@ function consumeFrame() var grb = convert_grb(rgb); currentFrame = grb; } - if (currentFrame != null && !transitioning) + if (currentFrame != null) morphFrame(currentFrame); //Morph to the current frame } @@ -199,13 +197,13 @@ function morphFrame(current) function setOnFrame(fn) { - transitioning = true; + //Hard or soft transition - if (!crossFade){ + if (!crossFade) clearFrame(composite); - stream_buffer = []; - } - + + stream_buffer = []; + onFrame = fn; // if (producer_timer != null) From ec4ca9b7e719b877592058ad7124b43a09ab0994 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:52:30 -0500 Subject: [PATCH 511/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 9365753f..a88ee8aa 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - notifier.init("img/flex_stream.jpg", .2); + notifier.init("img/flex_stream.jpg", .15); break; case "aurora": aurora.init(); From 4f63e7bbf5fe1b254639d4def5d7fb7fc059e220 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:54:07 -0500 Subject: [PATCH 512/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index d441b228..5f0edfce 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -45,7 +45,7 @@ function init(filename, sec){ flex_stream.setSize(8); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); + flex_stream.setAlpha(0.5); flex_stream.setOnFrame(notifier); }); } From ad40320b384743eda0881841aa38149c9f09ff64 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:54:56 -0500 Subject: [PATCH 513/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 5f0edfce..ff2b8b84 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -45,7 +45,7 @@ function init(filename, sec){ flex_stream.setSize(8); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.5); + flex_stream.setAlpha(0.1); flex_stream.setOnFrame(notifier); }); } From f4c51fe38b8bfc19baecf981535a49f252036935 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 00:58:39 -0500 Subject: [PATCH 514/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index ff2b8b84..8a1f1b24 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -19,8 +19,11 @@ var num_frames = 0; //Default static image. //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function notifier(){ - if (num_frames-- > 0) + if (num_frames-- > 0) + { + flex_stream.setAlpha(0.1); flex_stream.produceFrame(frame); + } else { flex_stream.restoreOnFrame(); @@ -45,7 +48,6 @@ function init(filename, sec){ flex_stream.setSize(8); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.1); flex_stream.setOnFrame(notifier); }); } From fc4f9c38ece6be38f3c3036a9b9dfcd888635299 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:02:31 -0500 Subject: [PATCH 515/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 2 +- examples/flex_stream/aurora.js | 1 - examples/flex_stream/cpu_meter.js | 2 +- examples/flex_stream/fireplace.js | 10 +++++----- examples/flex_stream/notifier.js | 2 +- examples/flex_stream/timesquare.js | 2 +- examples/flex_stream/unicorn.js | 2 +- 7 files changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index 5a8c3804..c41a79d4 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -21,6 +21,7 @@ const sharp = require('sharp'); //Available at npmjs.com function ambilight(){ screenshot().then((img) => { sharp(img).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { + flex_stream.setAlpha(0.1); flex_stream.produceFrame(data); }) }); @@ -32,7 +33,6 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(5); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.1); flex_stream.setOnFrame(ambilight); } diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index 49959ef5..fd93b0d3 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -47,7 +47,6 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); flex_stream.setOnFrame(aurora); } diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index 05be8e5a..e318c622 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -46,6 +46,7 @@ function cpuMeter() { frame[pos*3+2] = 2; //B flex_stream.setProducerFramerate(framerate); + flex_stream.setAlpha(0.25); flex_stream.produceFrame(frame); } @@ -71,7 +72,6 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.25); flex_stream.setOnFrame(cpuMeter); } diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 408ea700..5917478a 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -26,11 +26,12 @@ function fireplace() { frame[i*3+2] = 0; //B } - //Flickering flames - f = Math.random(); - flex_stream.setProducerFramerate(f*10+2); - flex_stream.setAlpha(.05+(f/20)); + } + //Flickering flames + f = Math.random(); + flex_stream.setProducerFramerate(f*10+2); + flex_stream.setAlpha(.05+(f/20)); flex_stream.produceFrame(frame); } @@ -40,7 +41,6 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(15); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(1); flex_stream.setOnFrame(fireplace); } diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 8a1f1b24..c165c5bb 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -21,7 +21,7 @@ var num_frames = 0; //Default static image. function notifier(){ if (num_frames-- > 0) { - flex_stream.setAlpha(0.1); + flex_stream.setAlpha(1); flex_stream.produceFrame(frame); } else diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index e91b209c..f6a0d231 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -38,6 +38,7 @@ function timesquare() { frame[(size-1)*3+1] = Math.floor(g); //G frame[(size-1)*3+2] = Math.floor(b); //B + flex_stream.setAlpha(0.1); flex_stream.produceFrame(frame); } @@ -47,7 +48,6 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(8); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.1); flex_stream.setOnFrame(timesquare); } diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index 190c0b21..b543b7e7 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -27,6 +27,7 @@ function unicorn() { frame[i*3+1] = Math.floor(g); //G frame[i*3+2] = Math.floor(b); //B } + flex_stream.setAlpha(0.1); flex_stream.produceFrame(frame); } @@ -36,7 +37,6 @@ function init(){ flex_stream.setSize(8); flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); - flex_stream.setAlpha(0.1); flex_stream.setOnFrame(unicorn); } From c56a7f1c4451d7faf6be8cb7465e39119f4626d8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:08:08 -0500 Subject: [PATCH 516/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index c165c5bb..36aee067 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -21,7 +21,7 @@ var num_frames = 0; //Default static image. function notifier(){ if (num_frames-- > 0) { - flex_stream.setAlpha(1); + flex_stream.setAlpha(.5); flex_stream.produceFrame(frame); } else From 7e46e677cc139624fca931b9b76d797f0e1adfc6 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:10:09 -0500 Subject: [PATCH 517/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- examples/flex_stream/notifier.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index a88ee8aa..9365753f 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - notifier.init("img/flex_stream.jpg", .15); + notifier.init("img/flex_stream.jpg", .2); break; case "aurora": aurora.init(); diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 36aee067..672c6035 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -21,7 +21,7 @@ var num_frames = 0; //Default static image. function notifier(){ if (num_frames-- > 0) { - flex_stream.setAlpha(.5); + flex_stream.setAlpha(.25); flex_stream.produceFrame(frame); } else From 68bac3d429dd6f5f2cd840cf9d07de7530053cbb Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:11:02 -0500 Subject: [PATCH 518/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 672c6035..1bd532ea 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -21,7 +21,7 @@ var num_frames = 0; //Default static image. function notifier(){ if (num_frames-- > 0) { - flex_stream.setAlpha(.25); + flex_stream.setAlpha(.2); flex_stream.produceFrame(frame); } else From 8fad26c0ec6ee6f5c7a8dd3af33b37cfd682e335 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:12:21 -0500 Subject: [PATCH 519/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 9365753f..abaf79af 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - notifier.init("img/flex_stream.jpg", .2); + notifier.init("img/flex_stream.jpg", .3); break; case "aurora": aurora.init(); From 87a5ef681e9fb148bf7a102d4419c4bcf394a489 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:12:40 -0500 Subject: [PATCH 520/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index abaf79af..bbe857bc 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,7 +27,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - notifier.init("img/flex_stream.jpg", .3); + notifier.init("img/flex_stream.jpg", .3); // .3 secs break; case "aurora": aurora.init(); From cee68a5f111f0b5e4ff02d931e3ce05ad819028c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:20:06 -0500 Subject: [PATCH 521/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index bbe857bc..691d4c84 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -16,7 +16,6 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() - app.get('/', function (req, res) { var example = req.query.example; From 9f5ca951f6b953b9c8d73b247fdacda296bab42b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:29:32 -0500 Subject: [PATCH 522/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 examples/flex_stream/TODO.txt diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt new file mode 100644 index 00000000..59c16ae3 --- /dev/null +++ b/examples/flex_stream/TODO.txt @@ -0,0 +1,3 @@ +Specify width and height for matrices, setSize(W,H) getSize()==>WxH + - Sharp package's rasterized buffers already compatible with rasterized matrices + Add more notification images (s3d, vrip, twitter, etc) \ No newline at end of file From 720e522167d8def9986f1a97a2ff2052b39fc34e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:30:08 -0500 Subject: [PATCH 523/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index 59c16ae3..a9a35141 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -1,3 +1,4 @@ Specify width and height for matrices, setSize(W,H) getSize()==>WxH - Sharp package's rasterized buffers already compatible with rasterized matrices - Add more notification images (s3d, vrip, twitter, etc) \ No newline at end of file + Add more notification images (s3d, vrip, twitter, etc) + Make web UI prettier \ No newline at end of file From 9bb5304abe9e97f49b0a7f7efb56c4ed54727bb4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:41:58 -0500 Subject: [PATCH 524/581] Signed-off-by: dcerisano --- examples/flex_stream/ambilight.js | 4 ++-- examples/flex_stream/aurora.js | 2 +- examples/flex_stream/cpu_meter.js | 2 +- examples/flex_stream/fireplace.js | 2 +- examples/flex_stream/flex_stream.js | 24 +++++++++++++++++------- examples/flex_stream/notifier.js | 4 ++-- examples/flex_stream/timesquare.js | 2 +- examples/flex_stream/unicorn.js | 2 +- 8 files changed, 26 insertions(+), 16 deletions(-) diff --git a/examples/flex_stream/ambilight.js b/examples/flex_stream/ambilight.js index c41a79d4..8db21d1c 100644 --- a/examples/flex_stream/ambilight.js +++ b/examples/flex_stream/ambilight.js @@ -20,7 +20,7 @@ const sharp = require('sharp'); //Available at npmjs.com //Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline function ambilight(){ screenshot().then((img) => { - sharp(img).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { + sharp(img).resize(flex_stream.getWidth(),flex_stream.getHeight()).ignoreAspectRatio().raw().toBuffer().then(data => { flex_stream.setAlpha(0.1); flex_stream.produceFrame(data); }) @@ -30,7 +30,7 @@ function ambilight(){ //Configure stream function init(){ - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(5); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(ambilight); diff --git a/examples/flex_stream/aurora.js b/examples/flex_stream/aurora.js index fd93b0d3..06206fd7 100644 --- a/examples/flex_stream/aurora.js +++ b/examples/flex_stream/aurora.js @@ -44,7 +44,7 @@ function aurora() { //Configure stream function init(){ - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(aurora); diff --git a/examples/flex_stream/cpu_meter.js b/examples/flex_stream/cpu_meter.js index e318c622..466ab49c 100644 --- a/examples/flex_stream/cpu_meter.js +++ b/examples/flex_stream/cpu_meter.js @@ -69,7 +69,7 @@ function cpuLoad() { //Configure stream function init(){ - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(30); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(cpuMeter); diff --git a/examples/flex_stream/fireplace.js b/examples/flex_stream/fireplace.js index 5917478a..61f54000 100644 --- a/examples/flex_stream/fireplace.js +++ b/examples/flex_stream/fireplace.js @@ -38,7 +38,7 @@ function fireplace() { //Configure stream function init(){ - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(15); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(fireplace); diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index eb69b077..a32452ee 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -57,14 +57,22 @@ module.exports = { { return getConsumerFramerate(); }, - setSize: function(size) + setSize: function(w, h) { - setSize(size); + setSize(w, h); }, getSize: function() { return getSize(); }, + getWidth: function() + { + return width; + }, + getHeight: function() + { + return height; + }, setCrossFade: function(fade) { crossFade = fade; @@ -90,7 +98,8 @@ module.exports = { var blinkstick = require('blinkstick'); var device = blinkstick.findFirst(); var MAX_SIZE = 64; //BlinkStick single channel limit -var size = 8; //Default 8 LEDs. +var width = 8; //Default 8 LEDs in a +var height = 1; //single row. var producer_framerate = 20; //Default low frame production for morphing var consumer_framerate = 60; //Default high frame rendering for morphing var alpha = 0.1; //Default is transparent frames for morphing @@ -257,14 +266,15 @@ function getConsumerFramerate() return consumer_framerate; } -function setSize(s) +function setSize(w,h) { - size = Math.max(1, Math.min(s, MAX_SIZE)); //Clamp between 1 and MAX_SIZE (64 for BlinkStick single channel) + width = Math.max(1, Math.min(w, MAX_SIZE)); //Clamp between 1 and MAX_SIZE (64 for BlinkStick single channel) + height = Math.max(1, Math.min(h, MAX_SIZE/w)); //Clamp between 1 and MAX_SIZE/width } function getSize() { - return size; + return width*height; } function setAlpha(a) @@ -323,7 +333,7 @@ var fadeToBlack = function(){ }; function init(){ - setSize(8); + setSize(8,1); setProducerFramerate(20); setConsumerFramerate(60); setAlpha(0.05); diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 1bd532ea..7544403a 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -43,9 +43,9 @@ function init(filename, sec){ flex_stream.saveOnFrame(); } - sharp(filename).resize(flex_stream.getSize(),1).ignoreAspectRatio().raw().toBuffer().then(data => { + sharp(filename).resize(flex_stream.getWidth(),getHeight()).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(60); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(notifier); diff --git a/examples/flex_stream/timesquare.js b/examples/flex_stream/timesquare.js index f6a0d231..08b2a2db 100644 --- a/examples/flex_stream/timesquare.js +++ b/examples/flex_stream/timesquare.js @@ -45,7 +45,7 @@ function timesquare() { //Configure stream function init(){ - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(8); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(timesquare); diff --git a/examples/flex_stream/unicorn.js b/examples/flex_stream/unicorn.js index b543b7e7..9a67367f 100644 --- a/examples/flex_stream/unicorn.js +++ b/examples/flex_stream/unicorn.js @@ -34,7 +34,7 @@ function unicorn() { //Configure stream function init(){ - flex_stream.setSize(8); + flex_stream.setSize(8,1); flex_stream.setProducerFramerate(10); flex_stream.setConsumerFramerate(60); flex_stream.setOnFrame(unicorn); From abe7744c127a623d4005ea6d2ac75941d84e49c3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:43:33 -0500 Subject: [PATCH 525/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index a32452ee..2b7762d7 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -318,7 +318,7 @@ var signature = function(){ //Bounce particle off edges of LED strip if (pos++ >= getSize()+20) pos=0; var frame = newFrame(); - if(pos < size){ + if(pos < getSize()){ frame[pos*3+0] = 255; //R frame[pos*3+1] = 255; //G frame[pos*3+2] = 255; //B From cf29cd33fbdd154c54f119a69d445077eb954219 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:44:44 -0500 Subject: [PATCH 526/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 7544403a..118136b8 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -43,7 +43,7 @@ function init(filename, sec){ flex_stream.saveOnFrame(); } - sharp(filename).resize(flex_stream.getWidth(),getHeight()).ignoreAspectRatio().raw().toBuffer().then(data => { + sharp(filename).resize(flex_stream.getWidth(),flex_stream.getHeight()).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; flex_stream.setSize(8,1); flex_stream.setProducerFramerate(60); From 7c020917a3319d07e4752ad7ea58e5e6bbbb72e0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 01:53:18 -0500 Subject: [PATCH 527/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index a9a35141..00b5db37 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -1,4 +1,11 @@ -Specify width and height for matrices, setSize(W,H) getSize()==>WxH - - Sharp package's rasterized buffers already compatible with rasterized matrices - Add more notification images (s3d, vrip, twitter, etc) - Make web UI prettier \ No newline at end of file +TODO +Multi-channel support +- Might require firmware changes to setColors() to send all channels in one call. +- Possibly not + +Add more notification images (s3d, vrip, twitter, etc) +Make web UI prettier + + DONE + Specify width and height for matrices, setSize(W,H) getSize()==>WxH + - Sharp package's rasterized buffers already compatible with rasterized matrices \ No newline at end of file From 645387c33f6f997e311e571baaf33cb60153902c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:09:28 -0500 Subject: [PATCH 528/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 2b7762d7..31d6e17e 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -81,7 +81,7 @@ module.exports = { { return crossFade; }, - start: function(size) + start: function() { start(); }, @@ -149,7 +149,7 @@ function newFrame(){ //Clear a frame function clearFrame(frame){ if (frame != null) - for (i=0; i Date: Mon, 8 Jan 2018 02:47:40 -0500 Subject: [PATCH 529/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 691d4c84..ddd24249 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -26,7 +26,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - notifier.init("img/flex_stream.jpg", .3); // .3 secs + notifier.init(path.join(__dirname + "img/flex_stream.jpg"), .3); // .3 secs break; case "aurora": aurora.init(); From 8b3b2452ba3ab1292d9ba6f11d02af8567552ae3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:50:35 -0500 Subject: [PATCH 530/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index ddd24249..c06b2290 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -26,6 +26,8 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": + var path = path.join(__dirname + "img/flex_stream.jpg"); + console.log(path); notifier.init(path.join(__dirname + "img/flex_stream.jpg"), .3); // .3 secs break; case "aurora": From 22bc1d034c87447e47aa43ab92dc64be12b385b0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:51:38 -0500 Subject: [PATCH 531/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index c06b2290..4ebc8c3f 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -26,9 +26,9 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - var path = path.join(__dirname + "img/flex_stream.jpg"); - console.log(path); - notifier.init(path.join(__dirname + "img/flex_stream.jpg"), .3); // .3 secs + var fn = path.join(__dirname + "img/flex_stream.jpg"); + console.log(fn); + notifier.init(fn, .3); // .3 secs break; case "aurora": aurora.init(); From 114b57c5ae31b42dfbbaff683526c5f26996fabe Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:52:23 -0500 Subject: [PATCH 532/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 4ebc8c3f..aa2dbdb9 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -26,7 +26,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - var fn = path.join(__dirname + "img/flex_stream.jpg"); + var fn = path.join(__dirname + "/img/flex_stream.jpg"); console.log(fn); notifier.init(fn, .3); // .3 secs break; From 01204f82286c9be16a68c876fff6ccc76028ca18 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:53:44 -0500 Subject: [PATCH 533/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index aa2dbdb9..5a84b8e8 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -26,9 +26,7 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - var fn = path.join(__dirname + "/img/flex_stream.jpg"); - console.log(fn); - notifier.init(fn, .3); // .3 secs + notifier.init(path.join(__dirname + "/img/flex_stream.jpg"), .3); // .3 secs break; case "aurora": aurora.init(); From 8f42fc171b70ecf709daeb14b932fc2323a25695 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:56:48 -0500 Subject: [PATCH 534/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 31d6e17e..f3f6d4d0 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -229,15 +229,17 @@ function setOnFrame(fn) } function saveOnFrame(){ - prevOnFrame = onFrame; + prevOnFrame = onFrame; prevConsumerFramerate = consumer_framerate; prevProducerFramerate = producer_framerate; - prevAlpha = alpha; + prevAlpha = alpha; + prevStreaming = streaming } function restoreOnFrame(){ consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; + streaming = prevStreaming; setOnFrame(prevOnFrame); } From 2b79bc205f0165facda0ca5784741f3808e21b78 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:57:48 -0500 Subject: [PATCH 535/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index f3f6d4d0..143a511a 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -239,8 +239,10 @@ function restoreOnFrame(){ consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; - streaming = prevStreaming; + setOnFrame(prevOnFrame); + + streaming = prevStreaming; } //Default onFrame() stub From 75644c62989c296d45ad4037361d2aba8e51a7c3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:58:08 -0500 Subject: [PATCH 536/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index 143a511a..bfcfd664 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -230,10 +230,11 @@ function setOnFrame(fn) function saveOnFrame(){ prevOnFrame = onFrame; + prevStreaming = streaming prevConsumerFramerate = consumer_framerate; prevProducerFramerate = producer_framerate; prevAlpha = alpha; - prevStreaming = streaming + } function restoreOnFrame(){ consumer_framerate = prevConsumerFramerate; @@ -241,7 +242,6 @@ function restoreOnFrame(){ alpha = prevAlpha; setOnFrame(prevOnFrame); - streaming = prevStreaming; } From 2809a5817e4f3bb21689fc87572a2689cf094827 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 02:59:18 -0500 Subject: [PATCH 537/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index bfcfd664..dbce3df8 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -230,7 +230,6 @@ function setOnFrame(fn) function saveOnFrame(){ prevOnFrame = onFrame; - prevStreaming = streaming prevConsumerFramerate = consumer_framerate; prevProducerFramerate = producer_framerate; prevAlpha = alpha; @@ -240,9 +239,7 @@ function restoreOnFrame(){ consumer_framerate = prevConsumerFramerate; producer_framerate = prevProducerFramerate; alpha = prevAlpha; - setOnFrame(prevOnFrame); - streaming = prevStreaming; } //Default onFrame() stub From 79b490e0403496a485b9a51720b399985b6b7c1f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:05:13 -0500 Subject: [PATCH 538/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 0c38a157..97c3ff86 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -5,7 +5,13 @@ -

            Flex Stream Examples

            + + + + + +
            Flex Stream Examples
            • CPU Meter
            • Ambilight From 12c2f272df4c5f5ecee59e51748eebd326b292f2 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:06:10 -0500 Subject: [PATCH 539/581] Signed-off-by: dcerisano --- .../img/{favicon.png => flex_stream.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/flex_stream/img/{favicon.png => flex_stream.png} (100%) diff --git a/examples/flex_stream/img/favicon.png b/examples/flex_stream/img/flex_stream.png similarity index 100% rename from examples/flex_stream/img/favicon.png rename to examples/flex_stream/img/flex_stream.png From b842a53fc152e59e598eb0d2adbbfbdee7e86afc Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:08:26 -0500 Subject: [PATCH 540/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 5a84b8e8..aad5f9c2 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -70,6 +70,9 @@ app.get('/favicon.ico', function (req, res) { res.sendfile(path.join(__dirname + '/favicon.ico')); }) +app.get('img/flex_stream.png', function (req, res) { + res.sendfile(path.join(__dirname + '/img/flex_stream.png')); +}) var port = process.env.PORT || 5000; From 1eebd95c8c93e4937dd9718c05a591bcc771e95e Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:10:28 -0500 Subject: [PATCH 541/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index aad5f9c2..daa91a2b 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -70,7 +70,7 @@ app.get('/favicon.ico', function (req, res) { res.sendfile(path.join(__dirname + '/favicon.ico')); }) -app.get('img/flex_stream.png', function (req, res) { +app.get('/img/flex_stream.png', function (req, res) { res.sendfile(path.join(__dirname + '/img/flex_stream.png')); }) From 8cb602c035cc3e9bcb2115bb1ee66f46b41bc48a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:11:23 -0500 Subject: [PATCH 542/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 97c3ff86..6335efc3 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@ - Flex Stream Examples +

              Flex Stream Examples

                From 45aaa2a4d7a84ab534497b378d5fffd22790f8e8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:11:46 -0500 Subject: [PATCH 543/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 6335efc3..b695df6b 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -7,7 +7,7 @@ - From f235c452bbf7c2df6153c66687b09aaec04adc17 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:12:19 -0500 Subject: [PATCH 544/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index b695df6b..2712fba1 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@ - +

                Flex Stream Examples

                Flex Stream Examples

                Flex Stream Examples

                  From f02a2008feeec1d394847d0c87515614807e3058 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:14:49 -0500 Subject: [PATCH 545/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 2712fba1..c0463f2e 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -6,10 +6,13 @@ - - - + + +

                  Flex Stream Examples

                  + + +

                  Flex Stream Examples

                  +
                    From f1fe4e06dfd1958e7da91c879b8995386ebc499d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:15:41 -0500 Subject: [PATCH 546/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index c0463f2e..34cd9781 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -4,17 +4,9 @@ Flex Stream Examples - - - - - - -
                    - - -

                    Flex Stream Examples

                    -
                    + +

                    Flex Stream Examples

                    • CPU Meter
                    • Ambilight From 692f1a9d07857dd50f5bcd50fbd1be58675ad172 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:19:17 -0500 Subject: [PATCH 547/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 34cd9781..a969f2f0 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -4,8 +4,7 @@ Flex Stream Examples - +

                      Flex Stream Examples

                      +
                      \ No newline at end of file From 7cf4b5c9ddc85fbd0a5a456484fb430dbdac9e18 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:22:46 -0500 Subject: [PATCH 548/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index a969f2f0..4744121f 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -4,7 +4,7 @@ Flex Stream Examples - +

                      Flex Stream Examples

                      - - +
                    + PAUSE + RESUME + + \ No newline at end of file From 03c6eb59dac72bd1709a0a9fdcfc6e788ca11768 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:23:40 -0500 Subject: [PATCH 549/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 4744121f..7a7354fd 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -17,9 +17,10 @@

                    Flex Stream Examples

                  • Default
                  • Clear
                  +
                  PAUSE RESUME - +
                  From c9c725d9f0c03e8f2fc9f30cacf340d6efa485f0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:24:30 -0500 Subject: [PATCH 550/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 7a7354fd..d55165a1 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -19,6 +19,7 @@

                  Flex Stream Examples


                PAUSE +
                RESUME
                From a5f719934730286524be7c9d896a5fa0fef7c3ca Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:25:17 -0500 Subject: [PATCH 551/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index d55165a1..a2b902f5 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -18,11 +18,12 @@

                Flex Stream Examples

              • Clear

              + +
              PAUSE
              RESUME -
              - +
              \ No newline at end of file From 23913bbb1e90592badd484935bc98cf3fcdfdbe8 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 03:25:34 -0500 Subject: [PATCH 552/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index a2b902f5..49366269 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -23,7 +23,6 @@

              Flex Stream Examples

              PAUSE
              RESUME - \ No newline at end of file From 5d74abdc8fc44a0d06ed7348a674d699552a0102 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:11:56 -0500 Subject: [PATCH 553/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- examples/flex_stream/flex_stream_webserver.js | 8 +++++--- examples/flex_stream/img/s3d.jpg | Bin 0 -> 1496 bytes examples/flex_stream/img/vrip.jpg | Bin 0 -> 4680 bytes 4 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 examples/flex_stream/img/s3d.jpg create mode 100644 examples/flex_stream/img/vrip.jpg diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 49366269..96f7a7fc 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@

              Flex Stream Examples

              • CPU Meter
              • Ambilight -
              • Notifier +
              • Notifier
              • Times Square
              • Fireplace
              • Unicorn diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index daa91a2b..2b8550ff 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -19,14 +19,16 @@ var app = express() app.get('/', function (req, res) { var example = req.query.example; - var filename = "/flex_stream_webserver.html"; + + var ui = "/flex_stream_webserver.html"; switch(example) { case "cpu_meter": cpu_meter.init(); break; case "notifier": - notifier.init(path.join(__dirname + "/img/flex_stream.jpg"), .3); // .3 secs + var filename = req.query.filename; + notifier.init(path.join(__dirname + filename), .3); // .3 secs break; case "aurora": aurora.init(); @@ -63,7 +65,7 @@ app.get('/', function (req, res) { example = "default" } - res.sendfile(path.join(__dirname + filename)); + res.sendfile(path.join(__dirname + ui)); }) app.get('/favicon.ico', function (req, res) { diff --git a/examples/flex_stream/img/s3d.jpg b/examples/flex_stream/img/s3d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bb3a0f5d6270cde669defe699fc20d71530bc59 GIT binary patch literal 1496 zcmex=LJ%Z3btM5{dxG z5Q+={Y5sqRL6C#Nfx&^9QILU2kdaxC@&6G9F|hj?kN`UyD^OgLk%1Yg2}zuljh&N& z>;EkV9%e=cCIMyv1_s9CmwI;35Xjlpr~bh2fLS|}Hi|kdlY8=W$2_ZNEYkXc zU`k=J`6ba=j--|VyLXC6%lY$uvm+a(Qzifqhli7R?1Gg`; z7yV3Gm3C|1k!1{zJ&R=HeFO4Ya_s^VdS9BmemWU)cB^ft596^(PptOMT5yl!R?UKg z(wFkOpH5miJF8k~26M0KiPBnA$322uemXXpFS#pzS~b}0$~RR5b}8=(uYP4US14zG zYG%pz+@(LwYgz8fH(m*RCeszKe!0r_!R_)>HjaCfOX78=`rHn_G39_vrk?Zam#cUm z^e#WeBe+-X#lA?bncJ3c)NHW06w@Al*&pb6Wsv7t*pY*liJ3*fq$FwN_c*^@_n$%VT&icxwyXRqcMGR)$ymQ;YpCrb z`P}j!eZ^W{Pq(e8RD0dCcd=`2>Z+CR1%7AmKT%np zJU3dhE;_4yQr?c!w@kvXMXj3mk$>CnKkk-ORf}$i*i0@x7I$&czD-v{zIW7az5hra z=vz4f21aHUX5^@5U@B&05!lqc8RAh!1~z*ppP9P^V;u6frx@~kDHr}et(MmkE+D=3 zCXe%_jyrXqPR?E^dW7wDnX|x`MdtE*Hl@9AEo9tvcft`{jo#z$btusca-@g=a%_Oy zngC1Y_KJ+Fk50V$=)|j!DWw>oB68#_9B}7jqBqRtBm87X%C-?+I`)FknR>^98Y+ z4@%+!3=ZO23fxl#SWk5@J#}F$TEwt3kRfJ8gI*{eouJeqz);jBW$DT*v#6~v(AiyM w;o>O)7f)$qJQXn|;3omb&^C`%hgCuoCuwasDH@T|wZ_ObOj2nz&&2;X0V3o42LJ#7 literal 0 HcmV?d00001 diff --git a/examples/flex_stream/img/vrip.jpg b/examples/flex_stream/img/vrip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bee7826c8fc13ccafc1719e66bedd63c0166b3f5 GIT binary patch literal 4680 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 cEBE%{w_MLXJY~40^yqb&HVLm87x&)&A4?a Date: Mon, 8 Jan 2018 19:16:39 -0500 Subject: [PATCH 554/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream.js b/examples/flex_stream/flex_stream.js index dbce3df8..3e053681 100644 --- a/examples/flex_stream/flex_stream.js +++ b/examples/flex_stream/flex_stream.js @@ -161,7 +161,7 @@ function fadeOut(frame){ //Produce frame on stream - called from user-defined OnFrame() function produceFrame(frame) { - if (stream_buffer.length<2) //Skip frame if consumer is falling behind + if (stream_buffer.length<=0) //Skip frame if consumer is falling behind stream_buffer.push(frame); } From 1ba21937eaf137f224eaee72e13eb391c9072b49 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:22:56 -0500 Subject: [PATCH 555/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 2b8550ff..3b7ac381 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -28,7 +28,7 @@ app.get('/', function (req, res) { break; case "notifier": var filename = req.query.filename; - notifier.init(path.join(__dirname + filename), .3); // .3 secs + notifier.init(path.join(__dirname + "/" + filename), .3); // .3 secs break; case "aurora": aurora.init(); From fdd75054e3e2c2ce809877ed880012687dedb2ce Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:24:14 -0500 Subject: [PATCH 556/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 3b7ac381..c7c8420d 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -27,8 +27,9 @@ app.get('/', function (req, res) { cpu_meter.init(); break; case "notifier": - var filename = req.query.filename; - notifier.init(path.join(__dirname + "/" + filename), .3); // .3 secs + var filename = path.join(__dirname + "/" + req.query.filename); + console.log(filename); + notifier.init(filename, .3); // .3 secs break; case "aurora": aurora.init(); From 82bff00bf56ba8d3e4304aa0465f717924adb053 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:24:51 -0500 Subject: [PATCH 557/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 96f7a7fc..f93c86fa 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@

                Flex Stream Examples

                • CPU Meter
                • Ambilight -
                • Notifier +
                • Notifier
                • Times Square
                • Fireplace
                • Unicorn From e2d33cab83d17807c60eb2cd827928d78fe2d068 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:25:47 -0500 Subject: [PATCH 558/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- examples/flex_stream/flex_stream_webserver.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index f93c86fa..e2f0cd6d 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,7 @@

                  Flex Stream Examples

                  • CPU Meter
                  • Ambilight -
                  • Notifier +
                  • Notifier
                  • Times Square
                  • Fireplace
                  • Unicorn diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index c7c8420d..88176ccd 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -28,7 +28,6 @@ app.get('/', function (req, res) { break; case "notifier": var filename = path.join(__dirname + "/" + req.query.filename); - console.log(filename); notifier.init(filename, .3); // .3 secs break; case "aurora": From d6f06c068e9bff5db84c3bdd4d1299273c870ae3 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:28:27 -0500 Subject: [PATCH 559/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index e2f0cd6d..11919a08 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -9,7 +9,8 @@

                    Flex Stream Examples

                    • CPU Meter
                    • Ambilight -
                    • Notifier +
                    • Notifier A +
                    • Notifier B
                    • Times Square
                    • Fireplace
                    • Unicorn From 59b5a14065e490246dcf606111d812917075b505 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:30:42 -0500 Subject: [PATCH 560/581] Signed-off-by: dcerisano --- examples/flex_stream/img/vrip.jpg | Bin 4680 -> 3297 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/vrip.jpg b/examples/flex_stream/img/vrip.jpg index bee7826c8fc13ccafc1719e66bedd63c0166b3f5..cb8c70d49fc4e4bce635d3c2ca396e932e070966 100644 GIT binary patch literal 3297 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 cEBE%{w_MLXJY~40^yqb&HVLm87x&)&A4?a Date: Mon, 8 Jan 2018 19:35:01 -0500 Subject: [PATCH 561/581] Signed-off-by: dcerisano --- examples/flex_stream/img/vrip.jpg | Bin 3297 -> 1874 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/vrip.jpg b/examples/flex_stream/img/vrip.jpg index cb8c70d49fc4e4bce635d3c2ca396e932e070966..eea17f860ded436fc1b5c9b3904b88a319852dfc 100644 GIT binary patch literal 1874 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 Date: Mon, 8 Jan 2018 19:36:19 -0500 Subject: [PATCH 562/581] Signed-off-by: dcerisano --- examples/flex_stream/img/s3d.jpg | Bin 1496 -> 1509 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/s3d.jpg b/examples/flex_stream/img/s3d.jpg index 1bb3a0f5d6270cde669defe699fc20d71530bc59..36ed591bd05e2758467c2d127a65990b6723add8 100644 GIT binary patch literal 1509 zcmex=LJ%Z3btM5{dxG z5Q+={Y5sqRL6C#Nfx&^9QILU2kdaxC@&6G9F|hj?kN_Jy2T)v+k%1Yg2}zuljh&N& z>;EkV9%e=cCIMyv1_s8-FPEiH<){jp@LPD^755Ky+XAQQWitl{a@Smx-uQUU3g=5x z+HcJHw#dHu>!zNK#Sv1oI-;L--0hc5b&{L1#O}!Rt%85#*G@_8o^{~L6{q_qZf`1H zYYBW=s`yRac18b#zd4I_Vy>|*TO{^#k$Lj*$bj~xn*19r-@4SZzfP4*dbYvTRABpA z!QFCJr&??^J!(78XDR=%kJdOXZrZqVMeDwd-WwmUg($xCa(?4i9VmbB*G;#Gooje~ zU35RYwd7Yp0Bko=wQgQp}$Z^u3e-0~65uNWNzgU}iNjW&nDh z11QeO%Jg+#(xw#_4R1e-PIWxOokhkt51 z`Sr=V(`iMSQbFl*-e;s8t>=5co?{!OyZWbN%CAr1shcfLdNqyvRiE)Ln0tQd*K=}f z#jgHYu&K6Ed(+K1v)rc4JU;0&+XcVpmwr9x59`kQ7Z7Q;XX?$IbH2)6K95gUHfN|8 zzpO28U+ucJUPEVooY$Le>1q>~sue!jb8w6B&M*6R9=^Kh*8VAC{_9oCqKzkeT$*h0 zDK6m_=bc~iF%Mr|%#AfWqDVtzpmhG#+Xaj zwi(@r??qadDD7;xn|C5fZj0-~_wqnDiU=U3OR!55U`gIykg-@Pz)AC)}?* zQGQh<_|=l**PNDGpc-(gzyR`{0CU3utO#VjAa?UXsa=3k=JJfb%rovL&y;5s3!b&? zcsA!qv0swqazi{iLCHga!7=x`!nW5FqDxQc?s_72w}?A$C+qf@rrYZY_(_0a{tYGn cH-hTlI41vQ@%-DQ^6#KfeL|=G2G{>L0TQ(^O8@`> literal 1496 zcmex=LJ%Z3btM5{dxG z5Q+={Y5sqRL6C#Nfx&^9QILU2kdaxC@&6G9F|hj?kN`UyD^OgLk%1Yg2}zuljh&N& z>;EkV9%e=cCIMyv1_s9CmwI;35Xjlpr~bh2fLS|}Hi|kdlY8=W$2_ZNEYkXc zU`k=J`6ba=j--|VyLXC6%lY$uvm+a(Qzifqhli7R?1Gg`; z7yV3Gm3C|1k!1{zJ&R=HeFO4Ya_s^VdS9BmemWU)cB^ft596^(PptOMT5yl!R?UKg z(wFkOpH5miJF8k~26M0KiPBnA$322uemXXpFS#pzS~b}0$~RR5b}8=(uYP4US14zG zYG%pz+@(LwYgz8fH(m*RCeszKe!0r_!R_)>HjaCfOX78=`rHn_G39_vrk?Zam#cUm z^e#WeBe+-X#lA?bncJ3c)NHW06w@Al*&pb6Wsv7t*pY*liJ3*fq$FwN_c*^@_n$%VT&icxwyXRqcMGR)$ymQ;YpCrb z`P}j!eZ^W{Pq(e8RD0dCcd=`2>Z+CR1%7AmKT%np zJU3dhE;_4yQr?c!w@kvXMXj3mk$>CnKkk-ORf}$i*i0@x7I$&czD-v{zIW7az5hra z=vz4f21aHUX5^@5U@B&05!lqc8RAh!1~z*ppP9P^V;u6frx@~kDHr}et(MmkE+D=3 zCXe%_jyrXqPR?E^dW7wDnX|x`MdtE*Hl@9AEo9tvcft`{jo#z$btusca-@g=a%_Oy zngC1Y_KJ+Fk50V$=)|j!DWw>oB68#_9B}7jqBqRtBm87X%C-?+I`)FknR>^98Y+ z4@%+!3=ZO23fxl#SWk5@J#}F$TEwt3kRfJ8gI*{eouJeqz);jBW$DT*v#6~v(AiyM w;o>O)7f)$qJQXn|;3omb&^C`%hgCuoCuwasDH@T|wZ_ObOj2nz&&2;X0V3o42LJ#7 From 80c94b4615a560d9cecfa841267bfc1ca74e3a16 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:53:38 -0500 Subject: [PATCH 563/581] Signed-off-by: dcerisano --- .../flex_stream/flex_stream_webserver.html | 28 +++++++++---------- examples/flex_stream/flex_stream_webserver.js | 4 +-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index 11919a08..ae78f03a 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -1,29 +1,29 @@ -Flex Stream Examples +Flex Stream Shaders -

                      Flex Stream Examples

                      +

                      Flex Stream shaders



                      - PAUSE + PAUSE
                      - RESUME + RESUME
                      \ No newline at end of file diff --git a/examples/flex_stream/flex_stream_webserver.js b/examples/flex_stream/flex_stream_webserver.js index 88176ccd..895ee0af 100644 --- a/examples/flex_stream/flex_stream_webserver.js +++ b/examples/flex_stream/flex_stream_webserver.js @@ -17,12 +17,12 @@ const cpu_meter = require("./cpu_meter.js"); //This starts first var app = express() app.get('/', function (req, res) { - var example = req.query.example; + var shader = req.query.shader; var ui = "/flex_stream_webserver.html"; - switch(example) { + switch(shader) { case "cpu_meter": cpu_meter.init(); break; From 11f39100c67cd522368b3595bb0808828c85eb6f Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 19:56:41 -0500 Subject: [PATCH 564/581] Signed-off-by: dcerisano --- examples/flex_stream/flex_stream_webserver.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/flex_stream_webserver.html b/examples/flex_stream/flex_stream_webserver.html index ae78f03a..2bf0a5bf 100644 --- a/examples/flex_stream/flex_stream_webserver.html +++ b/examples/flex_stream/flex_stream_webserver.html @@ -5,7 +5,7 @@ -

                      Flex Stream shaders

                      +

                      Flex Stream Shaders

                      • CPU Meter
                      • Ambilight From 3569b17efc923a7aa083cbcfb482883224defdcd Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 20:02:51 -0500 Subject: [PATCH 565/581] Signed-off-by: dcerisano --- examples/flex_stream/img/s3d.jpg | Bin 1509 -> 3920 bytes examples/flex_stream/img/vrip.jpg | Bin 1874 -> 3702 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/s3d.jpg b/examples/flex_stream/img/s3d.jpg index 36ed591bd05e2758467c2d127a65990b6723add8..7dc7c2019a1139edaf5a06e06a9df4bab02b2528 100644 GIT binary patch literal 3920 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 literal 1509 zcmex=LJ%Z3btM5{dxG z5Q+={Y5sqRL6C#Nfx&^9QILU2kdaxC@&6G9F|hj?kN_Jy2T)v+k%1Yg2}zuljh&N& z>;EkV9%e=cCIMyv1_s8-FPEiH<){jp@LPD^755Ky+XAQQWitl{a@Smx-uQUU3g=5x z+HcJHw#dHu>!zNK#Sv1oI-;L--0hc5b&{L1#O}!Rt%85#*G@_8o^{~L6{q_qZf`1H zYYBW=s`yRac18b#zd4I_Vy>|*TO{^#k$Lj*$bj~xn*19r-@4SZzfP4*dbYvTRABpA z!QFCJr&??^J!(78XDR=%kJdOXZrZqVMeDwd-WwmUg($xCa(?4i9VmbB*G;#Gooje~ zU35RYwd7Yp0Bko=wQgQp}$Z^u3e-0~65uNWNzgU}iNjW&nDh z11QeO%Jg+#(xw#_4R1e-PIWxOokhkt51 z`Sr=V(`iMSQbFl*-e;s8t>=5co?{!OyZWbN%CAr1shcfLdNqyvRiE)Ln0tQd*K=}f z#jgHYu&K6Ed(+K1v)rc4JU;0&+XcVpmwr9x59`kQ7Z7Q;XX?$IbH2)6K95gUHfN|8 zzpO28U+ucJUPEVooY$Le>1q>~sue!jb8w6B&M*6R9=^Kh*8VAC{_9oCqKzkeT$*h0 zDK6m_=bc~iF%Mr|%#AfWqDVtzpmhG#+Xaj zwi(@r??qadDD7;xn|C5fZj0-~_wqnDiU=U3OR!55U`gIykg-@Pz)AC)}?* zQGQh<_|=l**PNDGpc-(gzyR`{0CU3utO#VjAa?UXsa=3k=JJfb%rovL&y;5s3!b&? zcsA!qv0swqazi{iLCHga!7=x`!nW5FqDxQc?s_72w}?A$C+qf@rrYZY_(_0a{tYGn cH-hTlI41vQ@%-DQ^6#KfeL|=G2G{>L0TQ(^O8@`> diff --git a/examples/flex_stream/img/vrip.jpg b/examples/flex_stream/img/vrip.jpg index eea17f860ded436fc1b5c9b3904b88a319852dfc..fd00b2c1e0f65158e0c65b80bcbe6dfeef4c105a 100644 GIT binary patch literal 3702 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 F{{W6DB$WUF literal 1874 zcmex=LJ%Z3btM5{dxG z5Q+={Y5sqRL6C#Nfx&^9QILU2kdaxC@&6G9F|hj?kN^h*Cs16Hk%1Yg2}zuRor8^q z_5Upf9%e=cCIMyv1_s81eDS44)Aq!EK3rTDt zIRaiO8872&q?N%y-$@97e245g7B*880ifqNfWnNdO#D$tkKUF^+Hk($Y~t&P9lMiz z!X)2GuCdJ)7tbl|I&6E`w0&*TqqlvA5$QY9Hhf(Z6T9)4HqUpSYjRt=ySG^!O`P{| z*5PX#3(Jm6tTDc098q;mPw&QK(YETgY@qcDf(#6-EWlty02Wp@GiKA$EzK=kA>+Z!+E}=`YWa#x^r99`Iy_{D;ITSh0?`J<1ZLUeM);* zs(e9D@{-BBdz}-u=NKQ}=>1A{!*;Wy0Usx>_-f+K?lSY}-0&|vYsk$F!U7#85o&ZS&>4Yg@KKUnYCq$iK$u1 zW=QZefr8)KB|W5HGNb)$ZnM{Ju_QsZQw7MZT~RVh_#7B3E#72WWk!Dqs5o|2=? zYBM=3MdQAl_!{Z%w#-U9@!w3vGKrU6Y`#VUMOu4bPJFeguh*v}?C@VBr#FU|MR;bV zC_D+RzN~yTRaR=oi?!{)Qd(~$FVm1TIpKI>)%RuYt4>*&8eWX%|8kOh!*QPgqs$4- z6GPwo^oLF<$x2?dP5$L1pg% z44hf7BLq}euT5~6wr*=9Q`D|&ESN&91iUW5nC)=*($%%h{N7<(cx-i}E*N~-ibd%E FO#o-Or Date: Mon, 8 Jan 2018 20:06:36 -0500 Subject: [PATCH 566/581] Signed-off-by: dcerisano --- examples/flex_stream/img/vrip.jpg | Bin 3702 -> 4960 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/vrip.jpg b/examples/flex_stream/img/vrip.jpg index fd00b2c1e0f65158e0c65b80bcbe6dfeef4c105a..9125c9fc2d1b7b0e4b90718b2f5f8995eaee9515 100644 GIT binary patch literal 4960 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�xAhuuR^V@V<+Xk-t;`+b@Ym_26{~eFxQR5 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 F{{W6DB$WUF From 91f9050f526d2714b0f216d82f3b568594e34d4c Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 20:08:15 -0500 Subject: [PATCH 567/581] Signed-off-by: dcerisano --- examples/flex_stream/img/s3d.jpg | Bin 3920 -> 3979 bytes examples/flex_stream/img/vrip.jpg | Bin 4960 -> 4950 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/s3d.jpg b/examples/flex_stream/img/s3d.jpg index 7dc7c2019a1139edaf5a06e06a9df4bab02b2528..43e963276d7ab35d521ac7a7245837c33c14005e 100644 GIT binary patch literal 3979 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 diff --git a/examples/flex_stream/img/vrip.jpg b/examples/flex_stream/img/vrip.jpg index 9125c9fc2d1b7b0e4b90718b2f5f8995eaee9515..60844acf08c314429b9b2ea47053e5d32d1cece5 100644 GIT binary patch literal 4950 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 V2}1Qs&Z{v&Lko0^)#l;r{{y@%C{zFd literal 4960 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�xAhuuR^V@V<+Xk-t;`+b@Ym_26{~eFxQR5 zx_(MqfX1;uuEYWAykweTSigl7`#{(Q4BC#@fa0+2Pkw~b<4 zWe;!8{ma_ok~`Z)O*KyOP%ePQcqZ0>FEQNL5K%uud>&s%w7)vp~(Q{4^POUnABLU5R<~p(Ni0Fe1_Fgi^ z!3J>ix>YT}Izkjv6GVcLHa&&v1dE07dCY2>V6~mJg(py0h_f~u6eT{(v_+V?NunJO z0C=28CJfNy^Rni@j;vpPbMlFgK%eBt0ZDDgv-=~PHvIWNAYqU# z61>TqcVXr!{GQ&D9NN}zxp)9lPnEMxxg6FVHE00z>brFIIKDugj)E8L>Wn@-r(N>s zVI^%jP+GEGcY`%#wlIr?`>y=Cci0^h`MqwDph2YM7ZNkkZB6DrzTBev5{~m!R0QRk zB1nLx;7+-;(jIu2Y+)5rKKl7uzoe$8yVZ6Sr7=G))+)|Gap~K2hRuFWSGD0`A3^UO zi>CX2LOf<~)fsy^TR(eI$~H=?)D_&(B|54QrAO)q55HgXk*C^1Pk&k5JT^bxlfd_A zOFUwF{lTgaethSqm+ritgJx^<&fI`S9&#CI<;HzYtwQ10H2$q!lMO~F?Ed*{-pLd_8L37O42w8~BJJ;-3O=X?dbX^CfAU!BpSya|>r z_09pYu^oB#9XLMvd{LmPfe7i$V)OYvrmH;~)M$*3bC_(a>jBIYkAf&l{e$-JegLtCgo9(B$%iQv z;>*?=z&8xXew;xEbhK#8vhu?PFXp>h5QRu(_Oojxb*&O7=2tery!Y5>?JlGdrB524 zpYYY?>#A;zfMyyqdB&Y_{QU8kSwS2EK)tp=o}_(1VcqrKvC{{@p<;0bf89pgTkexR zyl}F1E7Cu|=^vQxMOmHKV(#{s9#tMI9V}RlKPL3jqU~J~^|j54$Q1XD1E5%UoBE~j z#t$x01pS5EI{ni8$d`{l+VKNA_WM)*P0mWk(xtv3{$ zXKvXS@knpoVEsr9$I@wc&fYOU`)mJX#%DcXY3V4VWpF>gq=)@Li1L#;WQ5SNGd`*5 z5^wr*@dL{6O;Br(Y9l>koc?a%P!{1@(PYabo0{~Xk5Q*YK8Vq%t?D1WLNePX{oRJ` z2p3U48`oput?t@+4t3)2K=U`haS|> z=;tjnU-`C^uDtE?yLNw`OlN3)BNP|N>Q{(vRCx6{Kg);_j^Y0GMJqk-m-}eim3Jwk zZ+mz*|8;J^x?{tGU9uJW#x)~Y_IW%g;#7pn8&diu`;!^pRF|*fjKXsCE?IN$%}svi zJ`@z-rP}*t>25)9*h7Y3)ka*%&ifsmFUgj95A0}n+Up$8;h@+;ikKg%{+t9oJ9a)? z{7rP@Y8O#i{{~(IB^pc|)%n`mj+~3{@9WrEeS5v1CBn|`g!!`fXP2iwTEYJWuWeg! zI8x}sl?-mtl10LcIIJ?RJ=utmv8fq5BLEQ6;3{Hd_J`plKJnP=JUi9Pw4M)TH8uOBlqBcc)LIYibHeJR|i0yPwYjj4rpfu5Oh$f1OQ>hKv#CHnzz zkBPN7;t$Zjnf`scGvhDT2>+u07&v0xC`;S`?%N9iCBDLhrUP?ZA=lziywB-aetraL zzyoJXJ*S2TU5Mwo%hJDU=`EDQK}=kg?WIu@)I=aQr1~05PMCH8%CE?#jHTR=(8dB4 zewmEC+|wKffJo6>ELKDb+Xp-|wHDT*i9G?Qx*c=t)>~Q(T7NDqe@0V zU;+=M<6-XUdRG=pPGj@h^{I()Y=XN+GZ#mdiR=*w!u3;a*R-_}KNW(ilBej=ELAhC zF(+R66<;7l>GKsrW|H)9nQou~#-Z|E|C1Y%SVz5M?>)Mz%NZBF1y zwT8><8GSq36%@1+FM?<$$t4ZP@gs=5 zt*N7~EB(k;QJMg&5hNo{t7GMF&vfRBl!6RP(n;$Q>L&);##RLZKVFHlR7-oFq;nhw l Date: Mon, 8 Jan 2018 20:14:57 -0500 Subject: [PATCH 568/581] Signed-off-by: dcerisano --- examples/flex_stream/img/s3d.jpg | Bin 3979 -> 5772 bytes examples/flex_stream/img/vrip.jpg | Bin 4950 -> 5204 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/s3d.jpg b/examples/flex_stream/img/s3d.jpg index 43e963276d7ab35d521ac7a7245837c33c14005e..95ac4ec7f5f846dceb30814f5ef127a7c399efe5 100644 GIT binary patch literal 5772 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 V2}1Qs&Z{v&Lko0^)#l;r{{y@%C{zFd From 056a2a7102711154e54d57596af4b0338a26943d Mon Sep 17 00:00:00 2001 From: dcerisano Date: Mon, 8 Jan 2018 20:18:19 -0500 Subject: [PATCH 569/581] Signed-off-by: dcerisano --- examples/flex_stream/img/s3d.jpg | Bin 5772 -> 4836 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/s3d.jpg b/examples/flex_stream/img/s3d.jpg index 95ac4ec7f5f846dceb30814f5ef127a7c399efe5..c3840203b0fd59634a37a17e43fcecce3f33c37b 100644 GIT binary patch literal 4836 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 vF5}ms^3Cy;BSMD6liz-ZFUh Date: Mon, 8 Jan 2018 22:04:56 -0500 Subject: [PATCH 570/581] Signed-off-by: dcerisano --- examples/flex_stream/img/twitter.jpg | Bin 0 -> 4614 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/flex_stream/img/twitter.jpg diff --git a/examples/flex_stream/img/twitter.jpg b/examples/flex_stream/img/twitter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f26664d11bd30a8999cfe4a80ba1a5f5dd01609b GIT binary patch literal 4614 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 Date: Mon, 8 Jan 2018 22:13:24 -0500 Subject: [PATCH 571/581] Signed-off-by: dcerisano --- examples/flex_stream/img/twitter.jpg | Bin 4614 -> 3675 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/flex_stream/img/twitter.jpg b/examples/flex_stream/img/twitter.jpg index f26664d11bd30a8999cfe4a80ba1a5f5dd01609b..8351aa2933b41096ad108132dea1907044219bf1 100644 GIT binary patch literal 3675 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 Date: Tue, 9 Jan 2018 00:30:07 -0500 Subject: [PATCH 572/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index 00b5db37..bb2f5403 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -3,9 +3,10 @@ Multi-channel support - Might require firmware changes to setColors() to send all channels in one call. - Possibly not -Add more notification images (s3d, vrip, twitter, etc) + Make web UI prettier DONE Specify width and height for matrices, setSize(W,H) getSize()==>WxH - - Sharp package's rasterized buffers already compatible with rasterized matrices \ No newline at end of file + - Sharp package's rasterized buffers already compatible with rasterized matrices + - Add more notification images (s3d, vrip, twitter, etc) \ No newline at end of file From 042c8a365cb328fa25c61df620817b1ca8c826b4 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:30:44 -0500 Subject: [PATCH 573/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index bb2f5403..242de68c 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -1,7 +1,7 @@ TODO Multi-channel support - Might require firmware changes to setColors() to send all channels in one call. -- Possibly not +Refactor as npm project Make web UI prettier @@ -9,4 +9,4 @@ Make web UI prettier DONE Specify width and height for matrices, setSize(W,H) getSize()==>WxH - Sharp package's rasterized buffers already compatible with rasterized matrices - - Add more notification images (s3d, vrip, twitter, etc) \ No newline at end of file + Add more notification images (s3d, vrip, twitter, etc) \ No newline at end of file From 1bdfee034f5e11a5d704e063b78967acad74f26b Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:34:18 -0500 Subject: [PATCH 574/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index 242de68c..b024654d 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -2,7 +2,7 @@ TODO Multi-channel support - Might require firmware changes to setColors() to send all channels in one call. Refactor as npm project - +BlinkStick emulator (websockets) Make web UI prettier From 2b3d4ba175f84871ad97cf1973bbacdd9ca6a516 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:36:23 -0500 Subject: [PATCH 575/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index b024654d..0100b954 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -2,7 +2,7 @@ TODO Multi-channel support - Might require firmware changes to setColors() to send all channels in one call. Refactor as npm project -BlinkStick emulator (websockets) +RGB Matrix Emulator (websockets - standalone or in parallel with BlinkStick) Make web UI prettier From 74adf84698c83ec24a2f5f39ddbc1ef8f3374646 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:37:20 -0500 Subject: [PATCH 576/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index 0100b954..1d79ff0b 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -1,8 +1,9 @@ TODO Multi-channel support - Might require firmware changes to setColors() to send all channels in one call. +RGBA layers Refactor as npm project -RGB Matrix Emulator (websockets - standalone or in parallel with BlinkStick) +RGB Emulator Matrix REM (websockets - standalone or in parallel with BlinkStick) Make web UI prettier From 7d67d50e58c6e1177055bee786498627792814ac Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:39:12 -0500 Subject: [PATCH 577/581] Signed-off-by: dcerisano --- examples/flex_stream/TODO.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/flex_stream/TODO.txt b/examples/flex_stream/TODO.txt index 1d79ff0b..bdb4b947 100644 --- a/examples/flex_stream/TODO.txt +++ b/examples/flex_stream/TODO.txt @@ -1,4 +1,5 @@ TODO +Add audio to notifiers Multi-channel support - Might require firmware changes to setColors() to send all channels in one call. RGBA layers From aed07437eaba5998bd8c192fe5cf1ce0d3add954 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:40:52 -0500 Subject: [PATCH 578/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 118136b8..bf2398c4 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -1,4 +1,4 @@ -//Image display flex_stream.js +//Image Notifiers //User defined OnFrame() converts images, and morphs scaled frames to BlinkStick //Minimum Requirements: //- Latest version of nodejs (tested with v8.9.3) From 9e532cd79719a2444431ceec2b1de0c9c45cd22a Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:42:00 -0500 Subject: [PATCH 579/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index bf2398c4..6460b69d 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -17,7 +17,7 @@ var frame = null; var notifying = false; var num_frames = 0; //Default static image. -//Stream scaled desktop (size x 1) to BlinkStick via async futures pipeline +//Stream scaled image (W x H) to BlinkStick via async futures pipeline function notifier(){ if (num_frames-- > 0) { From 248a5640fe19c754f81444cf2d8806730413c0f0 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:42:59 -0500 Subject: [PATCH 580/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 6460b69d..450b1a91 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -17,7 +17,7 @@ var frame = null; var notifying = false; var num_frames = 0; //Default static image. -//Stream scaled image (W x H) to BlinkStick via async futures pipeline +//Stream scaled image (W x H) to BlinkStick function notifier(){ if (num_frames-- > 0) { @@ -43,6 +43,7 @@ function init(filename, sec){ flex_stream.saveOnFrame(); } + //Scale image (W x H) sharp(filename).resize(flex_stream.getWidth(),flex_stream.getHeight()).ignoreAspectRatio().raw().toBuffer().then(data => { frame = data; flex_stream.setSize(8,1); From f6c1c3e419fb3c936fe120843470dcb7b3c2ab35 Mon Sep 17 00:00:00 2001 From: dcerisano Date: Tue, 9 Jan 2018 00:43:22 -0500 Subject: [PATCH 581/581] Signed-off-by: dcerisano --- examples/flex_stream/notifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/flex_stream/notifier.js b/examples/flex_stream/notifier.js index 450b1a91..95064460 100644 --- a/examples/flex_stream/notifier.js +++ b/examples/flex_stream/notifier.js @@ -12,7 +12,7 @@ module.exports = { } const flex_stream = require("./flex_stream.js"); -const sharp = require('sharp'); //Available at npmjs.com +const sharp = require('sharp'); //Available at npmjs.com var frame = null; var notifying = false; var num_frames = 0; //Default static image.