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

duration-test.js 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. var tape = require("tape"),
  2. path = require("path"),
  3. fs = require("fs"),
  4. queue = require("d3").queue;
  5. require("mkdirp").sync(path.join(__dirname, "tmp"));
  6. var probe = require("../audiogram/probe.js"),
  7. trimAudio = require("../audiogram/trim.js");
  8. tape("MP3 probe", function(test) {
  9. probe(path.join(__dirname, "data/glazed-donut.mp3"), function(err, data){
  10. test.error(err);
  11. test.equal(typeof data.duration, "number");
  12. test.equal(data.channels, 2);
  13. test.assert(Math.abs(data.duration - 26.67) < 0.1);
  14. test.end();
  15. });
  16. });
  17. tape("WAV probe", function(test) {
  18. probe(path.join(__dirname, "data/glazed-donut.wav"), function(err, data){
  19. test.error(err);
  20. test.equal(typeof data.duration, "number");
  21. test.equal(data.channels, 2);
  22. test.assert(Math.abs(data.duration - 1.83) < 0.1);
  23. test.end();
  24. });
  25. });
  26. tape("Probe error", function(test) {
  27. probe(path.join(__dirname, "..", "README.md"), function(err){
  28. test.ok(err);
  29. test.end();
  30. });
  31. });
  32. tape("Trim start", function(test) {
  33. var options = {
  34. origin: path.join(__dirname, "data/glazed-donut.mp3"),
  35. destination: path.join(__dirname, "tmp/trim-start.mp3"),
  36. startTime: 6.67
  37. };
  38. queue(1)
  39. .defer(trimAudio, options)
  40. .defer(probe, options.destination)
  41. .await(function(err, _, data){
  42. test.error(err);
  43. test.equal(typeof data.duration, "number");
  44. test.assert(Math.abs(data.duration - 20) < 0.1);
  45. test.end();
  46. });
  47. });
  48. tape("Trim end", function(test) {
  49. var options = {
  50. origin: path.join(__dirname, "data/glazed-donut.mp3"),
  51. destination: path.join(__dirname, "tmp/trim-end.mp3"),
  52. startTime: 6.67
  53. };
  54. queue(1)
  55. .defer(trimAudio, options)
  56. .defer(probe, options.destination)
  57. .await(function(err, _, data){
  58. test.error(err);
  59. test.equal(typeof data.duration, "number");
  60. test.assert(Math.abs(data.duration - 20) < 0.1);
  61. test.end();
  62. });
  63. });
  64. tape("Trim start & end", function(test) {
  65. var options = {
  66. origin: path.join(__dirname, "data/glazed-donut.mp3"),
  67. destination: path.join(__dirname, "tmp/trim-start-end.mp3"),
  68. startTime: 5,
  69. endTime: 10
  70. };
  71. queue(1)
  72. .defer(trimAudio, options)
  73. .defer(probe, options.destination)
  74. .await(function(err, _, data){
  75. test.error(err);
  76. test.equal(typeof data.duration, "number");
  77. test.assert(Math.abs(data.duration - 5) < 0.1);
  78. test.end();
  79. });
  80. });
  81. tape("Trim invalid", function(test) {
  82. var options = {
  83. origin: path.join(__dirname, "data/glazed-donut.mp3"),
  84. destination: path.join(__dirname, "tmp/trim-invalid.mp3"),
  85. startTime: 5,
  86. endTime: 4
  87. };
  88. trimAudio(options, function(err){
  89. test.ok(err);
  90. test.end();
  91. });
  92. });
  93. // Cleanup
  94. tape.onFinish(function(){
  95. require("rimraf")(path.join(__dirname, "tmp"), function(err){
  96. if (err) {
  97. throw err;
  98. }
  99. });
  100. });