home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 7_2009-2012.ISO / data / zips / Add_WAV_so2173521272010.psc / mAddWav.bas < prev    next >
BASIC Source File  |  2010-01-27  |  6KB  |  166 lines

  1. Attribute VB_Name = "mAddWav"
  2. Option Explicit
  3.  
  4.  
  5. Private Declare Sub AVIFileInit Lib "avifil32.dll" ()
  6.  
  7.  
  8. Private Declare Function AVIFileOpen Lib "avifil32.dll" (ByRef ppfile As Long, ByVal szFile As String, ByVal uMode As Long, ByVal pclsidHandler As Long) As Long
  9.  
  10.  
  11. Private Declare Function AVIFileCreateStream Lib "avifil32.dll" Alias "AVIFileCreateStreamA" _
  12.     (ByVal pfile As Long, ByRef ppavi As Long, ByRef psi As AVI_STREAM_INFO) As Long
  13.  
  14.  
  15. Private Declare Function AVIStreamSetFormat Lib "avifil32.dll" (ByVal pavi As Long, _
  16.     ByVal lPos As Long, _
  17.     ByRef lpFormat As Any, _
  18.     ByVal cbFormat As Long) As Long
  19.  
  20.  
  21. Private Declare Function AVIStreamWrite Lib "avifil32.dll" (ByVal pavi As Long, _
  22.     ByVal lStart As Long, _
  23.     ByVal lSamples As Long, _
  24.     ByVal lpBuffer As Long, _
  25.     ByVal cbBuffer As Long, _
  26.     ByVal dwFlags As Long, _
  27.     ByRef plSampWritten As Long, _
  28.     ByRef plBytesWritten As Long) As Long
  29.  
  30.  
  31. Private Declare Function AVIStreamReadFormat Lib "avifil32.dll" (ByVal pAVIStream As Long, _
  32.     ByVal lPos As Long, _
  33.     ByRef lpFormat As PCMWAVEFORMAT, _
  34.     ByRef cbFormat As Long) As Long
  35.  
  36.  
  37. Private Declare Function AVIStreamRead Lib "avifil32.dll" (ByVal pAVIStream As Long, _
  38.     ByVal lStart As Long, _
  39.     ByVal lSamples As Long, _
  40.     ByVal lpBuffer As Long, _
  41.     ByVal cbBuffer As Long, _
  42.     ByRef pBytesWritten As Long, _
  43.     ByRef pSamplesWritten As Long) As Long
  44.  
  45.  
  46. Private Declare Function AVIFileGetStream Lib "avifil32.dll" (ByVal pfile As Long, ByRef ppaviStream As Long, ByVal fccType As Long, ByVal lParam As Long) As Long
  47.  
  48.  
  49. Private Declare Function AVIStreamInfo Lib "avifil32.dll" (ByVal pAVIStream As Long, ByRef psi As AVI_STREAM_INFO, ByVal lSize As Long) As Long
  50.  
  51.  
  52. Private Declare Function AVIStreamLength Lib "avifil32.dll" (ByVal pavi As Long) As Long
  53.  
  54.  
  55. Private Declare Function AVIStreamRelease Lib "avifil32.dll" (ByVal pavi As Long) As Long
  56.  
  57.  
  58. Private Declare Function AVIFileRelease Lib "avifil32.dll" (ByVal pfile As Long) As Long
  59.  
  60.  
  61. Private Declare Sub AVIFileExit Lib "avifil32.dll" ()
  62.  
  63.  
  64. Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
  65.  
  66.  
  67. Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
  68.  
  69.  
  70. Private Type WAVEFORMAT
  71.     wFormatTag As Integer
  72.     nChannels As Integer
  73.     nSamplesPerSec As Long
  74.     nAvgBytesPerSec As Long
  75.     nBlockAlign As Integer
  76.     End Type
  77.  
  78.  
  79. Private Type PCMWAVEFORMAT
  80.     wf As WAVEFORMAT
  81.     wBitsPerSample As Integer
  82.     End Type
  83.  
  84.  
  85. Private Type AVI_RECT
  86.     Left As Long
  87.     Top As Long
  88.     Right As Long
  89.     Bottom As Long
  90.     End Type
  91.  
  92.  
  93. Private Type AVI_STREAM_INFO
  94.     fccType As Long
  95.     fccHandler As Long
  96.     dwFlags As Long
  97.     dwCaps As Long
  98.     wPriority As Integer
  99.     wLanguage As Integer
  100.     dwScale As Long
  101.     dwRate As Long
  102.     dwStart As Long
  103.     dwLength As Long
  104.     dwInitialFrames As Long
  105.     dwSuggestedBufferSize As Long
  106.     dwQuality As Long
  107.     dwSampleSize As Long
  108.     rcFrame As AVI_RECT
  109.     dwEditCount As Long
  110.     dwFormatChangeCount As Long
  111.     szName As String * 64
  112.     End Type
  113.     Private Const AVIERR_OK As Long = 0&
  114.     Private Const OF_READWRITE As Long = &H2
  115.     Private Const AVIIF_KEYFRAME As Long = &H10
  116.     Private Const streamtypeVIDEO As Long = 1935960438
  117.     Private Const streamtypeAUDIO As Long = 1935963489
  118.     Private Const streamtypeMIDI As Long = 1935960429
  119.     Private Const streamtypeTEXT As Long = 1937012852
  120.     Private Const GMEM_FIXED = &H0
  121.     Private Const GMEM_ZEROINIT = &H40
  122.     Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
  123.     'To use this function, need 2 files
  124.     'existing avi video file(without sound)
  125.     'existing wav audio file
  126.  
  127.  
  128. Public Sub AddAudioStream(ByVal AVIFilePath As String, ByVal WAVFilePath As String) 'AddAudioStream(Destination AVI FilePath, Source WAV FilePath)
  129.     On Error GoTo errHandler
  130.     Dim StreamInfo As AVI_STREAM_INFO
  131.     Dim StreamFormat As PCMWAVEFORMAT
  132.     Dim StreamLength As Long
  133.     Dim WaveData As Long
  134.     Dim AVIFile As Long
  135.     Dim AudioFile As Long
  136.     Dim AudioStream As Long
  137.     Dim AVIStream As Long
  138.     Call AVIFileInit 'Initialize the AVI library.
  139.  
  140.  
  141.     If AVIFileOpen(AVIFile, AVIFilePath, OF_READWRITE, ByVal 0&) = AVIERR_OK Then 'open the avi file
  142.  
  143.  
  144.         If AVIFileOpen(AudioFile, WAVFilePath, OF_READWRITE, ByVal 0&) = AVIERR_OK Then 'open the wave file
  145.             If AVIFileGetStream(AudioFile, AudioStream, streamtypeAUDIO, 0) <> AVIERR_OK Then GoTo errHandler 'get the audio stream
  146.             If AVIStreamInfo(AudioStream, StreamInfo, Len(StreamInfo)) <> AVIERR_OK Then GoTo errHandler 'read the stream's header information
  147.             AVIStreamReadFormat AudioStream, 0, StreamFormat, Len(StreamFormat) 'read the stream's format data
  148.             StreamLength = AVIStreamLength(AudioStream) * StreamInfo.dwSampleSize 'get the length of the stream
  149.             WaveData = GlobalAlloc(GPTR, StreamLength) 'get pointer To the wave data
  150.             AVIStreamRead AudioStream, 0, StreamLength, WaveData, StreamLength, 0, 0 'read audio data from the stream
  151.             AVIFileCreateStream AVIFile, AVIStream, StreamInfo 'create new stream
  152.             AVIStreamSetFormat AVIStream, 0, StreamFormat, Len(StreamFormat) 'set the format of new stream
  153.             AVIStreamWrite AVIStream, 0, StreamLength, WaveData, StreamLength, AVIIF_KEYFRAME, 0, 0 'copy the raw wave data To new stream
  154.             GlobalFree WaveData 'release the wave data pointer
  155.             AVIStreamRelease (AudioStream)
  156.             AVIStreamRelease (AVIStream)
  157.             AVIFileRelease AudioFile
  158.             AVIFileRelease AVIFile
  159.             Call AVIFileExit 'close the AVI library
  160.         End If
  161.     End If
  162. errHandler:
  163.  
  164. End Sub
  165.  
  166.