home *** CD-ROM | disk | FTP | other *** search
/ Microsoft DirectX SDK 7.0 / Dx7.bin / DXF / samples / multimedia / vbsamples / dsound / src / memo / dsound.bas < prev    next >
Encoding:
BASIC Source File  |  1999-07-25  |  3.3 KB  |  138 lines

  1. Attribute VB_Name = "DSOUND"
  2. Public Sub initSound(hw As Long)
  3.     Set ds = dx.DirectSoundCreate("")
  4.     ds.SetCooperativeLevel hw, DSSCL_NORMAL
  5. End Sub
  6.  
  7.  
  8. Public Sub record_memo(hw As Long)
  9.     On Error Resume Next
  10.     Dim ST As Long
  11.     
  12.     If ds Is Nothing Then initSound hw
  13.     Set dscb = Nothing
  14.     
  15.     ST = dscb.GetStatus
  16.     
  17.     If Err.Number = 91 Then Resume Next
  18.     
  19.     If (ST And DSCBSTATUS_CAPTURING) Then
  20.         MsgBox "Already Capturing......", vbApplicationModal
  21.         Exit Sub
  22.     End If
  23.     
  24.     Set dsc = dx.DirectSoundCaptureCreate("")
  25.     
  26.     wc = MakeWaveEX(11025, 1, 8)
  27.     dc.fxFormat = wc
  28.     dc.lBufferBytes = wc.lAvgBytesPerSec * 30
  29.     dc.lFlags = DSCBCAPS_WAVEMAPPED
  30.     Set dscb = dsc.CreateCaptureBuffer(dc)
  31.     
  32.     dscb.start DSCBSTART_DEFAULT
  33.     MEMO_RECORD = True
  34. End Sub
  35.  
  36.  
  37. Public Sub Play_Sound()
  38.     Dim cur As DSCURSORS
  39.     Dim dsBPR As DirectSoundBuffer
  40.     Dim PD As DSBUFFERDESC
  41.     Dim wD As WAVEFORMATEX
  42.     Dim ST As Long
  43.     Dim WV() As Byte
  44.     
  45.     If Not MEMO_RECORD Then Exit Sub
  46.     
  47.     ST = dscb.GetStatus
  48.     If (ST And DSCBSTATUS_CAPTURING) Then
  49.         dscb.Stop
  50.     End If
  51.     
  52.     dscb.GetCurrentPosition cur
  53.     
  54.     PD.lFlags = DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
  55.     wD = wc
  56.     PD.lBufferBytes = cur.lWrite + 1 '* wD.nBlockAlign
  57.     
  58.     ReDim WV(cur.lWrite + 1) ' * wD.nBlockAlign + 1)
  59.     
  60.     dscb.ReadBuffer 0, cur.lWrite + 1, WV(0), DSCBLOCK_DEFAULT
  61.     
  62.     
  63.     
  64.     Set dsb = ds.CreateSoundBuffer(PD, wD)
  65.     
  66.     dsb.WriteBuffer 0, cur.lWrite + 1, WV(0), DSBLOCK_DEFAULT
  67.     
  68.     dsb.SetCurrentPosition 0
  69.     dsb.Play DSBPLAY_DEFAULT
  70.     
  71.     'Set dscb = Nothing
  72. End Sub
  73.  
  74. Public Sub Play_Sound_From_db(nm As String, hw As Long)
  75.     
  76.     Dim SZ As Long
  77.     Dim WAVE_DATA() As Byte
  78.     Dim bFound As Boolean
  79.     
  80.     If ds Is Nothing Then Call initSound(hw)
  81.     
  82.     If rs.RecordCount = 0 Then Exit Sub
  83.     rs.MoveFirst
  84.     
  85.     
  86.     
  87.     Do While Not rs.EOF
  88.         With rs
  89.             If !Name = nm Then
  90.                 SZ = !wl
  91.                 ReDim WAVE_DATA(SZ)
  92.                 WAVE_DATA() = !wav
  93.                 bFound = True
  94.                 Exit Do
  95.             End If
  96.             .MoveNext
  97.         End With
  98.         bFound = False
  99.     Loop
  100.         
  101.  
  102.     If bFound Then
  103.         Set dsb2 = Nothing
  104.         
  105.         DSBD.lBufferBytes = SZ
  106.         DSBD.lFlags = DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
  107.         
  108.         w = MakeWaveEX(11025, 1, 8)
  109.         
  110.         
  111.         Set dsb2 = ds.CreateSoundBuffer(DSBD, w)
  112.         
  113.         dsb2.WriteBuffer 0, 0, WAVE_DATA(0), DSBLOCK_ENTIREBUFFER
  114.         
  115.         dsb2.Play DSBPLAY_DEFAULT
  116.     Else
  117.         MsgBox "File not found in database", vbApplicationModal
  118.         Exit Sub
  119.     End If
  120.  
  121. End Sub
  122. Public Sub CLEANUPSND()
  123.     Set dsb = Nothing
  124.     Set ds = Nothing
  125.     Set dsb2 = Nothing
  126.     Set dsc = Nothing
  127. End Sub
  128. Private Function MakeWaveEX(Hz As Long, Channels As Integer, Bits As Integer) As WAVEFORMATEX
  129.     MakeWaveEX.lSamplesPerSec = Hz
  130.     MakeWaveEX.lExtra = 0
  131.     MakeWaveEX.nSize = 0
  132.     MakeWaveEX.nBitsPerSample = Bits
  133.     MakeWaveEX.nChannels = Channels
  134.     MakeWaveEX.nFormatTag = WAVE_FORMAT_PCM
  135.     MakeWaveEX.nBlockAlign = Channels * Bits \ 8
  136.     MakeWaveEX.lAvgBytesPerSec = Hz * (Channels * Bits \ 8)
  137. End Function
  138.