ENTRADA DO MICROFONE

USUARIO.EXCLUIDOS 01/09/2007 20:45:52
#233735
E aí pessoal, precisava saber como captar os dados de entrada do microfone para formar um grafico, igual ao Gravador de Som do Windows,
é muito importante, agradeço se puderem ajudar
MJAC 02/09/2007 14:35:06
#233763
Resposta escolhida
Amigo a API mciSendString é oque vc procura. A API mciGetErrorString também será necessária para identificar erros.

Então adiciona um módulo (addmodule) e cola isso:

 
Option Explicit

Private 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
Private Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long

'retorna erro de retorno de STATUS
Private Sub PrintMCIStatus(Code As Long)
Dim ErrorMsg As String
ErrorMsg = String$(1024, vbNullChar) 'buffer para armazenar erro
mciGetErrorString Code, ErrorMsg, 1024 ' pega erro
ErrorMsg = Left(ErrorMsg, InStr(1, ErrorMsg, vbNullChar) - 1) 'limpa vazios
Debug.Print ErrorMsg
End Sub

'inicia bufferizacao - hwnd de form
Public Sub Record(ByVal hwnd As Long)
PrintMCIStatus mciSendString("open new type waveaudio alias Temp wait", vbNullString, 0, 0)
PrintMCIStatus mciSendString("seek Temp to start wait", vbNullString, 0, 0)
PrintMCIStatus mciSendString("record Temp overwrite notify", vbNullString, 0, hwnd)
End Sub

'toca arquivo Temp - c:\windows\desktop\arquivo.mp3 ou c:\windows\desktop\arquivo.wav
Public Sub PlaySound(ByVal FileName As String)
On Error Resume Next
PrintMCIStatus mciSendString("open """ & FileName & """ alias Temp wait", vbNullString, 0, 0)
PrintMCIStatus mciSendString("seek Temp to start wait", vbNullString, 0, 0)
PrintMCIStatus mciSendString("play Temp", vbNullString, 0, 0)
End Sub

'grava arquivo>>> C:\windows\desktop\arquivo.wav
Public Sub StopSaveRecord(ByVal Arquivo As String)
PrintMCIStatus mciSendString("stop Temp", vbNullString, 0, 0)
PrintMCIStatus mciSendString("save Temp """ & Arquivo & """", vbNullString, 0, 0)
PrintMCIStatus mciSendString("close Temp", vbNullString, 0, 0)

End Sub

'Encerrar Arquivo sem gravar (e para caso de play)
Public Sub EncerrarArquivo()
PrintMCIStatus mciSendString("close Temp", vbNullString, 0, 0)
End Sub


Agora para usar é só chamar a função que desejar lá do formulário. Crie um botão para iniciar a gravação e digite isso:


  Record Me.Hwnd 


E para parar e salvar:
  StopSaveRecord "C:\MeuArquivo.wav" 


ou o diretório q vc quiser... tenta ai... abraços...
USUARIO.EXCLUIDOS 02/09/2007 19:52:25
#233792
Valeu MJAC pela dica, mas é que eu precisa pegar as dados da entrada do microfone para formar um [txt-color=#ff0000]gráfico[/txt-color],

Eu não expliquei mas a minha intenção é fazer um ociloscópio usando a entrada do microfone, assim eu não precisaria fazer um circuito que convertesse de analógico para digital, mais mesmo assim vc ja mê deu uma pista aonde eu deva procurar, vou continuar tentando

obrigado

Se souber de mais alguma coisa me avise
MJAC 03/09/2007 11:05:02
#233833
Amigo então você procurar algo como nesse exemplo ai em anexo, abre o projeto pelo Grupo1.vbg (é que eu apenas melhorei um antigo projeto de ocx que tem aqui no forum e criei um projeto exemplo).

Bom mas devo alertá-lo que esse exemplo trabalha diretamente na porta, então não adianta desligar o som no windows que ele continua analisando a entrada, mesmo se o microfone não estiver conectado na porta, interferências eletromagnéticas serão detectadas. Então não é muito confiável, mas é o melhor que posso fazer por você. Tenta ai e me fala se gostou. abraços...
USUARIO.EXCLUIDOS 03/09/2007 21:00:51
#233946
Nossa!!! Já gostei logo de cara. Muito Obrigado MJAC vc me ajudou bastante, ainda vou testar

Valeu!!
Tópico encerrado , respostas não são mais permitidas