home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Jumpstart 1.1a / CD_ROM.BIN / develpmt / source / waveconv / wavesup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-12  |  4.7 KB  |  197 lines

  1. /** wavesup.c
  2.  *
  3.      (C) Copyright Microsoft Corp. 1991, 1992.  All rights reserved.
  4.  
  5.      You have a royalty-free right to use, modify, reproduce and 
  6.      distribute the Sample Files (and/or any modified version) in 
  7.      any way you find useful, provided that you agree that 
  8.      Microsoft has no warranty obligations or liability for any 
  9.      Sample Application Files which are modified. 
  10.      
  11.      If you did not get this from Microsoft Sources, then it may not be the
  12.      most current version.  This sample code in particular will be updated
  13.      and include more documentation.  
  14.  
  15.      Sources are:
  16.          The MM Sys File Transfer BBS: The phone number is 206 936-4082.
  17.     CompuServe: WINSDK forum, MDK section.
  18.     Anonymous FTP from ftp.uu.net vendor\microsoft\multimedia
  19.  *
  20.  ** */
  21.  
  22.  
  23. //
  24. //  the includes we need
  25. //
  26. #define STRICT
  27. #include <windows.h>
  28. #include <windowsx.h>
  29. #include <mmsystem.h>
  30. #include "mmreg.h"
  31. #include "wavesup.h"
  32.  
  33. //
  34. //  external prototype from muldiv32.asm
  35. //
  36. DWORD FAR PASCAL muldiv32(DWORD dwNumber, DWORD dwNumerator, DWORD dwDenominator);
  37.  
  38.  
  39. /** DWORD WSUPAPI wsupBytesToSamples(LPWAVEFORMATEX pwfx, DWORD dwBytes)
  40.  *
  41.  *  DESCRIPTION:
  42.  *      convert a byte offset into a sample offset.
  43.  *
  44.  *      dwSamples = (dwBytes / nAveBytesPerSec) * nSamplesPerSec
  45.  *
  46.  *  ARGUMENTS:
  47.  *      (LPWAVEFORMATEX pwfx, DWORD dwBytes)
  48.  *
  49.  *  RETURN (DWORD WSUPAPI):
  50.  *
  51.  *
  52.  *  NOTES:
  53.  *
  54.  ** */
  55.  
  56. DWORD WSUPAPI wsupBytesToSamples(LPWAVEFORMATEX pwfx, DWORD dwBytes)
  57. {
  58.     return (muldiv32(dwBytes, pwfx->nSamplesPerSec, pwfx->nAvgBytesPerSec));
  59. } /* wsupBytesToSamples() */
  60.  
  61.  
  62. /** DWORD WSUPAPI wsupSamplesToBytes(LPWAVEFORMATEX pwfx, DWORD dwSamples)
  63.  *
  64.  *  DESCRIPTION:
  65.  *      convert a sample offset into a byte offset, with correct alignment
  66.  *      to nBlockAlign.
  67.  *
  68.  *      dwBytes = (dwSamples / nSamplesPerSec) * nBytesPerSec
  69.  *
  70.  *  ARGUMENTS:
  71.  *      (LPWAVEFORMATEX pwsup, DWORD dwSamples)
  72.  *
  73.  *  RETURN (DWORD WSUPAPI):
  74.  *
  75.  *
  76.  *  NOTES:
  77.  *
  78.  ** */
  79.  
  80. DWORD WSUPAPI wsupSamplesToBytes(LPWAVEFORMATEX pwfx, DWORD dwSamples)
  81. {
  82.     DWORD   dwBytes;
  83.  
  84.     dwBytes = muldiv32(dwSamples, pwfx->nAvgBytesPerSec, pwfx->nSamplesPerSec);
  85.  
  86.     // now align the byte offset to nBlockAlign
  87. #ifdef ROUND_UP
  88.     dwBytes = ((dwBytes + pwfx->nBlockAlign - 1) / pwfx->nBlockAlign) * pwfx->nBlockAlign;
  89. #else
  90.     dwBytes = (dwBytes / pwfx->nBlockAlign) * pwfx->nBlockAlign;
  91. #endif
  92.  
  93.     return (dwBytes);
  94. } /* wsupSamplesToBytes() */
  95.  
  96.  
  97. /** DWORD WSUPAPI wsupSamplesToTime(LPWAVEFORMATEX pwfx, DWORD dwSamples)
  98.  *
  99.  *  DESCRIPTION:
  100.  *      convert a sample offset into a time offset in milliseconds.
  101.  *
  102.  *      dwTime = (dwSamples/nSamplesPerSec) * 1000
  103.  *
  104.  *  ARGUMENTS:
  105.  *      (LPWAVEFORMATEX pwfx, DWORD dwSamples)
  106.  *
  107.  *  RETURN (DWORD WSUPAPI):
  108.  *
  109.  *
  110.  *  NOTES:
  111.  *
  112.  ** */
  113.  
  114. DWORD WSUPAPI wsupSamplesToTime(LPWAVEFORMATEX pwfx, DWORD dwSamples)
  115. {
  116.     return (muldiv32(dwSamples, 1000, pwfx->nSamplesPerSec));
  117. } /* wsupSamplesToTime() */
  118.  
  119.  
  120. /** DWORD WSUPAPI wsupTimeToSamples(LPWAVEFORMATEX pwfx, DWORD dwTime)
  121.  *
  122.  *  DESCRIPTION:
  123.  *      convert a time index in milliseconds to a sample offset.
  124.  *
  125.  *      dwSamples = (dwTime / 1000) * nSamplesPerSec
  126.  *
  127.  *  ARGUMENTS:
  128.  *      (LPWAVEFORMATEX pwfx, DWORD dwTime)
  129.  *
  130.  *  RETURN (DWORD WSUPAPI):
  131.  *
  132.  *
  133.  *  NOTES:
  134.  *
  135.  ** */
  136.  
  137. DWORD WSUPAPI wsupTimeToSamples(LPWAVEFORMATEX pwfx, DWORD dwTime)
  138. {
  139.     return (muldiv32(dwTime, pwfx->nSamplesPerSec, 1000));
  140. } /* wsupTimeToSamples() */
  141.  
  142.  
  143. typedef struct strformat
  144. {
  145.     char *  pszformat;
  146.     UINT    wFormat;
  147. } STRFORMAT;
  148.  
  149. static STRFORMAT formats[] =
  150. {
  151.     {"Reserved for Unknown", WAVE_FORMAT_UNKNOWN    },
  152.     {"PCM",                  WAVE_FORMAT_PCM        },
  153.     {"Microsoft ADPCM",      WAVE_FORMAT_ADPCM      },
  154.     {"IBM CVSD",             WAVE_FORMAT_IBM_CVSD   },
  155.     {"CCITT A-Law",          WAVE_FORMAT_ALAW       },
  156.     {"CCITT mu-Law",         WAVE_FORMAT_MULAW      },
  157.     {"OKI ADPCM",            WAVE_FORMAT_OKI_ADPCM  },
  158.     {"Digisound DIGISTD",    WAVE_FORMAT_DIGISTD    },
  159.     {"Digisound DIGIFIX",    WAVE_FORMAT_DIGIFIX    },
  160.     {NULL,                   0                      }
  161. };
  162.  
  163.  
  164. /** void WSUPAPI wsupGetFormatName(char FAR * lpszBuf, LPWAVEFORMATEX lpwfx)
  165.  *
  166.  *  DESCRIPTION:
  167.  *      
  168.  *
  169.  *  ARGUMENTS:
  170.  *
  171.  *  RETURN void
  172.  *
  173.  *
  174.  *  NOTES:
  175.  *
  176.  ** */
  177. void WSUPAPI wsupGetFormatName(LPWAVEFORMATEX lpwfx, LPSTR lpszBuf)
  178. {
  179.  
  180.     unsigned u;
  181.     for(u=0;formats[u].pszformat;u++)
  182.     {
  183.     if(formats[u].wFormat==lpwfx->wFormatTag)
  184.     {
  185.         lstrcpy(lpszBuf,formats[u].pszformat);
  186.         return;
  187.     }
  188.     }
  189.  
  190.     lstrcpy(lpszBuf,"<<Unknown Format>>");
  191.     
  192. }
  193.  
  194.  
  195.  
  196. /** EOF: wavesup.c **/
  197.