I have been searching high and lo开发者_JAVA百科w and am at the point of desperation. What I am trying to accomplish is to simply record audio from the microphone, save it to a file and then play it back. Things I have tried:
- Command line audio recording. I found a couple options but NONE that I could get to work.
- http://support.microsoft.com/kb/210067 I think this would work in XP but not on Vista/7.
- http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_26416850.html (You can get the full thing by clicking Here then it was the 5th one down for me.) This solution runs without a hitch but never records anything.
Like I said, I am open to about anything that I can automate using any terrible tricks anyone can think of. Any suggestions? Come on SO, you can save me again... :-)
I know this is an old post, but I landed here several times in my search for a solution to record audio with vba. I finally found a solution on http://www.vbarchiv.net I would like to share: Put this in a module, lets name it sndmodule:
Option Compare Database
Option Explicit
REM found at http://www.vbarchiv.net
Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000
Public Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" ( _
ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
Public Enum BitsPerSec
Bits16 = 16
Bits8 = 8
End Enum
Public Enum SampelsPerSec
Sampels8000 = 8000
Sampels11025 = 11025
Sampels12000 = 12000
Sampels16000 = 16000
Sampels22050 = 22050
Sampels24000 = 24000
Sampels32000 = 32000
Sampels44100 = 44100
Sampels48000 = 48000
End Enum
Public Enum Channels
Mono = 1
Stereo = 2
End Enum
Public Sub play(file As String)
Dim wavefile
wavefile = file
Call sndPlaySound(wavefile, SND_ASYNC Or SND_FILENAME)
End Sub
Public Sub StartRecord(ByVal BPS As BitsPerSec, _
ByVal SPS As SampelsPerSec, ByVal Mode As Channels)
Dim retStr As String
Dim cBack As Long
Dim BytesPerSec As Long
retStr = Space$(128)
BytesPerSec = (Mode * BPS * SPS) / 8
mciSendString "open new type waveaudio alias capture", retStr, 128, cBack
mciSendString "set capture time format milliseconds" & _
" bitspersample " & CStr(BPS) & _
" samplespersec " & CStr(SPS) & _
" channels " & CStr(Mode) & _
" bytespersec " & CStr(BytesPerSec) & _
" alignment 4", retStr, 128, cBack
mciSendString "record capture", retStr, 128, cBack
End Sub
Public Sub SaveRecord(strFile)
Dim retStr As String
Dim TempName As String
Dim cBack As Long
Dim fs, F
TempName = strFile 'Left$(strFile, 3) & "Temp.wav"
retStr = Space$(128)
mciSendString "stop capture", retStr, 128, cBack
mciSendString "save capture " & TempName, retStr, 128, cBack
mciSendString "close capture", retStr, 128, cBack
End Sub
In your code you can use it like this:
Private Sub StartRecord_Click()
sndmodule.StartRecord Bits16, Sampels32000, Mono
End Sub
Private Sub EndRecord_Click()
sndmodule.SaveRecord "C:\Users\Johanness\Downloads\test.wav"
End Sub
Private Sub Play_Click()
sndmodule.play "C:\Users\Johanness\Downloads\test.wav"
End Sub
Maby this will help:
http://www.ehow.com/how_7889013_use-vba-access-capture-audio.html
精彩评论