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.
Langages du dépôtJava 47.34%6
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| Java | 33 471 | |
| TypeScript | 22 838 | |
| Python | 11 324 | |
| Dockerfile | 2 222 | |
| HTML | 710 | |
| Shell | 138 |
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.
git clone https://github.com/PrimePhil/PFE008 cd maestro-app npm install npm run startgradle testCommandes déclarées dans les manifestes
maestro-app/package.json
startreact-scripts startbuildreact-scripts buildtestreact-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
Getting Started
README.md
Prerequisites
backend/README.md
- Java Installation:
- Ensure you have Java installed. The version used for this project is:
- 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.
- 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.
- 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:
API et intégration
Endpoint Overview
backend/README.md
Exploitation et dépannage
Deployment
README.md
Développement et contributions
Tests
README.md
`npm test`
maestro-app/README.md
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.
- Envoi React
- Validation Spring
- Reconnaissance Audiveris
- Conversion MusicXML
- 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.

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
AudiverisController(class) ·backend/src/main/java/PFE008/backend/AudiverisController.java:9Méthodes dans l’aperçu :
AudiverisController, convert, convertMxlToMidi.ConvertController(class) ·backend/src/main/java/PFE008/backend/ConvertController.java:37Méthodes dans l’aperçu :
convert, healthCheck.BackendApplication(class) ·backend/src/main/java/PFE008/backend/BackendApplication.java:10Méthodes dans l’aperçu :
main.ConversionResponse(class) ·backend/src/main/java/PFE008/backend/ConversionResponse.java:12Méthodes dans l’aperçu :
getFileName, setFileName, getDownloadUri, setDownloadUri.FileUtil(class) ·backend/src/main/java/PFE008/backend/FileUtil.java:25Méthodes dans l’aperçu :
saveFile, getFileAsResource, isValidFile, cleanupDirectories.AudiverisController_tests(class) ·backend/src/test/java/PFE008/backend/AudiverisController_tests.java:32Méthodes dans l’aperçu :
setup, testConvertSuccess, testConvertWrongFile, testConvertFileOutput.ConvertControllerTest(class) ·backend/src/test/java/PFE008/backend/ConvertControllerTest.java:34Méthodes dans l’aperçu :
setup, testConvertSuccess, testConvertFail, testConvertFileNotFound.FileUtil_tests(class) ·backend/src/test/java/PFE008/backend/FileUtil_tests.java:23Méthodes dans l’aperçu :
setup, testSaveFile, testGetFileAsResource, testSaveFileThrowsIOException.TestMxlToMidi(class) ·backend/src/test/java/PFE008/backend/MxlToMidi_tests.py:16Méthodes dans l’aperçu :
setUp, test_apply_dynamics_to_notes, test_print_note_details, test_print_part_details.Bases déclarées :
unittest.TestCase.MusicSheetUploaderProps(interface) ·maestro-app/src/components/musicSheetUploader/MusicSheetUploader.tsx:13UseMaestroClientResult(interface) ·maestro-app/src/hooks/useMaestroClient.ts:3MusicSheetUploadFormFooterProps(interface) ·maestro-app/src/pages/MusicSheetUploadForm/MusicSheetUploadFormFooter.tsx:6
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