2011-03-30 262 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