home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / vb5.0 / tools / unsupprt / voice / vchatapp / acm_defs.bas next >
BASIC Source File  |  1997-01-16  |  8KB  |  148 lines

  1. Attribute VB_Name = "ACM_Defs"
  2. Option Explicit
  3. '== ACM API Constants ================================================
  4. Public Const ACMERR_BASE = 512
  5. Public Const ACMERR_NOTPOSSIBLE = (ACMERR_BASE + 0)
  6. Public Const ACMERR_BUSY = (ACMERR_BASE + 1)
  7. Public Const ACMERR_UNPREPARED = (ACMERR_BASE + 2)
  8. Public Const ACMERR_CANCELED = (ACMERR_BASE + 3)
  9.  
  10. ' AcmStreamSizeFormat Constants
  11. Public Const ACM_STREAMSIZEF_SOURCE = &H0
  12. Public Const ACM_STREAMSIZEF_DESTINATION = &H1
  13. Public Const ACM_STREAMSIZEF_QUERYMASK = &HF
  14.  
  15. ' acmStreamConvert Formats
  16. Public Const ACM_STREAMCONVERTF_BLOCKALIGN = &H4
  17. Public Const ACM_STREAMCONVERTF_START = &H10
  18. Public Const ACM_STREAMCONVERTF_END = &H20
  19.  
  20. ' Done Bits For ACMSTREAMHEADER.fdwStatus
  21. Public Const ACMSTREAMHEADER_STATUSF_DONE = &H10000
  22. Public Const ACMSTREAMHEADER_STATUSF_PREPARED = &H20000
  23. Public Const ACMSTREAMHEADER_STATUSF_INQUEUE = &H100000
  24.  
  25. ' Done Bits For acmStreamOpen Formats
  26. Public Const ACM_STREAMOPENF_QUERY = &H1
  27. Public Const ACM_STREAMOPENF_ASYNC = &H2
  28. Public Const ACM_STREAMOPENF_NONREALTIME = &H4
  29.  
  30. '== ACM API Declarations ================================================
  31. 'Declare Function acmStreamOpen Lib "MSACM32" (ByVal hAS As Integer, ByVal hADrv As Integer, wfxSrc As WAVEFORMATEX, wfxDst As WAVEFORMATEX, wFltr As Any, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Integer
  32. 'Declare Function acmStreamOpen Lib "MSACM32" (ByVal hAS As Long, ByVal hADrv As Long, wfxSrc As WAVEFORMATEX, wfxDst As WAVEFORMATEX, wFltr As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
  33. Declare Function acmStreamOpen Lib "MSACM32" (ByVal hAS As Long, ByVal hADrv As Long, wfxSrc As WAVEFORMATEX, wfxDst As WAVEFORMATEX, ByVal wFltr As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
  34.  
  35. Declare Function acmStreamPrepareHeader Lib "MSACM32" (ByVal hAS As Integer, hASHdr As ACMSTREAMHEADER, ByVal dwPrepare As Long) As Integer
  36. Declare Function acmStreamUnprepareHeader Lib "MSACM32" (ByVal hAS As Integer, hASHdr As ACMSTREAMHEADER, ByVal dwUnPrepare As Long) As Integer
  37. Declare Function acmStreamConvert Lib "MSACM32" (ByVal hAS As Integer, hASHdr As ACMSTREAMHEADER, ByVal dwConvert As Long) As Integer
  38. Declare Function acmStreamClose Lib "MSACM32" (ByVal hAS As Integer, ByVal dwClose As Long) As Integer
  39. Declare Function acmStreamReset Lib "MSACM32" (ByVal hAS As Integer, ByVal dwReset As Long) As Integer
  40. Declare Function acmStreamSize Lib "MSACM32" (ByVal hAS As Integer, ByVal cbInput As Long, ByVal dwOutBytes As Long, ByVal dwSize As Long) As Integer
  41.  
  42.  
  43. '== ACM User Defined Datatypes ================================================
  44. Type WAVEFILTER
  45.     cbStruct      As Long
  46.     dwFilterTag   As Long
  47.     fdwFilter     As Long
  48.     dwReserved(5) As Long
  49. End Type
  50.  
  51. Type ACMSTREAMHEADER            ' [ACM STREAM HEADER TYPE]
  52.     cbStruct As Long            ' Size of header in bytes
  53.     dwStatus As Long            ' Conversion status buffer
  54.     dwUser As Long              ' 32 bits of user data specified by application
  55.     pbSrc As Long               ' Source data buffer pointer
  56.     cbSrcLength As Long         ' Source data buffer size in bytes
  57.     cbSrcLengthUsed As Long     ' Source data buffer size used in bytes
  58.     dwSrcUser As Long           ' 32 bits of user data specified by application
  59.     cbDst As Long               ' Dest data buffer pointer
  60.     cbDstLength As Long         ' Dest data buffer size in bytes
  61.     cbDstLengthUsed As Long     ' Dest data buffer size used in bytes
  62.     dwDstUser As Long           ' 32 bits of user data specified by application
  63.     dwReservedDriver(10) As Long ' Reserved and should not be used
  64. End Type
  65. '==============================================================================
  66.  
  67. '------------------------------------------------------------------
  68. Public Function acmCompress(srcWavefmt As WAVEFORMATEX, dstWavefmt As WAVEFORMATEX) As Boolean
  69. '------------------------------------------------------------------
  70.     Dim rc As Long
  71.     Dim hAS As Long
  72.     Dim hASHdr As ACMSTREAMHEADER
  73. '   Dim wFltr As WAVEFILTER
  74.     Dim dwConvert As Long, dwClose As Long, dwReset As Long
  75.     Dim cbInput As Long, dwOutBytes As Long, dwSize As Long
  76. '------------------------------------------------------------------
  77.     ' Open/Configure an acm Stream Handle For Compression
  78. '   rc = acmStreamOpen(hAS, 0, srcWavefmt, dstWavefmt, wFltr, 0, 0, dwOpen)
  79.     rc = acmStreamOpen(hAS, 0, srcWavefmt, dstWavefmt, 0, 0, 0, ACM_STREAMOPENF_ASYNC)
  80.     Debug.Print "acmStreamOpen rc= ", rc
  81.     
  82.     ' Prepare acm Stream Header
  83.     rc = acmStreamPrepareHeader(hAS, hASHdr, 0)
  84.     Debug.Print "acmStreamPrepareHeader rc= ", rc
  85.     
  86.         cbInput = 255 ' must be non zero
  87.     
  88.         ' Calculate acm Stream Size of Output Buffer
  89.         rc = acmStreamSize(hAS, cbInput, dwOutBytes, ACM_STREAMSIZEF_SOURCE)
  90.         Debug.Print "acmStreamSize(input) rc= ", rc
  91.         
  92.         ' Calculate acm Stream Size of Output Buffer
  93.         rc = acmStreamSize(hAS, cbInput, dwOutBytes, ACM_STREAMSIZEF_DESTINATION)
  94.         Debug.Print "acmStreamSize(output) rc= ", rc
  95.     
  96.     ' Convert/Compress acm Stream Wave Buffer
  97.     rc = acmStreamConvert(hAS, hASHdr, dwConvert)
  98.     Debug.Print "acmStreamConvert rc= ", rc
  99.     
  100.     ' Wait Until Conversion Complete...
  101.     Do                                                          ' Loop Until Conversion Is Done
  102.         DoEvents                                                ' Post Events...
  103.     Loop Until hASHdr.dwStatus And ACMSTREAMHEADER_STATUSF_DONE ' Check For The DONE Flag.
  104.  
  105.     ' UnPrepare acm Stream Header
  106.     rc = acmStreamUnprepareHeader(hAS, hASHdr, 0)
  107.     Debug.Print "acmStreamUnprepareHeader rc= ", rc
  108.     
  109.     ' Close acm Stream Handle
  110.     rc = acmStreamClose(hAS, dwClose)
  111.     Debug.Print "acmStreamClose rc= ", rc
  112. '------------------------------------------------------------------
  113. End Function
  114. '------------------------------------------------------------------
  115.  
  116. '--------------------------------------------------------------
  117. Public Sub InitAcmHDR(asHdr As ACMSTREAMHEADER, srcHdr As WAVEHDR)
  118. ' Initialize's An Input Wave Header's DataBuffer And Size Members...
  119. '--------------------------------------------------------------
  120.     Dim rc As Long                                      ' Function Return Code...
  121. '--------------------------------------------------------------
  122.     asHdr.cbStruct = Len(asHdr)                         ' Size of header in bytes
  123.     asHdr.pbSrc = srcHdr.lpData                         ' Copy pointer To uncompressed data
  124.     asHdr.cbSrcLength = srcHdr.lpData                   ' Copy size of uncompress data
  125.     
  126.     asHdr.cbDstLength = asHdr.cbSrcLength               ' Allocate Enough Memory For Compression
  127.     asHdr.dwDstUser = GlobalAlloc(GMEM_MOVEABLE Or GMEM_SHARE Or GMEM_ZEROINIT, _
  128.                                   asHdr.cbDstLength)    ' Allocate Global Memory
  129.     asHdr.cbDst = GlobalLock(asHdr.dwDstUser)           ' Lock Memory handle
  130. '--------------------------------------------------------------
  131. End Sub
  132. '--------------------------------------------------------------
  133.  
  134. '--------------------------------------------------------------
  135. Public Sub WaitForACMCallBack(CallBackBit As Long, cbFlag As Long)
  136. ' Waits For Asynchronous Function Callback Bit To Be Set.
  137. '--------------------------------------------------------------
  138.     Do                                  ' Loop Until CallBack Bit Is Set!
  139.         DoEvents                        ' Post Events...
  140.     Loop Until (((CallBackBit And cbFlag) = cbFlag) Or _
  141.                  (CallBackBit = 0))     ' Check For (CallBack Bit Or Null)...
  142. '--------------------------------------------------------------
  143. End Sub
  144. '--------------------------------------------------------------
  145.  
  146.  
  147.  
  148.