Durante un processo di produzione musicale, lavorando su materiale MIDI, non capita raramente il dover selezionare valori che soddisfano determinate caratteristiche all’interno del materiale registrato su una parte MIDI. Questa operazione altro non è che un processo di matematica degli insiemi per cui a volte occorre ragionare da matematici per ottenere velocemente i risultati attesi. Non scriverò qui un trattato di matematica però chi volesse approfondire l’argomento può cliccare al seguente LINK. Consideriamo la seguente parte MIDI all’interno del sequencer Cubase che è preso qui come esempio offrendo un ottimo editor MIDI di tipo logico. La parte si compone di due misure.
Al suo interno sono presenti i seguenti eventi MIDI disposti su una griglia che considera gli ottavi e la metrica 4/4.
L’intera parte corrisponde ad un Insieme matematico contenente 15 oggetti costituenti note MIDI (messaggi di nota on e nota off). All’interno di questo insieme possiamo definire numerosi sottoinsieme. Facciamo qualche esempio:
- tutte le note di valore 1/8 (8 in totale)
- tutte le note di valore 1/4 (4 in totale)
- tutte le note di valore 1/2 (2 in totale)
- tutte le note di valore 1/1 (1 in totale)
- tutte le note di altezza Eb (6 in totale)
- tutte le note nella misura 1 (10 in totale), e così via.
Tutti questi sono sottoinsiemi contenuti nell’insieme principale costituito dalla parte stessa. Per selezionare gli elementi di un sottoinsieme è molto utile (e veloce) far riferimento ad un editor di tipo logico o di tipo filtro. E’ pur sempre vero che, nel caso di parti piccole come quella mostrata in figura, può essere più veloce la selezione manuale ma se le parti sono estese a un gran numero di misure la selezione manuale può diventare lunga e complicata. L’editor di tipo logico di Cubase, presente fin dalle versioni per Atari, è impostato su due riquadri di cui il primo (quello più in alto) definisce l’individuazione di uno o più sottoinsieme mentre il secondo (in basso) definisce le azioni da compiere sugli elementi dei sottoinsiemi definiti.
Se ad esempio occorre selezionare il sottoinsieme costituito dalle note che hanno valore di 1/8, aggiungendo una riga di comando sul riquadro superiore (cliccando sul pulsante con il simbolo del + in basso a sinistra del riquadro) interveniamo nella colonna File Target per decidere su quale caratteristica impostare la selezione degli elementi. Nel nostro caso, dato che dobbiamo selezionare le note di valore pari all’ottavo (crome), occorre selezionare lenght (lunghezza).
Nella colonna Condition si sceglie qual’è la condizione da utilizzare: poichè si deve selezionare note dello stesso valore (crome) si seleziona equal.
Nella colonna Parameter 1 occorre definire quale sia il valore musicale. Poichè sono presenti 4 cifre espresse con 0.00.00.000 ricordo che Cubase le interpreta nel seguente modo: misura.unità di misura.sedicesimi.ticks. Pertanto, poichè un ottavo corrisponde a due sedicesimi, il valore da inserire sarà il seguente: 0.00.02.000
Abbiamo così evidenziato le condizioni per individuare il sottoinsieme costituito da tutte le note di valore pari alle crome (1/8) presenti nella parte.
A questo punto occorre definire nel riquadro inferiore quale tipo di azione compiere sugli elementi del sottoinsieme definito. Se ad esempio volessimo solamente selezionare questi elementi allora basterà scegliere Select dal menu Funcion presente in basso.
Cliccando sul pulsante Apply (sulla destra) nella parte musicale risulteranno selezionate tutte le note del valore di croma ovvero appartenenti al sottoinsieme che avevamo definito nell’editor.
Ovviamente si possono anche compiere le classiche operazioni di Unione e di Intersezione tra due insiemi. Ad esempio, l’insieme Unione di due insiemi (o sottoinsiemi) A e B è quell’insieme che contiene sia gli elementi di A che quelli di B mentre l’insieme Intersezione di due insiemi (o sottoinsiemi) A e B è quell’insieme che contiene solamente gli elementi comuni ai due insiemi A e B. Come faccio a compiere queste due operazioni nel logical editor? Devo comunque definire gli insiemi A e gli insiemi B ed utilizzare l’operatore booleano or nel caso volessi fare l’operazione di unione, l’operatore booleano and nel caso dell’intersezione. Anche in questo caso, chi volesse approfondire l’algebra booleana può cliccare il seguente LINK.
Facciamo un esempio pratico. Se volessi selezionare le note di valore 1/8 (insieme A) e quelle di valore 1/4 (insieme B) devo definire i due insieme e legarli tra loro dall’operatore or dato che stiamo per effettuare un’operazione di unione. Precedentemente abbiamo già identificato l’insieme A per cui ora aggiungiamo una seconda riga (cliccando sempre sul pulsante + presente in basso a sinistra del riquadro stesso) nel riquadro superiore per definire l’insieme B.
Per prima cosa impostiamo tutte le condizioni utili ad individuale l’insieme.
Quindi dobbiamo cambiare l’operatore booleano di default (che è un and) cliccando su di esso.
Ora abbiamo individuato l’insieme AUB (A unione B). Lasciando la funzione Select di prima e avendo avuto cura di deselezionare nell’editor di tipo piano roll i valori di nota precedenti, se clicchiamo su apply ora otterremo la selezione dell’insieme unione.
Facciamo un esempio di intersezione tra due insiemi. Consideriamo quelle note che hanno valore di 1/8 e che devono essere dei Do3 (C3). Questo significa che dobbiamo trovare quegli elementi che pur appartenendo all’insieme A (costituito dalle note di valore di 1/8) devono appartenere anche all’insieme B (costituito dalle note di altezza pari a C3). Definiti i due insiemi occorre utilizzare l’operatore booleano and. Questa è la schermata che riassume la definizione dei due insiemi e l’operazione di intersezione.
Lasciando la funzione Select di prima e avendo avuto cura di deselezionare nell’editor di tipo piano roll i valori di nota precedenti, se clicchiamo su apply ora otterremo la selezione dell’insieme intersezione.
E’ ovvio che una volta selezionati gli elementi possiamo agire su di essi modificando i parametri che ci occorrono ai fini della produzione: valore delle velocity, lunghezza, posizione, valore di altezza, ecc.