controllo in tempo reale di strumenti csound programmazione timbrica (prof. luca a. ludovico)...

31
Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Upload: rinaldo-cozzi

Post on 02-May-2015

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Controllo in tempo realedi strumenti Csound

Programmazione timbrica (Prof. Luca A. Ludovico)

Relazione di Filippo Bergamo

Page 2: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Perché Csound in tempo reale?

• Multipiattaforma → il codice sviluppato può essere utilizzato senza modifiche su qualunque macchina Linux/Mac/Win che abbia i necessari moduli Csound installati.

• Offre sia controllo completo a livello elementare (oscil ecc.), sia metodi già implementati a livello complesso (pluck, reverb, delay, ...)

• Buona reperibilità di pattern e UDO. Comunità di discussione e sviluppo molto attiva.

Page 3: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Fine-tuning per il tempo reale

• Lavorare in tempo reale pone un problema fondamentale: la latenza. Non è trascurabile ai fini dell'esecuzione musicale. E' sempre presente, indipendentemente dal sistema specifico.

• Macchine odierne → processori potenti e grande quantità di RAM (relativamente al fabbisogno)Latenza minimizzabile fino a livelli trascurabili.

• Necessari accorgimenti e impostazioni per ottimizzare le risorse: Ottimizzazione codice + “tweaking” parametri

Page 4: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Ottimizzare il codice (1)

● A parità di punti in tabella oscili produce un output più definito, tuttavia impegna circa il DOPPIO di cpu rispetto a oscil.→ maggiore latenza di calcolo!

● L'occupazione di memoria non è critica.Dimensioni memoria allocata non impoveriscono latenza. Surplus di memoria a disposizione.

● Soluzione: utilizzo di oscil “grezzo”, con dimensioni maggiori della wavetable:oscil con 16536 punti è più definito rispetto adoscili con 1024 punti!

Page 5: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Ottimizzare il codice (2)

● Evitare istruzioni condizionali e branch (if, goto...)

● Ottimizzare operazioni matematiche: dove possibile evitare divisioni e sostituirle con moltiplicazioni per l'inverso (es. kvar / 4 diventa kvar * 0,25)

● Con i-variabili:

Moltiplica solo ad inizializ.

ivol midictrl 7aout oscil ivol*200, 1000, 1

Moltiplica ad ogni k-time

ivol midictrl 7ivol = ivol*200aout oscil ivol, 1000, 1

VS.

Page 6: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking

• Come funziona Csound?

Buffer

DAC

Buffer memoriaMotore

di calcolo Campioni audio

Page 7: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking

• Calcola campioni audio (impiega tempo CPU)

Buffer

DAC

Buffer memoriaMotore

di calcolo Campioni audio

Page 8: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking

• Scrive i campioni in un buffer nella propria porzione di memoria

Buffer

DAC

Buffer memoriaMotore

di calcolo Campioni audio

Page 9: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking

• Quando il buffer interno è pieno, trasferisce al DAC l'intero blocco di campioni

Buffer

DAC

Buffer memoriaMotore

di calcolo Campioni audio

Page 10: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking

• Il DAC consuma il proprio buffer interno, producendo in output l'equivalente segnale analogico

Buffer

DAC

Buffer memoriaMotore

di calcolo Campioni audio

Page 11: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking – buffers (1)

● Le dimensioni del buffer interno a Csound (e di quello del DAC) influenzano latenza e definizione del suono

● Finchè Csound non ha riempito il proprio buffer interno NON passerà alcun campione al DAC → nessun output

● Buffer grandi aumentano latenza● Buffer ristretti aumentano rischio di lacune nello

stream audio (salto di campioni)

Page 12: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking – buffers (2)

● Esempio:buffer di 1024 campionisr=44100 → 23.2 ms di audio (mono)Csound ha 23.2 ms per riempire nuovamente il buffer, prima che il DAC esaurisca i campioni, producendo una lacuna nello stream audio.

● Quanto tempo impiega Csound a produrre 1024 campioni? Dipende dal codice, dalla potenza di calcolo della macchina, dallo scheduling, ...

● Dimensioni del buffer gestite empiricamente

Page 13: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking – buffers (3)

