Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 6 Octubre 2014, 23:16 pm



Título: Hacer grabación con micrófono en cpp
Publicado por: Kaxperday en 6 Octubre 2014, 23:16 pm
Hola a todos, estoy intentando hacer una funcion en cpp que grabe archivos de audio en formato ".bmp" o ".mp3" y a ser posible controlar el tiempo de recogida de datos.

Ahora no puedo subir codigos y no puedo aportar mas información.

 Me podeis pasar el codigo, decirme como hacerlo o encontarlo lo agradeceria.

Aportare mas datos y codigo mas tarde, gracias.

Saludos.


Título: Re: Hacer grabacion con microsofo en cpp
Publicado por: engel lex en 6 Octubre 2014, 23:36 pm
Citar
Ahora no puedo subir codigos y no puedo aportar mas información.

 Me podeis pasar el codigo, decirme como hacerlo o encontarlo lo agradeceria.

por que no puedes subir códigos? quien lo prohíbe?

no se dan codigos hechos, eso si va contra las reglas del foro...

quieres guardar .mp3 y .bmp pero desde donde? cual es la fuente? si la fuente es la misma que el resultado con un abrir y escribir archivo en modo binario bastaría


Título: Re:
Publicado por: ivancea96 en 6 Octubre 2014, 23:58 pm
Si buscas grabar audio, te muestro un resultado de Google, (gran empresa, mejor buscador): http://www.dreamincode.net/forums/topic/208153-sound-recorder-using-the-low-level-windows-api-in-c/


Título: Re: Hacer grabacion con microsofo en cpp
Publicado por: Kaxperday en 7 Octubre 2014, 00:21 am
Hola no podía subir código porque no estaba con el ordenador, sí con el móvil. De todas formas si hago un POST con la intención de aprender a grabar voz con cpp es porque no se como hacerlo y creédme que ya he googleado bastante. Creo haber conseguido hacer captura con webcam y grabar vídeo, ahora busco grabar audio, y no encuentro ningún código ni nada por internet de momento, por lo que ví preciso hacer el tema.

Destacar que no quiero usar programas externos, ahora mi internet es prácticamente nulo por lo que no puedo hacer más de escribir este mensaje, he visitado la página y parece interesante mañana me pondré a ello, de todas formas leí algo de waveln() que grababa audio pero no encontré nada de ella ni ejemplos librerías nada.

También he pensado en hacer un vídeo y pasarlo a ".mp3" cosa que de primeras no sabría hacer, y demás de todas formas mañana me miro el link que me pasaste con detalle, aunque de primeras veo mucho código y no lo guarda en archivo, no sé gracias y mañana os comento.

Saludos.


Título: Re: Hacer grabación con micrósono en cpp
Publicado por: MCKSys Argentina en 7 Octubre 2014, 01:09 am
Tuve que leer el thread completo porque no tenía idea de lo que un micrósono (o microsofo) era...  :xD :xD :xD

