Programació d’una aplicació musical

ins-lluis-domenech-i-monataner-joan-lapeyra-amatTítol: Programació d’una aplicació musical
Autor: Joan Lapeyra Amat
Tutor: Jordi Güell Bonan
Modalitat: Ciències i tecnologia: cientificotècnic
Àrea curricular: Informàtica i música
Centre: Ins Lluís Domènech i Montaner
Localitat: Reus

Objectius:

L’objectiu d’aquest treball és programar una aplicació on hi hagi piano que l’usuari pot tocar mitjançant l’App Inventor. Aquesta aplicació ha de constar de:

  • Una pantalla on es mostra un fragment del piano i l’usuari ha de poder moure el teclat per anar a notes més greus i més agudes segons desitgi. També ha de poder visualitzar més o menys tecles (zoom). Ha de poder tocar lliurement i el més semblant a un piano possible possible: és a dir, ha de tenir la possibilitat de tocar més d’una tecla alhora.
  • Una pantalla on l’usuari toca una cançó determinada per l’aplicació (a part de les notes de piano sona un acompanyament) amb les indicacions que rep de l’aparell. Si falla, la cançó s’ha d’aturar.
Hipòtesis:

Una aplicació com aquesta es pot programar amb l’App Inventor, la plataforma de programació gràfica que permet crear aplicacions per a mòbils Android.

El procés

L’App Inventor utilitza, parlant a grans trets, una programació orientada a objectes (POO). Això significa que tot el que s’hi programi anirà relacionat amb els “objectes” que s’han posat a la pantalla, als quals anomena “components” (botons, sons, imatges, temporitzadors…).

La pantalla principal és aquesta:

captura-retallada2L’usuari es pot moure pel teclat (ja que inicialment es mostren 17 tecles i en té 61 en total) i activar altres funcions amb els botons superiors. El teclat en si és una àrea (component anomenat canvas) que permet englobar diverses imatges (components anomenats ImageSprite). Cada tecla és un ImageSprite. Aquests se situen al canvas segons unes coordenades (X, Y) i unes dimensions (amplada, alçada) que es poden canviar durant l’execució de l’aplicació segons unes directrius definides pel programador (canviaran quan l’usuari es mogui pel teclat).

De la mateixa manera cada so (un per cada nota) és un component de tipus sound que conté l’àudio del que ha de sonar quan tal nota sigui tocada.

Per tal d’organitzar les tecles i els sons vaig crear diverses llistes de components (tecles blanques, tecles negres, totes les tecles, sons de tecles blanques, sons de tecles negres, sons de tecles blanques, tots els sons). També variables numèriques que indiquen les tecles que es mostren. El valor d’aquestes variables canviarà quan l’usuari es mogui pel teclat.

A partir d’aquí vaig desenvolupar les fórmules matemàtiques que permeten situar cada tecla (definir-ne les coordenades) en funció del seu número de llista i les variables esmentades. També les fórmules amb què es determina la nota que s’ha tocat (el seu número de llista, que és el mateix el de la llista de tecles que el de la llista de sons) en funció de les coordenades del punt del canvas on ha tocat el dit.

opcions-acords-2-retalladaUna aplicació feta amb l’App Inventor no detecta dos punts diferents de la pantalla tocats alhora, només un. Per això no podem tocar més d’una tecla alhora lliurement. Per compensar-ho vaig incorporar la funció d’acords. Si està activada, quan l’usuari toqui una nota no només sonarà aquella nota sinó també tot l’acord del qual és tònica (conjunt de notes regits per les regles de l’harmonia). L’usuari configura el tipus d’acords a la paleta d’opcions [imatge]. Gràcies a les llistes i les dades de l’acord configurat i el sistema logicomatemàtic que he programat basant-me en els principis de l’harmonia, el processador sap quines notes s’han de tocar.

captur-retallada-3La segona pantalla de l’aplicació inclou la funció de cançons. Consisteix que l’usuari ha d’anar tocant les notes de la cançó, indicades pels cercles liles [imatge]. Cadascun d’ells està a la mateixa recta vertical imaginària que la tecla que representa. Van baixant tots a la mateixa velocitat (mentre el tempo no varia). La tecla ha de ser tocada just abans que la bola arribi a baix de l’àrea blanca. Si no és així, la cançó s’atura. Continua quan l’usuari toca la tecla.

