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?