home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Edition 19 / FreelogHS19.iso / MP3 / Audiograbber / BEnc-0942-Win-i586-dll / Example.cpp < prev    next >
C/C++ Source or Header  |  1999-12-31  |  4KB  |  212 lines

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <io.h>
  4. #include <fcntl.h>
  5. #include <sys/stat.h>
  6. #include "bladedll.h"
  7.  
  8. BEINITSTREAM    beInitStream;
  9. BEENCODECHUNK    beEncodeChunk;
  10. BEDEINITSTREAM    beDeinitStream;
  11. BECLOSESTREAM    beCloseStream;
  12. BEVERSION        beVersion;
  13.  
  14. int main(int argc, char *argv[])
  15. {    
  16.     if(argc != 2)    {
  17.  
  18.         printf("Syntax: %s <filename.raw>", argv[0]);
  19.         return -1;
  20.     }
  21.  
  22.     // Load BladeEnc.DLL
  23.  
  24.     HINSTANCE hBladeDLL = LoadLibrary("BLADEENC.DLL");
  25.  
  26.     if(!hBladeDLL)    {
  27.  
  28.         printf("Error loading BLADEENC.DLL");
  29.         return -1;
  30.     }
  31.  
  32.     // Get Interface
  33.  
  34.     beInitStream    = (BEINITSTREAM) GetProcAddress(hBladeDLL, TEXT_BEINITSTREAM);
  35.     beEncodeChunk    = (BEENCODECHUNK) GetProcAddress(hBladeDLL, TEXT_BEENCODECHUNK);
  36.     beDeinitStream    = (BEDEINITSTREAM) GetProcAddress(hBladeDLL, TEXT_BEDEINITSTREAM);
  37.     beCloseStream    = (BECLOSESTREAM) GetProcAddress(hBladeDLL, TEXT_BECLOSESTREAM);
  38.     beVersion        = (BEVERSION) GetProcAddress(hBladeDLL, TEXT_BEVERSION);
  39.  
  40.     if(!beInitStream || !beEncodeChunk || !beDeinitStream || !beCloseStream || !beVersion)    {
  41.  
  42.         printf("Unable to get BladeEnc interface");
  43.         return -1;
  44.     }
  45.  
  46.     // Get Version
  47.  
  48.     BE_VERSION    Version;
  49.  
  50.     beVersion(&Version);
  51.  
  52.     printf( "BladeEnc.dll version %u.%02u (%u/%u/%u)\n"
  53.             "BladeEnc Engine %u.%02u\n"
  54.             "BladeEnc homepage at %s\n\n",    
  55.             Version.byDLLMajorVersion, Version.byDLLMinorVersion,
  56.             Version.byDay, Version.byMonth, Version.wYear,
  57.             Version.byMajorVersion, Version.byMinorVersion,
  58.             Version.zHomepage);
  59.  
  60.     // Open RAW file
  61.     
  62.     int hIn = open(argv[1], O_RDONLY | O_BINARY);
  63.  
  64.     if(hIn == -1)    {
  65.  
  66.         printf("Error opening %s", argv[1]);
  67.         return -1;
  68.     }
  69.  
  70.     // Generate filename.mp3
  71.  
  72.     char zOutputFilename[MAX_PATH + 1];    
  73.     lstrcpy(zOutputFilename, argv[1]);
  74.     int l = lstrlen(zOutputFilename);
  75.     while(l && zOutputFilename[l] != '.')    {
  76.  
  77.         l--;
  78.     }
  79.  
  80.     if(!l)    {
  81.  
  82.         l = lstrlen(zOutputFilename) - 1;
  83.     }
  84.  
  85.     zOutputFilename[l] = '\0';
  86.  
  87.     lstrcat(zOutputFilename, ".mp3");
  88.  
  89.     // Open MP3 file
  90.  
  91.     int hOut = open(zOutputFilename, O_WRONLY | O_BINARY | O_TRUNC | O_CREAT, S_IWRITE);
  92.  
  93.     if(hOut == -1)    {
  94.  
  95.         printf("Error creating file %s", zOutputFilename);
  96.         return -1;
  97.     }
  98.  
  99.     // Open MP3 Encoding Stream
  100.  
  101.     BE_CONFIG    beConfig;
  102.  
  103.     beConfig.dwConfig = BE_CONFIG_MP3;
  104.  
  105.     beConfig.format.mp3.dwSampleRate    = 44100;
  106.     beConfig.format.mp3.byMode            = BE_MP3_MODE_STEREO;
  107.     beConfig.format.mp3.wBitrate        = 128;
  108.     beConfig.format.mp3.bCopyright        = FALSE;
  109.     beConfig.format.mp3.bCRC            = FALSE;
  110.     beConfig.format.mp3.bOriginal        = FALSE;
  111.     beConfig.format.mp3.bPrivate        = FALSE;
  112.  
  113.     DWORD        dwSamples, dwMP3Buffer;
  114.     HBE_STREAM    hbeStream;
  115.     BE_ERR        err;
  116.  
  117.     err = beInitStream(&beConfig, &dwSamples, &dwMP3Buffer, &hbeStream);
  118.  
  119.     if(err != BE_ERR_SUCCESSFUL)    {
  120.  
  121.         printf("Error opening encoding stream (%lu)", err);
  122.         return -1;
  123.     }
  124.  
  125.     // Allocate buffers
  126.  
  127.     PBYTE pMP3Buffer = new BYTE[dwMP3Buffer];
  128.  
  129.     PSHORT pBuffer = new SHORT[dwSamples];
  130.  
  131.     if(!pMP3Buffer || !pBuffer)    {
  132.  
  133.         printf("Out of memory");
  134.         return -1;
  135.     }
  136.  
  137.     // Start encoding
  138.  
  139.     DWORD    length = filelength(hIn);
  140.     DWORD    done = 0;
  141.     DWORD    dwWrite;
  142.     DWORD    toread;
  143.     DWORD    towrite;
  144.  
  145.     setbuf(stdout,NULL);
  146.  
  147.     while(done < length)    {
  148.  
  149.         if(done + dwSamples * 2 < length)    {
  150.  
  151.             toread = dwSamples * 2;
  152.         }
  153.         else    {
  154.  
  155.             toread = length - done;
  156.         }
  157.  
  158.         if(read(hIn, pBuffer, toread) == -1)    {
  159.  
  160.             printf("\nRead error");
  161.             return -1;
  162.         }         
  163.  
  164.         err = beEncodeChunk(hbeStream, toread/2, pBuffer, pMP3Buffer, &towrite);
  165.  
  166.         if(err != BE_ERR_SUCCESSFUL)    {
  167.  
  168.             beCloseStream(hbeStream);
  169.             printf("beEncodeChunk() failed (%lu)", err);
  170.             return -1;
  171.         }
  172.         
  173.         if(write(hOut, pMP3Buffer, towrite) == -1)    {
  174.  
  175.             printf("\nWrite error");
  176.             return -1;
  177.         }
  178.  
  179.         done += toread;
  180.  
  181.         printf("Done: %0.2f%%     \r", 100 * (float)done/(float)length);    
  182.     }
  183.  
  184.     err = beDeinitStream(hbeStream, pMP3Buffer, &dwWrite);
  185.  
  186.     if(err != BE_ERR_SUCCESSFUL)    {
  187.  
  188.         beCloseStream(hbeStream);
  189.         printf("beExitStream failed (%lu)", err);
  190.         return -1;
  191.     }
  192.  
  193.     if(dwWrite)    {
  194.  
  195.         if(write(hOut, pMP3Buffer, dwWrite) == -1)    {
  196.  
  197.             printf("Write error");
  198.             return -1;
  199.         }
  200.     }
  201.  
  202.     beCloseStream(hbeStream);
  203.  
  204.     close(hIn);
  205.     close(hOut);
  206.     
  207.     printf("\n\nIt's Easy!");
  208.  
  209.     return 0;
  210. }
  211.  
  212.