La cançó és un àudio que l’aplicació descarrega d’Internet al moment d’iniciar la pantalla. Per això és essencial la connexió a la xarxa. El processador ha d’aturar-lo i reprendre’l quan sigui convenient. Hi ha un temporitzador que salta cada X temps, que anomenarem interval. Aquest temps és la diferència mínima entre dues notes consecutives de la cançó. Quan el temporitzador salta, surt el cercle que representa la nota que l’usuari haurà de tocar al cap d’uns quants intervals, si és que n’ha de tocar alguna. El processador sap d’on ha de sortir la bola (quina nota representa) i si n’ha de sortir alguna gràcies a les variables numèriques que indiquen en quin moment de la cançó estem (compàs, pulsació i part) i un sistema de condicionals que en funció d’aquestes variables indicaran una nota o una altra. És com una representació informàtica de la partitura. Quan la bola arribi a baix, al cap d’un nombre determinat d’intervals, el temporitzador haurà tornat a saltar i si l’usuari no ha tocat la nota (se sap gràcies a l’estat d’una variable que s’hauria modificat si l’usuari hagués tocat la nota) la cançó s’atura.

Requereix molta precisió fer quadrar el temporitzador amb el tempo de la cançó. Moltes vegades el temporitzador s’endarrereix perquè el processador no és immediat. Això origina que la nota no requereixi ser tocada després que hagi sonat. I aquest endarreriment es multiplica a mesura que va avançant la cançó. Per a corregir-ho vaig restar a l’interval el desfasament que hi havia. Aquest error era diferent per a cada moment de la cançó i possiblement diferent per cada mòbil.

Conclusions:

Un cop realitzada l’aplicació podem dir que en general he aconseguit els objectius.

El teclat funciona bé (el normal i la funció d’acords), malgrat que a vegades el processador falla en reproduir els sons de les notes. Els sons són àudios mp3 que suposen un esforç per la màquina. Com més ràpid es va prement les tecles, menys en sonen. Com més operacions ha fet l’aplicació (per exemple, descarregar-se els àudios de les cançons d’Internet), menys possibilitats hi ha que sonin perquè se sobrecarrega. El bon funcionament de la reproducció de les notes rau en deixar temps al processador.

He hagut d’adaptar els meus objectius a les possibilitats del programa. L’exemple més clar és la creació de la funció d’acords. En interpretar una peça en piano, el més comú és que el pianista toqui diverses notes a la vegada. Això no és possible en una aplicació creada amb App Inventor perquè no es poden tocar dos punts de la pantalla alhora. Però sí que és possible que sonin diverses notes alhora (un acord de les característiques que ha determinat l’usuari) tocant només un punt de la pantalla gràcies a la funció d’acords.

La funció de cançons és la que m’ha portat més problemes a causa de la imprecisió dels temporitzadors de l’App Inventor. I això és molt important en aquesta aplicació. He arribat a la conclusió que una funció com aquesta que funcioni a la perfecció no entra dins de les possibilitats de l’App Inventor.

Programant l’aplicació he pogut plasmar l’estreta relació que tenen les matemàtiques i la música, creant una estructura lògica-matemàtica que regeix tots els elements musicals de l’aplicació. També m’he adonat que la programació és un procés teòricament exacte (el que programem està pensat perquè es compleixi). Però l’execució està plena d’imperfeccions: pot ser que ordres que donem al processador (p. ex. reproduir un so) no es compleixin o que ho facin inexactament (p. ex. imprecisió temporal).

He comprovat com darrere de cada programa, aplicació, sistema operatiu… hi ha molta feina en la programació. I a cada pas cal comprovar detingudament el funcionament per detectar els errors i corregir-los fins que arribi a funcionar correctament.

Obriu aquest enllaç des del mòbil per descarregar-vos l’aplicació. 

O bé seleccioneu des del mòbil aquest codi QR:

qr-drive-apk

Bibliografia