ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Proyecto final de POO


Enviado por   •  13 de Septiembre de 2018  •  Trabajos  •  1.704 Palabras (7 Páginas)  •  12 Visitas

Página 1 de 7

Introducción

Dentro de los usos que se le pueden dar a la programación están los fines recreativos y artísticos, como en este proyecto, en el que por medio de la programación orientada a objetos se construyó un menú que emula un teclado musical, en el cual se pueden reproducir distintos sonidos sintéticos de bajos, cuerdas o “plucks” y percusiones.

En cada sintetizador se usaron distintos conceptos de POO y de teoría de clases para llevar a cabo el mismo propósito, que es reproducir sonido en base a las teclas presionadas y poder cambiar de un sonido a otro en el momento que lo ordene el usuario.

Marco teórico

Cada tipo de sintetizador se utilizó el concepto de objeto, siendo entonces, los plucks un tipo de objeto, los bajos otro tipo de objeto e igualmente con las percusiones. De la misma forma se hizo con los tipos de percusiones que se utilizaron y los tres sintetizadores de bajo, así, cada tipo de bajo y de percusión era otro objeto que heredaba características de su tipo de instrumento respectivo. Cada uno de estos objetos tiene la capacidad de ser tocado y de reproducir un sonido, siendo este uno de los métodos que posee cada sonido, además de atributos como el tipo de sonido que puede hacer cada sintetizador.

Los sonidos se reproducen usando la función PlaySound de la librería windows.h, en la cual se tiene qué indicar el nombre del archivo a reproducir por medio de un dato de tipo LPCTSTR (Long Pointer to a Constant TCHAR STRing), el cual puede ser introducido a la función con una variable de ese tipo o escribiendo el nombre del archivo en la función. En la función PlaySound también tenemos que especificar la forma en la que se reproducirá el archivo, para este proyecto sólo utilizamos SND_ASYNC, pues este nos permite reproducir los sonidos de tal forma que el programa se asemeja más a un teclado, ya que a diferencia de la mayoría de las otras banderas disponibles para la función PlaySound, SND_ASYNC nos permite interrumpir un sonido que se esté reproduciendo en determinado momento por otro sonido.

Para los sonidos utilizados en el programa se hizo una selección de grabaciones de archivos .WAV. En el caso de los sintetizadores, se grabaron en el DAW (Deskop Audio Workstation) FL Studio las notas a reproducir de sintetizador, para las percusiones se utilizaron distintas librerías de muestras de batería y percusiones sintéticas.

Objetivos

Hablando del usuario, el programa hecho para este proyecto fue hecho con motivos recreativos, simplemente busca ser para entretenimiento, por mera diversión “jugar” con distintos sonidos, imitar algunas canciones, aunque no se tenga una idea de teoría musical, e incluso ayudar a desarrollar ideas espontaneas a los músicos que tengan la necesidad de hacerlo.

Hablando del creador, es una preparación a desarrollar futuros proyectos relacionados con el sonido y la música, como la creación de plug-ins o DAWs, entre otros propósitos relacionados con electrónica, acústica y producción musical.

Además, al usar distintos códigos para hacer cada instrumento se evaluará cuál es la más conveniente de utilizar en este caso, según criterios como la cantidad de memoria usada, la cantidad de código escrito y la complejidad del mismo

Desarrollo

Para hacer los plucks utilizaremos un apuntador a objetos, por lo que hacemos la siguiente clase de la siguiente manera:

En el Header de la clase PLUCK, tenemos incluida la cabecera conio.h debido a que se utiliza getch() y kbhit() para que el programa responda al teclado, la cabecera windows.h se necesita para usar la función PlaySound.

El atributo LPCTSTR *n contiene los nombres de los archivos .WAV de la librería del sonido deseado.

El método play pretende ejecutar uno de los métodos a, w, s, e… dependiendo de la tecla que sea pulsada. También regresa un dato de tipo int que sirve para cambiar de sintetizador, este valor cambia sólo cuando se presionan las teclas de 1 a 9, regresando valores del 0 al 8. Dado que getch regresa un valor de tipo char, se necesita convertir los números a enteros, según el código ASCII al hacer la igualación de char t con int c se tiene que restar 49 para que cuando se presione 1 se regrese un 0, cuando se presione 2 se regrese un 1 y así sucesivamente.

Los métodos a, w, s, e… tienen la función PlaySound, asignándole a cada letra un elemento de *n, se encargan de reproducir los archivos .WAV.

En el constructor se crea una cadena con el apuntador a datos LPCTSTR de 16 elementos, a cada elemento se le asignará el nombre de un archivo .WAV. En el destructor de elimina la cadena.

El en el método load le asignamos el nombre de los archivos a cada elemento de n.

Para el bajo se usará el concepto de HERENCIA, por lo que se crea la clase base BASS, posteriormente las clases derivadas con los nombres de los distintos bajos.

En BASS se implementan las mismas librerías que en PLUCK, así como los mismos métodos a,w,s,e... y el atributo LPCTSTR *n. A diferencia de PLUCK, usaremos un constructor parametrizado que hace el mismo trabajo que load en PLUCK. El parámetro *N es una cadena de datos LPCTSTR que contiene los nombres de los archivos.

En la página 8 se encuentran las clases derivadas DX, GOL_BL y BLUE_SUNDAY, que son las que heredan de la clase base BASS.

Para las percusiones se utilizó el polimorfismo, esto con el fin de no tener que declarar el apuntador a datos de tipo LPCTSTR y hacer la cadena, si no que en cada método q,w,e,r… se escribe el nombre del archivo en la función PlaySound, y como hay un set de percusiones sintéticas y otro de acústicas, entonces para cada una se usan archivos distintos lo que obliga a sobreescribir cada método.

Se usó la sobrecarga de operadores para regresar el valor que determina el sintetizador que se está usando o si se desea terminar el programa, para esto necesitamos introducir dos objetos PERC, el primero Q contiene el dato entero y el char que activa esa función (7 para las percusiones sintéticas y 6 para las acústicas, esto se aprecia en el main) y el segundo P contiene los datos que se van a modificar durante la ejecución del método.

¿Por qué se necesita introducir dos objetos PERC? Al momento de ejecutar el método + y cambiar a otro instrumento, el atributo de tipo int C se modifica, entonces al querer tocar las percuciones

...

Descargar como (para miembros actualizados)  txt (10.6 Kb)   pdf (58.8 Kb)   docx (17 Kb)  
Leer 6 páginas más »
Disponible sólo en Clubensayos.com