Ejemplos usando el Api de windows para Visual basic

265 - Grabadora wav

<Volver> - Anterior - Siguiente



 

 

 

Recurso enviado por Angie Vargas para poder crear una grabadora wav en VB 6.0 mediante la Api de windows

 

Link para descargar el código fuente : Descargar

 

 

 

 

Descripción del ejemplo

 

Durante un tiempo estuve utilizando la Grabadora de Windows para capturar audio de la tarjeta de sonido de mi computadora, pero realmente esa aplicación no me satisfacía así que me embarque en el proyecto de construir mi propia grabadora. Pensé que era fácil pero no lo era tanto como pensé.

Lo primero que debes hacer para poder capturar audio en tu computadora es configurar el audio digital para grabar. ¿Y como haces eso?

 

1 - Revisa en tu barra de herramientas si tienes el icono de control de volumen, sino lo tienes ahí puedes activarlo desde el panel de control – Sonido y Multimedia. Si lo tienes ya dale doble clic. Te aparecerá el control de volumen.

 

2 - Haz clic en el menú Opciones, luego en Propiedades selecciona Grabación.

 

3 - En la parte inferior de la pantalla selecciona Stereo Mix (como se ve en la figura) y ahora podrás grabar cualquier sonido que este reproduciendo tu PC. Si no lo haces solo escucharas estática. Ahora desliza el control de volumen del Stereo Mix a la mitad, te preguntaras por que? Simple, porque si lo dejas a todo volumen la grabación será distorsionada.

 

Hasta aquí todo bien.

Abre tu Visual Basic 6.0, selecciona un Exe Estándar y agrégale un modulo.

Coloca como referencia del proyecto la librería Microsoft Scripting Runtime y agrega el componente Microsoft Common Dialog Control 6.0. La primera la necesitamos para poder manejar los archivos del sistema y la segunda para que el usuario pueda guardar el archivo Wav donde el desee.

En el modulo vamos a declarar 2 funciones del API de Windows:

 

La primera te permite tomar el control de cualquier dispositivo multimedia instalado en tu PC con simples instrucciones en ingles; la segunda te permite detector si a ocurrido un error con cualquiera de las instrucciones que has enviado.

Ahora en el formulario vas a colocar 6 botones: CmdPrev, CmdNext, CmdPlay, CmdStop, CmdRec y CmdGuardar. Un control Timer, un control CommonDialog y dos etiquetas. Algo así:

 

 

Si quieres ponerle imágenes puede quedar así:

 

 

Coloca la propiedad Enable de los botones como falsa, menos la de CmdRec .

Ya que tienes el formulario listo voy a contarte de 2 problemas que se me presentaron al realizar esta aplicación. El primero fue que la función mciSendString tiene la limitante que no acepta path largos para salvar el archivo en memoria, así que si lo quieres guardar en mis documentos directamente no puedes; la solución que encontré sin enrollarme mucho fue dar un rodeo y almacenar temporalmente el archivo en la unidad c y luego moverlo a donde yo quería. Resuelto ese problema me encontré con otro mas difícil y que me puso a pensar: el archivo guardado no se podía reproducir en ningún reproductor solo en la grabadora de Windows, su tamaño era demasiado grande y si lo escuchabas era como una música macabra sin relación a lo que habías grabado. No te preocupes que eso también tiene solución.

Primero vamos a declarar unas variables:

 

Estas variables están asociadas al control Timer y nos van a permitir mostrar al usuario cuando se esta grabando o reproduciendo un archivo Wav.

 

Estas son nuestras variables de trabajo, donde se almacenaran los valores devueltos por las funciones API mciSendString y mciGetErrorString.

Y tenemos esta variable muy importante:

 

Cuando se almacena un archivo wav con mciSendString, la función realmente no lo guarda con calidad CD esto es: 44100 Hz, l6 bits y 2 canales de audio sino que lo guarda a 11025, por esta razón no lo puedes escuchar en cualquier otro reproductor.
La solución a este problema se la debo al señor S. Clarke que se topo con el mismo problema que yo y publico sus descubrimientos en : www.rediware.com

Así que esta variable la utilizaremos para calcular el lugar exacto donde se produce el error de almacenamiento del archivo wav.

 

 

Estas variables las utilizaremos con un control Timer para llevar el tiempo de grabación y reproducción.

Como te habrás dado cuenta en la ilustración del formulario todos los botones están desactivados menos el de grabar. Vamos a programar el evento clic de este botón:

 

Recuerda que ambas funciones API siempre retornan un valor y La calidad de sonido CD comprende 2 canales de audio, una frecuencia de muestreo de 44100 Hz y se almacena a una tasa de 16 bits.

Ya tenemos nuestro sonido en memoria, entonces podemos reproducirlo.

 

Esta simple instrucción reproduce el archivo en memoria desde su primera posición

 

Ahora se quieres rebobinarlos para revisar tu sonido, puedes programar el botón Previo

 

Fíjate apagamos el Timer un momento, reinicializamos las variables de tiempo y detenemos el sonido que esta en memoria para poder otra vez encender el proceso de reproducción.

El botón Next lo que hace es detener la reproducción.

Result = mciSendString("stop sonido", cadena, Len(cadena), 0)

Esta sentencia detiene la reproducción y la grabación del sonido.

    

Ahora hablemos del control Timer, este tiene un intervalo de 1000 el equivalente a un segundo, cada segundo el control revisa que esta pasando con la aplicación basándose en el comportamiento de los botones. Como se puede ver en el código siguiente:

 

El procedimiento CalcularTiempo nos permite determinar el tiempo de reproducción o grabación como cualquier reproductor comercial

 

Ahora vamos a guardar en disco nuestro sonido, suena fácil pero vamos a tener que dar unas vueltas primero.

 

Creo que ya te conté que mciSendString no soporta path largos, así que vamos a guardar nuestro sonido en un archivo temporal en el directorio raíz de C y llamamos al procedimiento GetRecStatus que va a leer toda la información sobre el sonido grabado que esta en memoria, esa información nos será útil ya que esa información no se grabo en el archivo Wav.

 

 Cerramos el archivo en memoria para poder acceder a la copia en disco y llamamos al procedimiento FixWaveFile, que tendrá acceso binario al archivo para corregir el error.

 

Estos dos procedimientos se los debo a S. Clark que se topo con el mismo problema que yo y estoy realmente agradecida. Bueno, ahora que ya tenemos todo arreglado vamos aguardar el sonido donde realmente queremos.

 

Primero creamos un objeto archivo de sistema para manejar nuestro archivo wav, definimos una variable como tipo File y le asignamos el archivo en disco, abrimos un cuadro de dialogo salvar para que el usuario coloque el nombre que le quiere poner al archivo y en que carpeta lo quiere guardar. La variable Nfile almacena el nuevo nombre del archivo y la variable ruta el path donde se guardara. Renombramos el archivo wav y lo movemos a la ruta seleccionada.

Y aquí tienes un grabador de sonidos básico, puedes probar el ejemplo, ampliarlo o utilizar el código en tus propios programas, pero recuerda de donde lo sacaste y no quites merito a su autor. Espero haberte ayudado. Cualquier cosa puedes escribirme al correo acvg_correo@yahoo.com

© 2008 Angie Vargas - Caracas – Venezuela

 



Buscar en Recursos vb