● Formula guida per il calcolo della latenza MAX:MAX_LAT= (buff_sw + buff_hw) * nchnls / sr

● Esempio:sr = 44100● buff_sw=1024, buff_hw=256, stereo● latenza max = 0,058 sec (58ms) → eccessiva!

● Massima latenza tollerabile in esecuzione musicale = 20ms

Page 14: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking – buffers (4)

● Per cambiare le dimensioni dei buffer:

● Da riga di comando:csound -b [buffSW] -B [buffHD] nomefile.csp

● Da file csp:<CsOptions> -b [buffSW] -B [buffHD] </CsOptions>

● [buffSW]= dimensioni buffer interno a Csound● [buffHD]= dimensioni buffer DAC● Entrambi devono essere potenze di 2!!!

Page 15: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tweaking – altri parametri

● Alzare il k-rate. K-rate più alti generano minor numero di campioni per periodo, quindi minor latenza, a spese della risoluzione temporale.

● Impostare scheduling a priorità più alta per Csound (disponibile sotto linux/ALSA richiede privilegi root)

● tag --sched

● Cambiare i driver di gestione audio:Csound usa di defauld PortAudio, multipiattaforma. Risultati migliori possono essere ottenuti con driver specifici al OS (ALSA, ASIO, …)

● tag -+rtaudio=[nome_driver]

Page 16: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Input / Output in tempo reale

● Di default Csound scrive l'output su file.● È necessario reindirizzare l'output alla scheda audio

● tag -o dac[numDAC]

● Per ottenere elenco dei dac disponibili: -o dac99

● Diverse modalità di controllo dell'esecuzione: MOUSE ASCII KEYBOARD WIDGETS (sliders, bottoni, ecc..) MIDI

Page 17: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via mouse - xyin

L'opcode xyin ritorna la posizione del puntatore del mouse, in termini di coordinate x, y e la scrive sulle due k-variabili kx, ky

Sintassi:kx, ky xyin iprd, ixmin, ixmax, iymin, iymax

[, ixinit] [, iyinit]

iprd = periodo di refresh (tipicamente 0.1s)Ixmin, ixmax, iymin, iymax = dimensioni della finestra entro cui si muove il puntatoreixinit, iyinit = valori iniziali di x e y (facoltativi)

Page 18: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via mouse - xyin

ESEMPIO XYIN:

File xyin.csd

controllo di frequenza centrale e ampiezza di banda in un filtro passa banda risonante su rumore bianco

Page 19: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via tastiera ascii

● L'opcode FLkeyIn fa parte della famiglia FLTK (Fast Light Tool Kit, libreria grafica open source). È utilizzabile dopo aver definito un pannello FLpanel entro il quale sono ascoltati gli input.

● Quando il focus è sulla finestra lanciata da FLpanel, ritorna il codice ascii di un tasto premuto, o il codice ASCII * -1 al rilascio del medesimo tasto.

● È quindi possibile utilizzare i tasti ASCII per gestire variabili di controllo come frequenza e ampiezza.

Page 20: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via tastiera ascii (2)

● È un metodo di controllo limitato.

● Non è implementabile in polifonia (le note sono comunque allocate staticamente nello score).

● I codici ASCII non sono ordinati seguendo la disposizione dei tasti→ occorre mappare ogni singolo codice

ad un corrispondente valore utile→ esempio: tastiera cromatica 1 ottava

Page 21: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via tastiera ascii

ESEMPIO FlkeyIn:

File keymap.csd

controllo della frequenza di un semplice oscillatore digitale tramite tastiera ASCII con mappatura in ftable

GEN17.

La riga di tasti da [a] a [ù] compone una tastiera cromatica

a 12 semitoni / 1 ottava.

Page 22: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via Widgets FLTK

● FLTK, libreria che offre metodi grafici per lo sviluppo di interfacce. Modulo incluso in Csound di default.

● Consente la creazione di finestre contenenti slider, bottoni, contatori, ecc.

● I controller così creati modificano in tempo reale parametri a k-rate

● Esempio: gestione di portante, modulante e volume in un semplice esempio di sintesi FM

Page 23: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via Widgets FLTK

ESEMPIO FLTK:

