Decoder.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var ogg = require( 'ogg' );
  2. var util = require( 'util' );
  3. var opus = require( '../' );
  4. var path = require( 'path' );
  5. var streamEqual = require( 'stream-equal' );
  6. var fs = require( 'fs' );
  7. describe( 'Decoder', function() {
  8. var SERIALNO = 1;
  9. [ 'random', 'sine' ].forEach( function( file ) {
  10. [ 8000, 48000 ].forEach( function( hzEncode ) {
  11. [ 1, 2 ].forEach( function( chanEncode ) {
  12. [ 8000, 48000 ].forEach( function( hzDecode ) {
  13. [ 1, 2 ].forEach( function( chanDecode ) {
  14. it( util.format(
  15. 'should decode %d:%d %s audio in %d:%d Hz',
  16. hzEncode, chanEncode, file, hzDecode, chanDecode ),
  17. function( done ) {
  18. var inputPath = path.join(
  19. path.basename( __dirname ),
  20. 'data',
  21. util.format( '%s-%d-%d-%d.opus',
  22. file, hzEncode, chanEncode, 20 ) );
  23. var input = fs.createReadStream( inputPath );
  24. var refPath = path.join(
  25. path.basename( __dirname ),
  26. 'data',
  27. util.format( '%s-%d-%d-%d-%d-%d.raw',
  28. file, hzEncode, chanEncode, 20,
  29. hzDecode, chanDecode ) );
  30. var reference = fs.createReadStream( refPath );
  31. var decoder = new opus.Decoder( hzDecode, chanDecode );
  32. var oggDecoder = new ogg.Decoder();
  33. oggDecoder.on( 'stream', function( stream ) {
  34. stream.pipe( decoder );
  35. });
  36. input.pipe( oggDecoder )
  37. streamEqual( decoder, reference, function( err, equal ) {
  38. if( err )
  39. throw err;
  40. if( ! equal ) {
  41. throw new Error( util.format(
  42. "Streams not equal (%s, %d:%d, %d:%d)",
  43. file, hzEncode, chanEncode,
  44. hzDecode, chanDecode ) );
  45. }
  46. done();
  47. } );
  48. } );
  49. } ) } ) } ) } ) } );
  50. } );