La Web del Programador: Comunidad de Programadores
 
    Pregunta:  11651 - QUIERO GRABAR Y FILTRAR SONIDOS
Autor:  Roberto Valseca
Hola.
Estoy realizando una aplicación con sonido y necesito que mi programa sea capaz de grabar un sonido emitido por un usuario y filtrarlo para obtener su duración, su intensidad o si es muy grave o muy agudo, y todo en tiempo de ejecución. Si alguno sabe como hacerlo o simplemente que controles o de que manera se puede hacer lo agradecería.
Saludos.

  Respuesta:  Carlos Ceriani
Con la función mciSendString() de la librería winmm.dll podés grabar sonido en un archivo Wave, reproducir cualquier archivo multimedia, incluso MPEG, y obtener los atributos de los archivos.

Si escribís mciSendString() en el buscador Google, te aparece un montón de documentación.

Esa función envía comandos a un dispositivo multimedia.

algunos ejemplos de comandos que me acuerdo son:

mciSendString(\"Open C:\\archivo.wav type waveaudio alias sonido\",&0,0,0)

Abre el archivo de tipo WAVE para trabajar con él. El nombre del archivo debe estar en formato de DOS. Esto es, si el archivo es \"c:\\mis documentos\\ejemplo.mp3\" entonces en el comando tenés que escribir \"c:\\misdoc~1\\ejemplo.mp3\". Hay una función de librería, que no me acuerdo su nombre que te permite obtener el nombre de un archivo existente en formato DOS. Con el visor de texto API la podés encontrar.

Luego podes mandar:

mciSendString(\"play sonido\",&0,0,0) para reproducir el archivo
mciSendString(\"pause sonido\",&0,0,0) para pausar la reproducción
mciSendString(\"resume sonido\",&0,0,0) para continuar la reproducción
mciSendString(\"stop sonido\",&0,0,0) para detener la reproducción
mciSendString(\"record sonido\",&0,0,0) para grabar desde un dispositivo de entrada, como el micrófono

Si querés reproducir un MP3, el tipo de dispositivo que debés poner en el comando Open es MPEGVideo en lugar de waveaudio.

Al final de todo, tenés que cerrar el archivo:

mciSendString(\"Save sonido\",&0,0,0) para grabar el archivo al disco. No estoy bien seguro de que el comando sea así.
mciSendString(\"Close sonido\",&0,0,0) para cerrar el dispositivo

Espero que te sirva