mirror of https://github.com/espruino/BangleApps
65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
/* sox Rear_Right.wav -r 4k -b 8 -c 1 -e unsigned-integer 0.raw vol 2
|
|
aplay -r 4000 /tmp/0.raw
|
|
*/
|
|
|
|
/* https://forum.espruino.com/conversations/348912/ */
|
|
|
|
let pin = D19;
|
|
|
|
function play(name, callback) {
|
|
function playChar(offs) {
|
|
var l = 10240;
|
|
var s = require("Storage").read(name, offs, l);
|
|
//print("Waveform " + name + " " + s.length);
|
|
if (!s.length) {
|
|
digitalWrite(pin,0);
|
|
if (callback) callback();
|
|
return;
|
|
}
|
|
var w = new Waveform(s.length);
|
|
var b = w.buffer;
|
|
b.set(s);
|
|
//print("Buffer", s.length);
|
|
//for (var i=s.length-1;i>=0;i--)b[i]/=4;
|
|
w.startOutput(pin, 4000);
|
|
w.on("finish", function(buf) {
|
|
playChar(offs+l);
|
|
});
|
|
}
|
|
analogWrite(pin, 0.1, {freq:40000});
|
|
playChar(0);
|
|
}
|
|
|
|
function video(name, callback) {
|
|
function frame() {
|
|
var s = require("Storage").read(name, offs, l);
|
|
if (!s)
|
|
return;
|
|
g.drawImage(s, 0, 0, { scale: 2 });
|
|
g.flip();
|
|
offs += l;
|
|
}
|
|
g.clear();
|
|
var offs = 0;
|
|
//var l = 3875; for 176x176
|
|
//var l = 515; for 64x64
|
|
var l = 971;
|
|
setInterval(frame, 200);
|
|
}
|
|
|
|
function run() {
|
|
clearInterval(i);
|
|
print("Running");
|
|
play('bad.araw');
|
|
t1 = getTime();
|
|
video('bad.vraw');
|
|
print("100 frames in ", getTime()-t1);
|
|
// 1.7s, unscaled
|
|
// 2.68s, scale 1.01
|
|
// 5.73s, scale 2.00
|
|
// 9.93s, scale 2, full screen
|
|
// 14.4s scaled. 176/64
|
|
}
|
|
|
|
print("Loaded");
|
|
i = setInterval(run, 100); |