Turn audio into a shareable video. forked from nypublicradio/audiogram

draw-frames.js 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var fs = require("fs"),
  2. path = require("path"),
  3. Canvas = require("canvas"),
  4. queue = require("d3").queue;
  5. function drawFrames(renderer, options, cb) {
  6. var frameQueue = queue(10),
  7. canvas = new Canvas(options.width, options.height),
  8. context = canvas.getContext("2d");
  9. for (var i = 0; i < options.numFrames; i++) {
  10. frameQueue.defer(drawFrame, i);
  11. }
  12. frameQueue.awaitAll(cb);
  13. function drawFrame(frameNumber, frameCallback) {
  14. renderer.drawFrame(context, {
  15. caption: options.caption,
  16. waveform: options.waveform[frameNumber],
  17. frame: frameNumber
  18. });
  19. fs.writeFile(path.join(options.frameDir, zeropad(frameNumber + 1, 6) + ".png"), canvas.toBuffer(), function(err) {
  20. if (err) {
  21. return frameCallback(err);
  22. }
  23. if (options.tick) {
  24. options.tick();
  25. }
  26. return frameCallback(null);
  27. });
  28. }
  29. }
  30. function zeropad(str, len) {
  31. str = str.toString();
  32. while (str.length < len) {
  33. str = "0" + str;
  34. }
  35. return str;
  36. }
  37. module.exports = drawFrames;