![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Consulta para crear un vumetro/ecualizador
Estube buscando informacion para crear un vumetro o algunos le llaman ecualizador. En definitiva el de la imagen que posteo.
![]() No entiendo mucho o muy poco, sobre el MCI o el DirectX, asi que me puse a buscar e intentar entender algo. Y esto es lo que mas o menos encontre (tenganme paciencia). Encontre este tutorial soobre el MCI de windows. edn.embarcadero.com/article/28332#sthash.AuLj1Nc0.dpuf y encontre un lugar chino donde habian posteado parte del codigo, trastee para que ande y es lo que adjunto como zip abajo (esta funcionando). En resumen Abre el MCI y lo configura si esto WS_VISIBLE esta comentado no lo muestra en pantalla. Código:
m_hMCIWnd=MCIWndCreate(Handle,
g_hInstance,
// WS_VISIBLE |
WS_CHILD | WS_OVERLAPPED | WS_CAPTION | WS_BORDER |
MCIWNDF_RECORD | MCIWNDF_SHOWALL,
NULL );
Código:
MCI_WAVE_SET_PARMS set_parms; set_parms.wFormatTag = WAVE_FORMAT_PCM; set_parms.wBitsPerSample = 16; // aca deberia ir 8 set_parms.nChannels = 1; set_parms.nBlockAlign = (set_parms.nChannels*set_parms.wBitsPerSample)/8; set_parms.nSamplesPerSec = 44100; // y aqui 11025 Luego el codigo graba la informacion (y aqui nose como ni de donde toma los datos). Código:
char file[260]=""; wsprintf(file,"a",GetTickCount()%100000L); // random filename // // now stop audio and save to disk MCIWndStop(m_hMCIWnd); MCIWndSave(m_hMCIWnd,file); MCIWndClose(m_hMCIWnd); msdn.microsoft.com/en-us/library/aa446573/ clubdelphi.com/foros/showthread.php?t=2020 Cita:
Cita:
Código:
if waveInOpen(@Device,WAVE_MAPPER,@wfx,Handle,0,CALLBACK_WINDOW) = MMSYSERR_NOERROR then
begin
BufferSize:= wfx.nBlockAlign * (wfx.nSamplesPerSec div BuffersPerSec);
Width:= BufferSize;
for i:= 1 to BuffersPerSec do
begin
GetMem(WaveBuffers[i],BufferSize);
with WaveHeaders[i] do
begin
lpData:= WaveBuffers[i];
dwBufferLength:= BufferSize;
dwBytesRecorded := 0;
dwUser := i;
dwFlags := 0;
dwLoops := 0;
lpNext := nil;
reserved := 0;
end;
end;
isDeviceOpen:= TRUE;
for i:= 1 to BuffersPerSec do
if waveInPrepareHeader(Device,@WaveHeaders[i],sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
begin
CloseWaveDevice;
exit;
end;
for i:= 1 to BuffersPerSec do
if waveInAddBuffer(Device,@WaveHeaders[i],sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
begin
CloseWaveDevice;
exit;
end;
waveInStart(Device);
end;
end;
Código:
hdr:= PWaveHdr(Msg.LParam);
with hdr^ do
begin
P:= PByte(lpData);
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(width,128);
Canvas.LineTo(0,128);
for i:= 1 to dwBytesRecorded do
begin
Canvas.LineTo(i,P^);
inc(P);
end;
end;
Otra manera de obtener audio es mediante directX, pero ahi estoy mas perdido aun. |
|
#2
|
|||
|
|||
|
Adjunto un ejemplo que encontre (ruso) realizado en DirectX, aunque uso librerias externas aparentemente, es decir que no vienen instaladas en builder.
|
|
#3
|
||||
|
||||
|
Hola c64.
Creo que vas a encontrar información interesante en los enlaces citados en este antiguo hilo del foro: Ecualizador Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#4
|
|||
|
|||
|
Cita:
Tratamiento a bajo nivel con DirectX y demas http://wainu.ii.uned.es/ing_informat..._audio_cpp.pdf Tratamiento con la API de windows (como el ejemplo que subi) http://www.dreamincode.net/forums/to...dows-api-in-c/ Estoy agarrandole la mano al Builder, pero las API y Direct X son otra cosa totalmente distinta para mi. Por cierto si alguno probo el codigo que subi arriba, y lo ejecuto, el archivo que genera es uno llamado a (sin extension ni nada), si lo renombran a a.wav ahi tendran el sonido en wav, no pude ponerle la extension ya que me tomaba el alfabeto asiatico nose porque. Última edición por c64 fecha: 06-12-2015 a las 23:51:45. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Consulta como crear un socket para transferir por udp | c64 | C++ Builder | 14 | 06-12-2015 04:12:21 |
| Vumetro en C++ | chinchan | C++ Builder | 4 | 30-09-2013 12:26:23 |
| como hacer consulta para crear dos campos a partir de uno | Rom@n | SQL | 2 | 24-12-2008 17:56:37 |
| Componente Vúmetro | edum666 | OOP | 5 | 22-07-2008 17:42:35 |
| componente tipo Vumetro de audio | ebeltete | Varios | 4 | 08-07-2003 23:14:36 |
|