150 likes | 320 Views
Progetto di Linguaggi e modelli computazionali M. Prof. Enrico Denti. Progetto di: Francesco Paci. Presentazione del progetto. KeyBoard Pattern è un linguaggio per assegnare delle caratteristiche proprie del linguaggio Midi ad un set di tastiere.
E N D
Progetto di Linguaggi e modelli computazionali M Prof. Enrico Denti Progetto di: Francesco Paci
Presentazione del progetto • KeyBoard Pattern è un linguaggio per assegnare delle caratteristiche proprie del linguaggio Midi ad un set di tastiere. • È possibile creare dei pattern di caratteristiche sonore. • Il software realizzato permette di collegare una tastiera midi ad un Personal Computer e di elaborare il segnale che essa fornisce in ingresso secondo le caratteristiche volute, modellate dal linguaggio.
Standard Midi • Lo standard midi è stato introdotto all’inizio degli anni ’80 • Esso consiste di un insieme di hardware e software che concorrono alla standardizzazione della comunicazione di strumenti musicali. • Nel contesto del mio lavoro è stato studiato come vengono inviate le informazioni all’interno del protocollo midi.
Messaggi Midi • I messaggi scambiati tra i Midi Devicesono di due tipi: • ChannelMessage • Channel Voice Message • Channel System Message • System Message • I messaggi che scambiano le informazioni relative alla pressione dei tasti e al canale utilizzato sono i Channel Voice Message. • Ogni midi Device può utilizzare 16 canali di trasmissione in modalità MONO (trasmette su un solo canale alla volta) • Le caratteristiche che il midi consente di modellare su ogni tasto sono le seguenti: • Banco (Timbro del suono) • Transpose • Pitch Wheel (valori tra -8192 e 8191) • Modulation (valori tra 0 e 127)
Scopo del linguaggio • Lo scopo del progetto è poter assegnare le caratteristiche dei channel voice message ad un insieme di tasti. L’insieme dei tasti a cui assegnarle è arbitrario e specificabile tramite il linguaggio. • Quindi è possibile ognuno dei 16 canali in tanti gruppi di note ed assegnare ad ognuno di questi delle caratteristiche, indipendenti dalle altre. • I gruppi possono essere composti da un numero qualsiasi di note compreso tra 1 e 128 per ogni canale. • Non possono essere immessi dei gruppi sovrapposti • Lo stesso banco può essere assegnato a più canali ed anche a più gruppi appartenenti allo stesso canale.
Midi in Java • In java il protocollo midi può essere sfruttato tramite le classi appartenenti alla libreria javax.sound.midi • Questa libreria mette a disposizione tutti i metodi per accedere ai Midi Device presenti nel sistema. • Per intercettare i messaggi scambiati è stata implementata la classe astratta Receiver che permette di implementare il metodo send. • Attraverso questo metodo è possibile intercettare i messaggi midi in ingresso e modificarli prima che vengano inviati al sintetizzatore.
Grammatica • Non Terminali: • <scope> : < LIVESESSION > "{" (<body>)+ "}" < EOF > • <body> : < KEYBOARD > <NOME> "{" <statement > "}“ • <statement>: <canale> <contenuto>+ • <canale> : < CHANNEL > <NUMERO> ";" • <contenuto> : < OPTIONS > "(" < TASTI > ")" "{" <opzioni> "}“ • <opzioni> : <strumento> <transpose>? <pitch>? <modulation>? • <strumento> : < BANK > <NUMERO> ";“ • <transpose> : < TRANSPOSE > <NUMERO> ";“ • <pitch> : < PITCH > <NUMERO> ";“ • <modulation> : < MODULATION > <NUMERO> ";"
Grammatica alternativa • Non Terminali: • <scope> : < LIVESESSION > "{" (<body>)+ "}" < EOF > • <body> : < KEYBOARD > <NOME> "{" <statement > "}“ • <statement>: <canale> <contenuto>+ • <canale> : < CHANNEL > <NUMERO> ";" • <contenuto> : < OPTIONS > "(" < TASTI > ")" "{" <opzioni>+ "}“ • <opzioni> : <strumento> | <transpose> | <pitch> |<modulation> • <strumento> : < BANK > <NUMERO> ";“ • <transpose> : < TRANSPOSE > <NUMERO> ";“ • <pitch> : < PITCH > <NUMERO> ";“ • <modulation> : < MODULATION > <NUMERO> ";"
Grammatica • Terminali: • < LIVESESSION: "LiveSession" > • < KEYBOARD: "keyboard" > • < ACTIVE: "active" > • < CHANNEL: "channel" > • < OPTIONS: "options" > • < BANK: "bank" > • < TRANSPOSE: "transpose" > • < PITCH: "pitch" > • < MODULATION: "modulation" > • < TASTI: <NUMERO> ":" <NUMERO> > • <NOME: <CARATTERE> (<CARATTERE> | <CIFRA>)*> • <CARATTERE: ["a"-"z","A"-"Z","_","\'"]> • <NUMERO: (< SEGNO >)? (<CIFRA>)+ > • <SEGNO: "+" | "-" >| • <CIFRA: ["0"-"9"] >
Strumenti di realizzazione • Java Tree Builder • JavaCCeclipse plug-in • Eclipse - ambiente di sviluppo
Esempi di utilizzo • LiveSession{ • keyboard tast1{ • channel 1; • options (1:50){ • bank 56; • transpose -4; • } • } • }
Esempi di utilizzo • LiveSession{ • keyboard tast1{ • channel 12; • options (1:50){ • bank 3; • transpose 4; • } • } • keyboard tast2{ • channel 2; • options (1:100){ • bank 12; • transpose 4; • pitch 23; • } • } • }
Test • Bome’s mouse keyboard– per comodità • LoopBevirtual midi port – per far credere al sistema operativo che stiamo usando un ingresso midi “reale” • Possibilità di utilizzo di qualsiasi tastiera come output Standard MIDI
Limiti del linguaggio • Linguaggio di tipo 3 • Seppure la grammatica sia in grado di generare un linguaggio infinito, il linguaggio in oggetto è limitato a causa delle caratteristiche modellate.
Sviluppi futuri • Integrazione pannello di scelta input e output midi. • Possibilità di definizione di tastiere non associate ad un canale per avere una più vasta gamma di scelta senza modificare la grammatica. • Migliorare l’interfaccia grafica per interazione con l’utente, in conseguenza anche al punto precedente. • Estendere le modifiche dei parametri al supporto di canali live controllati da tastiera