arquivo de som

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

arquivo de som

Mensagem 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?
Inacio de Carvalho Neto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

arquivo de som

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

arquivo de som

Mensagem 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?
Inacio de Carvalho Neto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

arquivo de som

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

arquivo de som

Mensagem 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
 
Inacio de Carvalho Neto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

arquivo de som

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

arquivo de som

Mensagem por sygecom »

Pelo que pude analisar rapidamente, segue uma sequencia:
Waveinopen
Waveinprepareheader
waveinstart
waveinunprepareheader
waveinclose
...
...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

arquivo de som

Mensagem 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?
Inacio de Carvalho Neto
Responder