Loading s4prg_rust_07_score...

enib_small.png S4-PRG_Rust 07_Score — Les partitions de musique

Le module note doit être complété par le type Score qui servira à décrire une partition musicale.
Il ne s'agit que d'un simple vector rassemblant l'ensemble des parties musicales qui constituent un morceau.
Chaque partie musicale est une structure ScorePart décrite par :
À titre d'illustration, le fichier Child_In_Time.json décrit quelques parties musicales formant la partition d'un morceau de musique.
Vous devez vous en inspirer, notamment pour choisir les membres, qui pourront tous être publics.

Réalisez, dans ce même module dédié aux notes de musique, une fonction load_score() capable de lire un fichier tel que Child_In_Time.json et de créer l'ensemble des parties musicales qu'il décrit.
Une utilisation minimale de cette fonction serait :
let my_score = load_score("Child_In_Time.json")?;

Il n'est pas question d'essayer d'analyser par nos propres moyens les éléments d'un tel fichier ; il s'agit au contraire de s'appuyer sur les fonctionnalités de sérialisation au format json communément utilisées.
Au delà des parties musicales elles-mêmes, les notes de musique devront être complétées pour supporter les fonctionnalités de désérialisation. Remarquez que les opérations de lecture d'un fichier et de désérialisation peuvent échouer ; la fonction doit envisager cet échec dans son type de retour.

En l'état, vous devriez être en mesure de tester le chargement d'une partition (l'ensemble des parties) depuis un fichier.
Cela rend enfin possible la génération d'un fichier sonore jouant le morceau ainsi décrit.
Il suffit de réutiliser nos diverses fonctionnalités précédentes de la façon suivante :
Le fichier Isnt_she_lovely.json décrit une autre partition qui utilise l'instrument nommé “drum” ; si vous n'avez pas pris en compte les formes d'ondes qui rendent cet instrument disponible, vous n'aurez qu'à ignorer cet instrument.

Les différents étapes des tests réalisés constitueront à nouveau, selon leur complexité, des tests unitaires pour compléter la documentation ou bien des tests d'intégration.