Aller au contenu

Maestro : Une partition dans un pipeline de conversion

Ce fork Maestro relie une interface d’envoi React à un backend Spring et des outils de conversion musicale. Passer d’une image de partition au MIDI demande une reconnaissance optique et une représentation intermédiaire.

Application et services Fork
  • Mis à jour
  • Java · 47.34%
  • AGPL-3.0
Crédit amont
Langages du dépôtJava 47.34%6

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
Java47.34%33 471
TypeScript32.3%22 838
Python16.02%11 324
Dockerfile3.14%2 222
HTML1%710
Shell0.2%138

GitHub · README · Statistiques de langages

Aperçu

Pourquoi il existe

Pipeline de reconnaissance optique de partitions musicales (OMR) convertissant des images en fichiers MIDI.

Cas d’usage

Numérisation de partitions musicales physiques pour écoute et arrangement.

Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

README.md · Getting Started
  git clone https://github.com/PrimePhil/PFE008
README.md · Frontend
  cd maestro-app
README.md · Frontend
  npm install
README.md · Frontend
  npm run start
README.md · Tests
gradle test
Commandes déclarées dans les manifestes

maestro-app/package.json

start
react-scripts start
build
react-scripts build
test
react-scripts test

Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

Requirements

README.md

  • Audiveris
  • Java 22.0.2
  • Python 3.12
  • npm 8.19.4
  • Nodejs 18.13.0
Lire les instructions complètes ↗

Getting Started

README.md

Start by cloning the project
Lire les instructions complètes ↗

Prerequisites

backend/README.md

  1. Java Installation:
  • Ensure you have Java installed. The version used for this project is:
  1. Gradle:
  • The project includes a Gradle wrapper, so you don’t need to install Gradle manually. If needed, you can download Gradle here. The project uses Gradle v8.8.
  1. OCR Language Data:
  • Audiveris relies on Tesseract for Optical Character Recognition (OCR). You’ll need to install language data files. Refer to the Audiveris guide for setup instructions.
  1. Audiveris Setup:
  • The Audiveris distribution is not included in the repository. You need to download it manually and place it in the backend/audiveris/dist directory.
  • Download the Audiveris distribution (Windows installer) from here.
  • After installation, copy the bin and lib directories from the Audiveris installation directory to backend/audiveris/dist/. Your project structure should look like this:
Lire les instructions complètes ↗
API et intégration

Endpoint Overview

backend/README.md

There is currently one main route in the API:
Lire les instructions complètes ↗
Exploitation et dépannage

Deployment

README.md

To run locally a docker-compose To build docker’s image move to the root (where the Dockerfile is) and use : When you have a docker’s image, you can run it with the command : Note : To deploy the application, you must install Docker before hand. you can also used an image already build on the offical Docker repo with the command : if you want to update this image, you can use the commands : Note : You need to be a member of the organization to push a new images.
Lire les instructions complètes ↗
Développement et contributions

Tests

README.md

To run the tests suites go into the backend repository and run the command It is important to note that the python’s tests will be executed with the gradle command
Lire les instructions complètes ↗

`npm test`

maestro-app/README.md

Launches the test runner in the interactive watch mode.
Lire les instructions complètes ↗
Documentation source

3 documents lus parmi 3 candidats.

Fonctions et composants 2

Frontière d’envoi
ConvertController accepte des fichiers multipart sur /convert. Il rejette les fichiers vides, contrôle la limite de 10 Mio et vérifie la signature avant sauvegarde. Un tempo optionnel accompagne la demande.
Processus externes
AudiverisController construit une commande selon le système et attend le processus Audiveris. Le backend comprend aussi MxlToMidi.py. Le démarrage, les fichiers intermédiaires et le téléchargement peuvent échouer séparément.

Architecture

Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.

Contexte système Contexte
  1. Envoi React
  2. Validation Spring
  3. Reconnaissance Audiveris
  4. Conversion MusicXML
  5. Téléchargement MIDI

