2011-03-30 261 views
1

我一直在寻找高和低,是在绝望的地步。我试图做到的是简单地从麦克风录制音频,将它保存到一个文件,然后播放。我曾试过的东西:录制和播放音频

就像我说过的,我愿意使用任何人都可以想到的可怕技巧来自动化任何事情。有什么建议么? 来吧所以,你可以再救我... :-)

回答

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 2012-05-04 12:59:35