Página 1 de 1
arquivo de som
Enviado: 08 Mai 2013 17:35
por cjp
Pessoal, alguém sabe me informar se tem como, usando um programa feito em Harbour (modo console ou até em modo gráfico), gravar um pequeno arquivo de som (coisa de poucos segundos) a partir de um microfone ligado na placa de som?
Queria fazer algo bem simples: o usuário tecla um botão, ele capta o áudio do microfone, ele tecla novamente, encerra a gravação. Daí o programa grava o som num arquivo de som, do tipo .wmv, ou qualquer outro tipo reconhecível.
É possível?
arquivo de som
Enviado: 08 Mai 2013 22:21
por sygecom
Não conheço nada pronto em xHarbour, mas da para fazer usando as API do Windows, veja a API:
http://msdn.microsoft.com/en-us/library/aa446573.aspx
E procure aqui no foram como usar as API do Windows.
De uma olhada também em: Microsoft.DiretctX.DirectSound
http://msdn.microsoft.com/en-us/library ... 05782.aspx
arquivo de som
Enviado: 15 Mai 2013 00:07
por cjp
Achei o exemplo do José Quintas postado aqui no grupo para chamar a API da Windows. Fiz umas adaptações, ficou assim:
Código: Selecionar todos
#include "hbdyn.ch"
PROCEDURE Main
LOCAL nCont
?getaudio()
inkey(10)
RETURN
FUNCTION CallWindowsAPI( cFunctionName, cLib, ... )
LOCAL hHandleDll := 0, nVar
hHandleDll := hb_LibLoad( cLib )
nVar := hb_DynCall( { cFunctionName, hHandleDll, HB_DYN_CALLCONV_STDCALL }, ... )
hb_LibFree( hHandleDll )
RETURN nVar
function getaudio()
CallWindowsAPI( "waveinstart", "kernel32.dll" )
RETURN 1
Neste exemplo, não está dando erro, está retornando corretamente o 1 do teste. Entretanto, aparentemente, não está acontecendo nada, não está gravando.
Na verdade ainda estou tentando entender os links que vc citou. Peguei o waveinstart apenas como exemplo, para teste.
Será que estou no caminho certo?
arquivo de som
Enviado: 15 Mai 2013 00:22
por sygecom
Está no caminho sim, a DLL certa ser usada é: Winmm.dll, veja o link abaixo
http://msdn.microsoft.com/en-us/library ... 51(v=vs.85).aspx
arquivo de som
Enviado: 16 Mai 2013 00:20
por cjp
O link que vc referiu está com algum problema, está dando página não encontrada.
Testei com a winmm.dll, mas não mudou nada. Será que fiz algo errado?
Coloquei assim:
Código: Selecionar todos
#include "hbdyn.ch"
PROCEDURE Main
LOCAL nCont
?getaudio()
inkey(10)
RETURN
FUNCTION CallWindowsAPI( cFunctionName, cLib, ... )
LOCAL hHandleDll := 0, nVar
hHandleDll := hb_LibLoad( cLib )
nVar := hb_DynCall( { cFunctionName, hHandleDll, HB_DYN_CALLCONV_STDCALL }, ... )
hb_LibFree( hHandleDll )
RETURN nVar
function getaudio()
CallWindowsAPI( "waveinstart", "winmm.dll" )
RETURN 1
arquivo de som
Enviado: 16 Mai 2013 00:32
por sygecom
O fórum está comendo bola em alguns link, ele quebra o link. Postei abaixo o link como código:
Código: Selecionar todos
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743851(v=vs.85).aspx
arquivo de som
Enviado: 16 Mai 2013 00:48
por sygecom
Pelo que pude analisar rapidamente, segue uma sequencia:
Waveinopen
Waveinprepareheader
waveinstart
waveinunprepareheader
waveinclose
...
...
arquivo de som
Enviado: 16 Mai 2013 12:55
por cjp
Li o link inteiro. Só não entendi o que significa o MMRESULT que chama cada função, nem onde eu o colocaria.
Fiz assim por enquanto, mas ainda não funcionou:
Código: Selecionar todos
#include "hbdyn.ch"
PROCEDURE Main
LOCAL nCont
?getaudio()
inkey(10)
RETURN
FUNCTION CallWindowsAPI( cFunctionName, cLib, ... )
LOCAL hHandleDll := 0, nVar
hHandleDll := hb_LibLoad( cLib )
nVar := hb_DynCall( { cFunctionName, hHandleDll, HB_DYN_CALLCONV_STDCALL }, ... )
hb_LibFree( hHandleDll )
RETURN nVar
function getaudio()
CallWindowsAPI( "waveinopen", "winmm.dll" )
CallWindowsAPI( "waveinprepareheader", "winmm.dll" )
CallWindowsAPI( "waveinstart", "winmm.dll" )
CallWindowsAPI( "waveinunprepareherader", "winmm.dll" )
CallWindowsAPI( "waveinclose", "winmm.dll" )
RETURN .t.
É isso? Falta alguma coisa?