2011-03-30 6 views
1

나는 높고 낮게 검색해 왔으며 절망적이었습니다. 내가 성취하고자하는 것은 단순히 마이크에서 오디오를 녹음하여 파일에 저장 한 다음 다시 재생하는 것입니다. 내가 시도한 것들 :MS Access의 녹음 및 재생 오디오

내가 말했듯이, 나는 누군가가 생각할 수있는 끔찍한 트릭을 사용하여 자동화 할 수있는 것에 대해 개방적이다. 어떤 제안? 이 도움이 될 것입니다

답변

3

가 나는 이것이 이전 게시물입니다 알지만, 여기에 여러 번 착륙 VBA로 오디오를 녹음 할 수있는 해결책을 찾았습니다. 나는 마침내 내가 공유하고 싶습니다 http://www.vbarchiv.net에 대한 해결책을 발견 : 모듈에 넣고을, 이름을 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 

을이처럼 사용할 수 있습니다

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 
+0

나는 분명히 좋은 해결책이 아닌 외부 .exe 파일을 사용하여 종료했다. 지금 당장은 그렇게되지 않을 것이므로 잠시있을 수는 있지만,이 파일이 제대로 작동하는지 알 수있을 것이다. 게시 해 주셔서 감사합니다. – Icode4food