La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Editing digitale della partitura Creazione di plugin

Presentazioni simili


Presentazione sul tema: "Editing digitale della partitura Creazione di plugin"— Transcript della presentazione:

1 Editing digitale della partitura Creazione di plugin
Lezione 6 Editing digitale della partitura Creazione di plugin Laboratorio di Informatica Musicale – Prof. Luca A. Ludovico

2 Riassunto Nella lezione precedente si è visto:
la sintassi di base per creare un plugin la rappresentazione gerarchica di una partitura in MuseScore il concetto di cursore l’estrapolazione di informazione catalografica (metadati) e simbolica da una partitura esistente Durante questa lezione si vedrà: come organizzare il codice in funzioni come gestire la selezione come creare una partitura ex novo come aggiungere metadati e simboli musicali a partiture già esistenti Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

3 Uso di funzioni Per organizzare in maniera più efficace il codice, è possibile utilizzare le funzioni. Le funzioni rendono il codice più leggibile, e permettono il riuso del codice quando la stessa sequenza di operazioni deve essere eseguita più volte, anche su valori differenti (parametri della funzione). In Javascript, le funzioni hanno la seguente sintassi: function nome_funzione (val1, val2, …, valn) { // fai qualcosa return value } Il passaggio di parametri è opzionale, e i parametri non sono tipizzati. Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

4 Uso di funzioni La restituzione di un valore è opzionale: è possibile chiudere una funzione con un’istruzione return senza valore, o giungere alla sua naturale conclusione (chiusura della parentesi graffa). Non è possibile restituire più di un valore. Per non smarrire il valore restituito, deve aver luogo un assegnamento all’istante di chiamata della funzione. Ad esempio, se ci si aspetta che una funzione restituisca un valore: var valoreRestituito = miaFunzione(valoreDaPassare) Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

5 Esempio Esempio: LeggiNomeParti.qml
In questo esempio, viene mostrato un esempio di funzione con e senza restituzione di valori. Inoltre, si mostra come recuperare altre informazioni di partitura, in particolare il nome esteso e abbreviato delle parti, con un opportuno ciclo sulla struttura dati curScore.parts. Altro esempio: TrascriviSimboli2.qml (scorsa lezione) Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

6 Come ciclare su parti e voci
All’interno di una partitura, un’accollatura si compone di più pentagrammi, ciascuno dei quali può contenere al massimo 4 voci. Un cursore di default si posiziona sulla prima voce (indice 0) del primo pentagramma (indice 0), ma può essere chiaramente riposizionato. Per considerare tutte le voci di tutti i pentagrammi, si possono sfruttare le seguenti proprietà dell’oggetto Score: nstaves – numero di pentagrammi. E’ poi necessario ciclare sulle singole voci di ciascun pentagramma, quindi introdurre nel codice un doppio ciclo; ntracks – numero di tracce, ossia nstaves · 4 (numero di voci per pentagramma). Così è sufficiente un ciclo. Un cursore ha infatti 3 valori interi configurabili: track, staffIdx (che corrisponde alla divisione intera track / 4) e voice (che corrisponde al resto della divisione intera track % 4). Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

7 Creazione di accordi, note e pause
Esistono diversi approcci per aggiungere/sostituire note. E’ possibile appoggiarsi alla posizione corrente del cursore e sovrascrivere (vedi prossima slide): cursor.setDuration(1,4) cursor.addNote(60) Oppure è possibile creare un elemento nota ex-novo, impostarne le proprietà e aggiungerlo a un elemento accordo già esistente (vedi più avanti): var miaNota = newElement(Element.NOTE) // imposta proprietà della nota Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

8 Inserimento/sostituzione di note
Nel file di esempio AggiungiNote.qml si mostra come inserire (o sovrascrivere) 5 note all’inizio di una partitura, nel primo pentagramma e nella prima voce. Nel file di esempio AggiungiQuarto.qml si mostra una variante di questo approccio: come inserire (o sovrascrivere) una nota da un quarto come terzo simbolo nella prima voce del primo pentagramma, muovendosi in termini di step del cursore. Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

9 Modifica di accordi già presenti
Per modificare notazione già presente, come di consueto si utilizza un cursore per spostarsi di simbolo in simbolo. Se si aggiunge una nota all’accordo puntato dal cursore, la nota assumerà la durata dell’accordo. var accordo = cursor.element var n1 = newElement(Element.NOTE) n1.pitch = 60 // C4 pitch n1.tpc1 = 14 // C tonal pitch class (non transposed) n1.tpc2 = 14 // C tonal pitch class (transposed) accordo.add(n1) Esempi: RaddoppiaOttava.qml aggiunge una nota all’ottava sopra, mentre ImpostaPitch.qml elimina tutte le note di ogni accordo e le sostituisce con altre. Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

10 Creazione di elementi Più in generale, la sintassi var nome_elemento = newElement(nome_classe) può essere applicata alla creazione di un gran numero di elementi, che poi possono essere aggiunti alla struttura dati opportuna. Ad esempio, è possibile creare una pausa (cioè un’istanza di classe Rest) con la seguente sintassi: var miaPausa = newElement(Element.REST) Ad esempio, è possibile creare un simbolo di tremolo: var newTremolo = newElement(Element.TREMOLO) come mostrato in AggiungiSimboliAccordo.qml. Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

11 Gestione della selezione corrente
Spesso il funzionamento di un plugin deve essere limitato all’area selezionata dall’utente. Per determinare se esiste un’area selezionata: Si riavvolge il cursore all’inizio della selezione tramite var cursor = curScore.newCursor() cursor.rewind(1) Se non esiste un cursor.segment (ossia un segmento corrente), allora si può scegliere di operare sull’intera partitura, cioè dal pentagramma 0 a curScore.nstaves – 1 Altrimenti si legge il pentagramma corrente, poi si riavvolge il cursore alla fine dell’area selezionata tramite cursor.rewind(2) e si legge il pentagramma corrente. Si salva inoltre il valore del tick finale, cioè quello fino a cui operare. Esempio: GestisciSelezione.qml Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

12 Parte 2 ESERCITAZIONE Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

13 Esercizi Si scriva un plugin che conta il numero di pause nella prima voce del primo pentagramma la cui durata è superiore o uguale a 1/8. Per la verifica sui valori ritmici, si utilizzi l’attributo duration di element, che è una frazione composta dai valori interi duration.numerator e duration.denominator. Si scriva un plugin che conta il numero di accordi presenti nella sola voce 2 che contengano una nota il cui pitch sia 60. Per preparare un esempio efficace di partitura per i test, si rammenti che 60 corrisponde al Do centrale. Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin

14 Esempi di domande d’esame
Si calculi il numero di pause contenute nell’intera partitura, scorrendo tutte le voci di ogni pentagramma Si calcoli sull’intera partitura il numero di note scritte come Do naturale (tpc1 = 14) di durata pari a un quarto Si calcoli sull’intera partitura il numero di accordi costituiti da almeno 3 note. Si scriva un plugin per contare il numero di simboli musicali (accordi e pause) all’interno di una selezione Si raddoppi all’ottava inferiore tutte le note il cui pitch è maggiore o uguale a 72. Editing digitale della partitura - Prof. Luca A. Ludovico 6. Creazione di plugin


Scaricare ppt "Editing digitale della partitura Creazione di plugin"

Presentazioni simili


Annunci Google