File widgets.csdgestione di portante, modulante e volume con knob e

slider grafici controllati via mouse.Un semplice esempio di sintesi FM (opcode foscil)

Page 24: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via Widgets FLTK (2)

Per maggiori dettagli e specifiche complete:

www.csounds.com/manual/html/ControlFltkIntro.html

Page 25: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Controllo via MIDI – Perché?

● È il metodo di controllo privilegiato per una efficacie gestione in tempo reale di Csound

● MIDI è lo standard che garantisce alto livello di di interoperabilità tra diversi ambienti di generazione del suono. Codice trasparente all'esecutore musicale, che ha a disposizione un metodo di controllo familiare (tastiera)

● Offre metodi per un controllo (quasi) totale della performance musicale.

● Csound offre un'interfaccia completa e già implementata per la gestione di messaggi MIDI, attraverso una collezione di opcode dedicati.

Page 26: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Score-activated VS. MIDI-triggered (1)

● Attivazione degli strumenti non più attraverso lo score, ma con messaggi di NOTE-ON letti attraverso opcode.

● Uno strumento diventa automaticamente MIDI-triggered se contiene almeno un opcode di lettura MIDI (es. cpsmidi, ampmidi)

● MIDI e score possono coesistere anche per lo stesso strumento (vengono allocate più istanze), con opportuni opcode

Page 27: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Score-activated VS. MIDI-triggered (2)

● Uno strumento MIDI necessita sempre e comunque di essere attivato da un messaggio NOTE-ON sul relativo canale (opcode cpsmidi), anche se non deve riprodurre alcun suono. NOTE-ON alloca un'istanza dello strumento ed inizia l'esecuzione (equivalente ad una i-statement)

● Gli opcode MIDI (ampmidi, cpsmidi, midictrl..) non supportano l'interazione con eventi dello score (comportamento imprevedibile)

● Sono necessari opcode specifici “MIDI-oriented” per garantire tale interazione

Page 28: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Score-activated VS. MIDI-triggered (2)

● Opcode MIDIl'informazione di canale non è esplicita. I canali 1-16 vengono assegnati agli strumenti 1-16, non possono interagire con istanze allocate da score.(ampmidi, cpsmidi, midictrl, ...)

● Opcode MIDI-orientedleggono informazione da porta midi, ma non necessitano di noteon (strumento interamente score-activated)l'informazione di canale è passata esplicitamente all'opcode, questo garantisce comportamento stabile nello score.

Page 29: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

Tag per MIDI realtime

● Per attivare il controllo MIDI in realtime è necessario specificare la porta (reale o virtuale) su cui Csound si mette in ascolto:tag -M[numeroporta] (default -M0)

● É inoltre possibile specificare il driver (default PortMidi):tag -+rtmidi=[nomedriver]

● Per comodità useremo controller virtuale integrato in Csound: tag -+rtmidi=virtual

Page 30: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

MIDI - Esempi

ESEMPIO MIDI:

File midi.csd

Strumento midi corda pizzicata (opcode pluck).

Generazione di una catena virtuale del suono (opcodes “connect”, “alwayson”) e gestione di porte virtuali (opcode “outleta”).

Output instradato ad uno strumento riverbero, con decay time controllato via midi (opcode ctrl7)

Page 31: Controllo in tempo reale di strumenti Csound Programmazione timbrica (Prof. Luca A. Ludovico) Relazione di Filippo Bergamo

Programmazione timbrica (Prof. Luca A. Ludovico)Controllo in tempo reale di strumenti Csound

MIDI – opcode fondamentali

Lettura di informazioni nota:•ifreq cpsmidi – restituisce la frequenza di un noteon cpsmidib – variante sensibile a pitch wheel•ivel ampmidi iscal – restituisce la velocity scalata ad iscal•Ivel veloc [, imin, imax] – restituisce velocity entro valori imin-imax (valori esterni mantengono l'ultimo valore)

Lettura valori controller:•kctrl midictrl inum [, imin, imax] – restituisce il valore del controller numero inum tra imin-imax. (solo midi)•[i,k,a]ctrl ctrl7 ichn, inum, kmin, kmax – restituisce il valore del controller inum su canale ichn (score-comp.)