Liens vérifiés dans le dépôt.

Mermaid Diagramme interactif (chargement à l’ouverture)

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de Maestro
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  n0["Envoi React"]
  n1["Validation Spring"]
  n2["Reconnaissance Audiveris"]
  n3["Conversion MusicXML"]
  n4["Téléchargement MIDI"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n3 --> n4
Version texte du diagramme
  • Envoi React → Validation Spring
  • Validation Spring → Reconnaissance Audiveris
  • Reconnaissance Audiveris → Conversion MusicXML
  • Conversion MusicXML → Téléchargement MIDI
Suivre un parcours dans le code

Suivez /convert dans ses validations, puis le choix de l’exécutable et du dossier de sortie. Un envoi HTTP réussi ne suffit pas: la conversion dépend aussi de l’outil externe et de ses fichiers.

Types et structure des fichiers

12 types déclarés, dont 12 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class t0fc2da07ca26["AudiverisController"] {
  AudiverisController()
  convert()
  convertMxlToMidi()
}
class te09535b4ea27["ConvertController"] {
  convert()
  healthCheck()
}
class t5b329a34a4e0["BackendApplication"] {
  main()
}
class t5026bc97d4a6["ConversionResponse"] {
  getFileName()
  setFileName()
  getDownloadUri()
  setDownloadUri()
}
class ta28a28fad99c["FileUtil"] {
  saveFile()
  getFileAsResource()
  isValidFile()
  cleanupDirectories()
}
class t3a8c9a5b3e47["AudiverisController_tests"] {
  setup()
  testConvertSuccess()
  testConvertWrongFile()
  testConvertFileOutput()
}
class tc9ddabb9fef2["ConvertControllerTest"] {
  setup()
  testConvertSuccess()
  testConvertFail()
  testConvertFileNotFound()
}
class tf78cdd633a9f["FileUtil_tests"] {
  setup()
  testSaveFile()
  testGetFileAsResource()
  testSaveFileThrowsIOException()
}
class t306c8eab2abe["TestMxlToMidi"] {
  setUp()
  test_apply_dynamics_to_notes()
  test_print_note_details()
  test_print_part_details()
}
class t5c7dff211126["MusicSheetUploaderProps"] {
  <<interface>>
}
class t28f92fc28615["UseMaestroClientResult"] {
  <<interface>>
}
class td89584c9e8be["MusicSheetUploadFormFooterProps"] {
  <<interface>>
}
class b385cfa4f4c5b["unittest.TestCase"] {
  <<unresolved_base>>
}
b385cfa4f4c5b <|-- t306c8eab2abe

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

Index des types

Référence

32 / 32 fichiers admissibles lus (128 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

Carte des fichiers
flowchart TD
  root["Maestro"]
  f0["maestro-app/package.json"]
  root --> f0
  f1["backend/src/main/MxlToMidi.py"]
  root --> f1
  f2["backend/src/main/java/PFE008/backend/AudiverisController.java"]
  root --> f2
  f3["backend/src/main/java/PFE008/backend/ConvertController.java"]
  root --> f3
  f4["README.md"]
  root --> f4
  f5["docker-compose.yml"]
  root --> f5
  f6["entrypoint.sh"]
  root --> f6
  f7["backend/README.md"]
  root --> f7
  f8["maestro-app/README.md"]
  root --> f8
  f9["maestro-app/src/App.test.tsx"]
  root --> f9
  f10["maestro-app/src/App.tsx"]
  root --> f10
  f11["maestro-app/src/index.tsx"]
  root --> f11
  f12["maestro-app/src/setupTests.ts"]
  root --> f12
  f13["maestro-app/src/hooks/useMaestroClient.ts"]
  root --> f13
  f14["maestro-app/src/i18n/i18n.tsx"]
  root --> f14
  f15["maestro-app/src/mocks/convertToMidiMock.tsx"]
  root --> f15

Fichiers à lire 4

Références