Mon sheet c'est moi

Tags :
  • POK
  • 2022-2023
  • temps 1
  • web
Auteurs :
  • Léonard Barbotteau
  • Nathan Gissler

Mon sheet c'est moi (POK-Temps 1)

1. Idée initiale

Notre idée initiale est de créer un site web qui permettrait d'écrire de la musique sur une partition intéractive, et de collaborer à plusieurs sur une même partition. L'utilisateur pourrait créer sa partition, la modifier, et la partager à d'autres utilisateurs qui pourraient la modifier à leur tour (en temps réel ou non, cela dépend de la difficulté de l'implémentation et du temps que nous aurons pour le faire).

2. Première version de partition interactive

Nous avons utilisé un canvas HTML pour créer une première version de la partition, qui est composée pour le moment d'une portée de 5 lignes et d'une clé de sol.

Première version de la partition

Il est possible d'ajouter des notes en cliquant sur la portée, grâce à un EventListener lié au canvas qui détecte les clics. Les notes ont pour le moment toutes la même durée (ce sont des rondes) mais peuvent être placées à différentes hauteurs. Elles se placent les unes à la suite des autres et ne peuvent pas encore être supprimées.

3. To-do list pour la suite

4. Avancées de la partition

Ajouts à la partition

Nous avons ajouté de nouveaux symboles à la partition, et il est désormais possible de changer de mode d'édition avec les touches a (add note) et d (delete note). En mode suppression, il suffit de cliquer sur une note pour la supprimer et les notes restantes se repositionnent correctement.

Partition deuxième version

Il reste à modifier la manière de saisir les notes pour que celles-ci puissent se placer à la place des symboles de silence et non pas en fin de partition.

Modification de la saisie des notes

Les notes peuvent désormais être placées uniquement à la place des silences ou à la place d'autres notes. On ne peut plus supprimer que les notes et elles sont alors remplacées par des silences.

Les symboles de la portée peuvent être enregistrés et chargés à partir d'un format JSON grâce à des méthodes implémentées dans l'objet Staff (la portée).

Dernière version de la partition :

Partition dernière version

Difficultés rencontrées

Nous pensions afficher une note grisée au survol de la partition pour indiquer la possibilité de placer une note à cet endroit. Cependant le fait de faire suivre la trajectoire de la souris à la note grisée implique d'effacer et de redessiner le canvas à chaque mouvement de la souris et cela crée un lag trop important.

Il sera peut-être possible par la suite de réduire le nombre d'actualisations du canvas en limitant les positions possibles de la note grisée à des emplacements précis mais nous avons laissé cet fonctionnalité de côté pour le moment.

Lorsque que je créais une image pour l'insérer dans la partition (pour les symboles comme les notes, silences, etc.) je demandais les dimensions de l'image afin de la redimensionner tout en gardant le bon ratio. Mais les valeurs retournées étaient toujours 0. J'ai fini par comprendre en cherchant sur Internet que cela pouvait être parce que l'image n'a pas eu le temps de charger. J'ai trouvé des codes permettant d'y remédier mais ils étaient lourds et difficiles à comprendre. J'ai donc décidé pour le moment de simplement noter les ratios de toutes les images dans un dictionnaire dans le fichier JavaScript bien que ce ne soit pas la meilleure solution.

Le terme class prête à confusion car il est utilisé à la fois pour les classes des objets HTML, qui sont des sortes de catégories, et pour les classes JavaScript, en terme de Programmation Orientée Objet. Lorsque j'ai voulu tester l'appartenance d'un objet à une classe JavaScript, j'ai d'abord trouvé la syntaxe element.classList.contains(nom_de_la_class), avant de me rendre compte que cela ne fonctionnait pas. En effet le terme class ici n'a rien à voir et je devais plutôt utiliser object instanceof constructor dans ce cas.

Pistes d'améliorations possibles

5. La gestion du stockage des données

Les données importantes à conserver

Il y a deux types de données que nous voulons pouvoir conserver.

En premier lieu, les informations sur l'utilisateur :

En deuxième lieu, les informations sur les partitions :

L'objectif est pouvoir réutiliser ces données lorsque l'on parcourt le site

Difficultés rencontrées

A une page web est associé une base de données nommée LocalStorage qui résiste au rafraichissement de la page, et même à une fermeture du navigateur. Il peut contenir jusqu'à 5Mb, et est adapté à notre situation car facile à traiter en JavaScript.

Le problème est que cette base de données ne traverse pas les pages. Quand on change de page HTML, on perd ces données.

Lorsque le serveur sera en ligne, nous pourrons utiliser les requêtes API pour récupérer les données nécessaires.

En attendant de pouvoir faire des requêtes API sur un serveur, on va mettre les pages en ordre et faire initialiser le LocalStorage à chaque nouvelle page par le LocalStorage de la page précédente pour tester les fonctionnalités. On va considérer donc tout le temps les mêmes conditions.

6. Présentation du site et parcours des données

Tout d'abord, la première page est le login : ici, on va récupérer l'identifiant de l'utilisateur et son mot de passe, et vérifier qu'il correspond à la base de données.

Page de login

Si les identifiants ne sont pas corrects, un message d'alerte s'affiche. S'ils sont corrects, on passe à la page suivante en conservant le nom de l'utilisateur et son Id. Cet Id nous permettra de savoir à quelles partitions l'utilisateur à accès.

Ensuite on arrive sur la page d'accueil du site Page d'accueil première version On peut ici choisir si l'on veut créer une nouvelle partition ou accéder aux anciennes.

Dans le deuxième cas, on est dirigé vers les partitions sauvegardées et qui sont accessibles à l'utilisateur connecté. Les partitions contiennent dans la sauvegarde l'Id des personnes qui y ont accès, et en particulier l'auteur. On peut aussi dans cette page chosir de finalement créer une nouvelle partition.

Partitions sauvegardées

Si l'utilisateur a choisi sur la page précédente ou sur celle-ci, il se retrouve face à une partition vierge. Sinon il arrive directement sur la partition sauvegardée au préalable.

Partition dernière version

Améliorations possibles

La plupart des améliorations concernant les données seront applicables lorsque l'on mettra le site sur un serveur, dans le second temps.