app.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. "use strict";
  2. var opus = require('../../');
  3. var fs = require('fs');
  4. //
  5. // Generate a sin tone.
  6. //
  7. var freq = 123;
  8. var time = 5;
  9. var rate = 48000;
  10. // Allocate a buffer for the tone. We use 16-bit samples.
  11. var samples = rate*time;
  12. var length = samples*2;
  13. var b = new Buffer(length);
  14. // Generate the tone.
  15. for( var i = 0; i < rate*time; i++ ) {
  16. var value = Math.round( Math.sin( 2*Math.PI*i*freq/rate ) * Math.pow( 2, 14 ) );
  17. b.writeInt16LE( value, i*2 );
  18. }
  19. //
  20. // Create the encoder.
  21. //
  22. // Use 20ms frames.
  23. var frame_size = rate * 0.02;
  24. var encoder = new opus.OpusEncoder( rate );
  25. // Open the output streams.
  26. var output = fs.createWriteStream( 'out.opus' );
  27. var input_raw = fs.createWriteStream( 'in.pcm' );
  28. var output_raw = fs.createWriteStream( 'out.pcm' );
  29. var read = 0;
  30. while( b.length > 0 ) {
  31. var size = Math.min( b.length, frame_size );
  32. // If the input buffer is smaller than the frame_size, copy it into a new 0-padded buffer.
  33. if( size < frame_size ) {
  34. var temp = new Buffer( frame_size );
  35. temp.fill(0);
  36. b.copy( temp );
  37. b = temp;
  38. }
  39. // We encode frame_size 16-bit samples. This requires a frame_size*2 buffer of bytes.
  40. var bufferSize = frame_size * 2;
  41. var toEncode = b.slice(0, bufferSize);
  42. console.log( frame_size );
  43. // Encode and decode.
  44. var encoded = encoder.encode( toEncode );
  45. var decoded = encoder.decode( encoded );
  46. // Write the results in the output files.
  47. input_raw.write( toEncode );
  48. output.write( encoded );
  49. output_raw.write( decoded );
  50. // Move the buffer forward by the buffer size.
  51. b = b.slice( bufferSize );
  52. }
  53. output.end();
  54. input_raw.end();
  55. output_raw.end();
  56. console.log( 'Wrote following files.' );
  57. console.log( 'in.pcm : Input PCM signal' );
  58. console.log( 'out.opus : OPUS encoded input signal' );
  59. console.log( 'out.pcm : Decoded PCM signal' );