Hacer grabación con micrófono en cpp

Iniciado por Kaxperday, 6 Octubre 2014, 23:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

engel lex

CitarAhora 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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ivancea96

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/

Kaxperday

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

MCKSys Argentina

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 es la más usada y es GPL.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Kaxperday

#5
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/

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

WinRar descomprime los .tar.gz, si es lo que preguntas.

Kaxperday

#7
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:
Citarquieres 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
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eternal Idol

#8
BMP es un imagen  :silbar: WAV es un audio.

La solucion de ivancea96 era buena, si te resulta dificil trata de usar mciSendCommand con MCI_RECORD que es mas sencilla pero no mejor.

Ejemplo:
Recording with a Waveform-Audio Device.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Kaxperday

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 (cpp) [Seleccionar]

#include <Windows.h>
using namespace std;

DWORD recordWAVEFile(DWORD dwMilliSeconds)
{
UINT wDeviceID;
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_RECORD_PARMS mciRecordParms;
MCI_SAVE_PARMS mciSaveParms;
MCI_PLAY_PARMS mciPlayParms;

// Open a waveform-audio device with a new file for recording.
mciOpenParms.lpstrDeviceType = (LPCSTR)"waveaudio";
mciOpenParms.lpstrElementName = (LPCSTR)"";
if (dwReturn = mciSendCommand(0, MCI_OPEN,
MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,
(DWORD)(LPVOID)&mciOpenParms))
{
// Failed to open device; don't close it, just return error.
return (dwReturn);
}

// The device opened successfully; get the device ID.
wDeviceID = mciOpenParms.wDeviceID;

// Begin recording and record for the specified number of
// milliseconds. Wait for recording to complete before continuing.
// Assume the default time format for the waveform-audio device
// (milliseconds).
mciRecordParms.dwTo = dwMilliSeconds;
if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,
MCI_TO | MCI_WAIT, (DWORD)(LPVOID)&mciRecordParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return (dwReturn);
}

// Play the recording and query user to save the file.
mciPlayParms.dwFrom = 0L;
if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,
MCI_FROM | MCI_WAIT, (DWORD)(LPVOID)&mciPlayParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return (dwReturn);
}
/*HWND hMainWnd;

if (MessageBox(hMainWnd, "Do you want to save this recording?",
(LPCSTR)"", MB_YESNO) == IDNO)
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return (0L);
}*/

// Save the recording to a file named TEMPFILE.WAV. Wait for
// the operation to complete before continuing.
mciSaveParms.lpfilename = "tempfile.wav";
if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,
MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID)&mciSaveParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return (dwReturn);
}

return (0L);
}

int main()
{
recordWAVEFile(10000);
return 0;
}


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

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.