@Kaxperday: Sigue los consejos de ivancea96 y busca en google. Hay muchos ejemplos en la web acerca de lo que quieres hacer. Con respecto a MP3, la lib lame (http://lame.sourceforge.net/) es la más usada y es GPL.

Saludos!


Título: Re: Hacer grabación con micrófono en cpp
Publicado por: Kaxperday en 7 Octubre 2014, 10:06 am
Vaya me he ojeado el código de ivancea y no sé en que momento comienza a grabar el audio pero lo menos hay 10 archivos ".c" es dificil y más sin saber de interfaz gráfica de ventanas.

Por lo de lame acabo de visitar la página he intentado descargarlo y todos los archivos son ".tar.gz" yo lo quiero para windows, y no encontré ningún ".zip" ni ".rar" ni código fuente.

http://sourceforge.net/projects/lame/files/lame/3.99/ (http://sourceforge.net/projects/lame/files/lame/3.99/)

Saludos.


Título: Re: Hacer grabación con micrósono en cpp
Publicado por: ivancea96 en 7 Octubre 2014, 11:27 am
WinRar descomprime los .tar.gz, si es lo que preguntas.


Título: Re: Hacer grabación con micrósono en cpp
Publicado por: Kaxperday en 7 Octubre 2014, 14:07 pm
Vaya gracias ahora me entero y el zip también vale, ahora bien tengo unas 15 carpetas y muchos archivos que no se para que valen para muchos sistemas operativos, y varios proyectos en cpp, ¿se supone que tengo que escarbar de ahí una función que me grabe el archivo de audio, es que estoy hecho un lío, ¿sabéis que directorio es el de windows donde está el proyecto que graba el audio? Así al menos me estudio ese y no 15 más como él xD, descarto la carpeta que se llama debian y mac.

Y una vez encuentre el codigo con su proyecto y su main, bueno ahí ya me las trataré de apañar.

Edito:
Citar
quieres guardar .mp3 y .bmp pero desde donde? cual es la fuente? si la fuente es la misma que el resultado con un abrir y escribir archivo en modo binario bastaría

Claro esa es la pregunta ¿como extraigo los datos binarios que recibe el micrófono? Luego ya sería guardarlos en un archivo ".mp3" o ".bmp" o lo que sea supongo, pero como hago la función de extraer esos bytes del micrófono es la pregunta.

La verdad esto de lame no se nada, estaré estudiando el link de ivancea y buscaré donde extrae datos aunque si me podías decir que ".c" es el que lo hace mejor :=()

Gracias :P


Título: Re: Hacer grabación con micrófono en cpp
Publicado por: Eternal Idol en 7 Octubre 2014, 16:50 pm
BMP es un imagen  :silbar: WAV es un audio.

La solucion de ivancea96 era buena, si te resulta dificil trata de usar mciSendCommand (http://msdn.microsoft.com/en-us/library/dd757160%28VS.85%29.aspx) con MCI_RECORD que es mas sencilla pero no mejor.

Ejemplo:
Recording with a Waveform-Audio Device (http://msdn.microsoft.com/en-us/library/windows/desktop/dd798631%28v=vs.85%29.aspx).


Título: Re: Hacer grabación con micrófono en cpp
Publicado por: Kaxperday en 8 Octubre 2014, 21:05 pm
Hola de nuevo siento la demora, gracias por las respuestas sobretodo a eternal idol que me ha pasado justo lo que buscaba, un código simple que haga un archivo de voz, no quiero más xD.

Bueno me he puesto a probarlo y no me compila os paso todo el codigo:

main.cpp:

Código
  1. #include <Windows.h>
  2. using namespace std;
  3.  
  4. DWORD recordWAVEFile(DWORD dwMilliSeconds)
  5. {
  6. UINT wDeviceID;
  7. DWORD dwReturn;
  8. MCI_OPEN_PARMS mciOpenParms;
  9. MCI_RECORD_PARMS mciRecordParms;
  10. MCI_SAVE_PARMS mciSaveParms;
  11. MCI_PLAY_PARMS mciPlayParms;
  12.  
  13. // Open a waveform-audio device with a new file for recording.
  14. mciOpenParms.lpstrDeviceType = (LPCSTR)"waveaudio";
  15. mciOpenParms.lpstrElementName = (LPCSTR)"";
  16. if (dwReturn = mciSendCommand(0, MCI_OPEN,
  17. MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,
  18. (DWORD)(LPVOID)&mciOpenParms))
  19. {
  20. // Failed to open device; don't close it, just return error.
  21. return (dwReturn);
  22. }
  23.  
  24. // The device opened successfully; get the device ID.
  25. wDeviceID = mciOpenParms.wDeviceID;
  26.  
  27. // Begin recording and record for the specified number of
  28. // milliseconds. Wait for recording to complete before continuing.
  29. // Assume the default time format for the waveform-audio device
  30. // (milliseconds).
  31. mciRecordParms.dwTo = dwMilliSeconds;
  32. if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,
  33. MCI_TO | MCI_WAIT, (DWORD)(LPVOID)&mciRecordParms))
  34. {
  35. mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
  36. return (dwReturn);
  37. }
  38.  
  39. // Play the recording and query user to save the file.
  40. mciPlayParms.dwFrom = 0L;
  41. if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,
  42. MCI_FROM | MCI_WAIT, (DWORD)(LPVOID)&mciPlayParms))
  43. {
  44. mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
  45. return (dwReturn);
  46. }
  47. /*HWND hMainWnd;
  48.  
  49. if (MessageBox(hMainWnd, "Do you want to save this recording?",
  50. (LPCSTR)"", MB_YESNO) == IDNO)
  51. {
  52. mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
  53. return (0L);
  54. }*/
  55.  
  56. // Save the recording to a file named TEMPFILE.WAV. Wait for
  57. // the operation to complete before continuing.
  58. mciSaveParms.lpfilename = "tempfile.wav";
  59. if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,
  60. MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID)&mciSaveParms))
  61. {
  62. mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
  63. return (dwReturn);
  64. }
  65.  
  66. return (0L);
  67. }
  68.  
  69. int main()
  70. {
  71. recordWAVEFile(10000);
  72. return 0;
  73. }
  74.  

Errores:

"Error   1   error LNK2019: símbolo externo __imp__mciSendCommandA@16 sin resolver al que se hace referencia en la función "unsigned long __cdecl recordWAVEFile(unsigned long)" (?recordWAVEFile@@YAKK@Z)"

"Error   2   error LNK1120: 1 externos sin resolver"

Destacar que he modificado el codigo SOLO he puesto como comentario donde creo la ventana HWND y el siguiente if, ya que no me interesa preguntar ni hacer ventanas, y el codigo fuente que encontré aquí: (encontro eternal idol <3)*

http://msdn.microsoft.com/en-us/library/windows/desktop/dd798631%28v=vs.85%29.aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/dd798631%28v=vs.85%29.aspx)

No estaba declarada la ventana, probe ha hacer lo poco que se de ventanas y seguía sin funcionar así que lo puse como comentario pero da esos errores, haber si sabéis algo

Muchas gracias y un saludo.


Título: Re: Hacer grabación con micrófono en cpp
Publicado por: Eternal Idol en 8 Octubre 2014, 21:24 pm
Compila bien pero falla al enlazar, te falta Winmm.lib, lo podes añdir en la configuracion de un proyecto, pasandole al compilador/enlazador la linea de comandos correspodiente o embebiendolo en el codigo asi (extension de VC++):

Código
  1. #pragma comment(lib, "Winmm.lib")


Título: Re: Hacer grabación con micrófono en cpp
Publicado por: Kaxperday en 8 Octubre 2014, 23:27 pm
Mil gracias, siempre estáis allí para ayudarme, he probado el código y me funcionó con éxito si necesitáis algo me decís, gracias :)


Título: Re: Hacer grabación con micrófono en cpp
Publicado por: Eternal Idol en 9 Octubre 2014, 00:03 am
De nadas  ::)