Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 在MS Access中录制和播放音频_Ms Access_Vba_Audio_Audio Recording - Fatal编程技术网

Ms access 在MS Access中录制和播放音频

Ms access 在MS Access中录制和播放音频,ms-access,vba,audio,audio-recording,Ms Access,Vba,Audio,Audio Recording,我一直在到处寻找,现在已经到了绝望的地步。我试图完成的是简单地从麦克风录制音频,保存到文件中,然后播放。我尝试过的事情: 命令行音频录制。我找到了几个选择,但没有一个是我可以去工作的 我认为这在XP中可以工作,但在Vista/7上不行 (您可以通过单击获取完整内容,然后它是我的第五个。)此解决方案运行顺利,但从不记录任何内容 正如我所说的,我愿意接受任何我可以使用任何人能想到的可怕技巧实现自动化的东西。有什么建议吗?来吧,你可以再救我一次…:-) 这可能有助于: 这可能有助于: 我知道这是一

我一直在到处寻找,现在已经到了绝望的地步。我试图完成的是简单地从麦克风录制音频,保存到文件中,然后播放。我尝试过的事情:

  • 命令行音频录制。我找到了几个选择,但没有一个是我可以去工作的
  • 我认为这在XP中可以工作,但在Vista/7上不行
  • (您可以通过单击获取完整内容,然后它是我的第五个。)此解决方案运行顺利,但从不记录任何内容
正如我所说的,我愿意接受任何我可以使用任何人能想到的可怕技巧实现自动化的东西。有什么建议吗?来吧,你可以再救我一次…:-)

这可能有助于:

这可能有助于:


我知道这是一篇老文章,但为了寻找用vba录制音频的解决方案,我在这里登陆了好几次。我终于找到了一个解决方案,我想与大家分享: 将其放在一个模块中,将其命名为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

我知道这是一篇老文章,但为了寻找用vba录制音频的解决方案,我在这里登陆了好几次。我终于找到了一个解决方案,我想与大家分享: 将其放在一个模块中,将其命名为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

这是链接到我链接的MS KB文章的页面。它不起作用-(这是链接到我链接的MS KB文章的页面。它不起作用:-(我最后使用了一个外部.exe文件,这显然不是一个很好的解决方案。它现在没有按下,所以可能需要一段时间,但我可能会看看是否可以让它工作。非常感谢发布它。我最后使用了一个外部.exe文件,这显然不是一个很好的解决方案。它现在没有按下,所以可能需要一段时间,但是我可能会看看我是否能让这个工作。非常感谢张贴它。