Soprano es un lenguaje de programación orientado a la composición algorítmica. ¡Puedes componer música mediante algoritmos!
Usa estructuras definidas y una sintaxis específica. Su sintaxis está basada en la sintaxis musical y en otros lenguajes de programación como C y Python.
🌐¿Te gustaría ver a Soprano en la web? Apoya el proyecto⭐
En linux
- Copia el repositorio en tu máquina y ve a la raíz del directorio.
- Pega el comando:
./run_flask.sh
run_flask.sh navega al directorio de la app de flask, activa el entorno virtual de python, instala las dependencias necesarias y ejecuta un servidor de Flask en modo depuración en la url: http://127.0.0.1:5000.
El intérprete Soprano traduce un programa escrito en Soprano en esta secuencia: Soprano -> Python -> mp3.
Soprano genera 1 archivo pdf con las partituras y 3 archivos con la melodía en distintos formatos: wav, midi y mp3.
La gramática de Soprano está descrita con ANTLR, puedes encontrarla en el archivo Soprano-web/SopranoApp/SopranoGrammar/soprano.g.
Soprano permite escribir programas sencillos de forma similar a los lenguajes de programación habituales como C, Python o Java.
Compilar gramática
antlr4 -Dlanguage=Python3 -no-listener -visitor soprano.g
Este comando no es necesario para correr el programa y no necesitas usarlo a menos que cambies tu gramática desde el archivo soprano.g. Este comando altera la mayoría de los archivos de la carpeta SopranoGrammar, como el analizador léxico (sopranoLexer.py), el analizador sintáctico (sopranoParser.py) y otros archivos que describen la gramática de Soprano, como el archivo de tokens (soprano.tokens).
- Su función principal es tomar composiciones algorítmicas escritas en lenguaje Soprano y convertirlas en partituras digitales acompañadas de los archivos de sonido correspondientes a la melodía creada por el compositor.
- El intérprete implementa Visitors, que son funciones escritas en Python que representan a un token o a una regla gramatical y tiene toda la lógica a ejecutar al pasar por ese token o regla.
- Aquí se manejan los errores y se lanzan exepciones para comprobar la sintáxis y la semántica.
El intérprete detecta los errores sintácticos y semánticos comúnes al escribir código, como:
- Mala sintaxis en palabras reservadas.
- Variables o funciones sin declarar.
- Llaves o paréntesis sin cerrar.
- Número de parámetros incorrectos en los procedimientos.
- LilyPond: Para generar las partituras. MIDI y PDF.
- timidity++: Para generar WAV a partir de MIDI.
- ffmpeg: Para generar MP3 a partir de WAV.
- Zaira Zuviría; por impartir el curso de compiladores I y por haber ayudado con la redacción de un resumen para la participación en la Primera Jornada de Investigación 2024.
- Lucas Bazilio; por haber implementado una sintaxis completa, ayudando a cumplir los requerimientos y superando las expectativas de Soprano.