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 |
|