Pycon5 creare soundscape con pyo

49
Creare Soundscape con PYO PyCon 5 - Maggio 2014

description

Presentazione della libreria Pyo al Pycon5 (2014).

Transcript of Pycon5 creare soundscape con pyo

Page 1: Pycon5 creare soundscape con pyo

CreareSoundscape con

PYOPyCon 5 - Maggio 2014

Page 2: Pycon5 creare soundscape con pyo

Chi sono

Riccardo Lemmisviluppatore Zope/Plonechitarrista ERG (8string)

Page 4: Pycon5 creare soundscape con pyo

PYO

https://code.google.com/p/pyo/

“pyo is a Python module written in C to help digital signal processing script creation”

Page 5: Pycon5 creare soundscape con pyo

Come funziona Pyo

Suono come: vettore di float

stream di sampleflusso di campioni

Page 6: Pycon5 creare soundscape con pyo

Pyo Hello world

from pyo import *s = Server().boot()s.start()a = Sine(mul=0.01).out()

Page 7: Pycon5 creare soundscape con pyo

Esempio di generatore

Sine(freq=1000, phase=0, mul=1, add=0)

● freq: frequenza● phase: fase iniziale● mul: moltiplicatore dei campioni● add: parametro sommato ai campioni

Page 8: Pycon5 creare soundscape con pyo

Cambiare i parametri

Es: la frequenza

a.setFreq(1000) a.freq = 1000 a.set('freq', 1000, 5)

… in qualsiasi momento

Page 9: Pycon5 creare soundscape con pyo

Concatenare stream

Modulazione mod = Sine(freq=6, mul=50) a = Sine(freq=mod + 440, mul=0.1).out()

amp = Sine(freq=6) a = Sine(freq=440, mul=amp).out()

Page 10: Pycon5 creare soundscape con pyo

Concatenare stream

Inviluppo amp = Adsr(attack=.01, decay=.2, sustain=.5, release=.1, dur=5, mul=.5) a = Sine(mul=amp).out() amp.play()

Page 11: Pycon5 creare soundscape con pyo

Audio Server

Server Setup

from pyo import * s = Server(???).boot() s.start() a = Sine(440, mul=0.01).out() s.gui(locals())

Page 12: Pycon5 creare soundscape con pyo

Audio Serverclass Server(

sr=44100, nchnls=2, buffersize=256, duplex=1, audio='portaudio', jackname='pyo')

Page 13: Pycon5 creare soundscape con pyo

Audio ServerServer

nchnls

streams

Page 14: Pycon5 creare soundscape con pyo

Audio Server

Tipi

● portaudio● offline● jackd

Page 15: Pycon5 creare soundscape con pyo

Audio Server

.boot: setup server

.start: inizia l’elaborazione

.stop: ferma l’elaborazione

.gui: attiva la UI

Page 16: Pycon5 creare soundscape con pyo

Audio Server

Interazione

s.gui(locals())

locals() per accedere agli oggetti istanziati

Page 17: Pycon5 creare soundscape con pyo

Classi base

PyoObject

rappresenta uno stream

Page 18: Pycon5 creare soundscape con pyo

Classi base

PyoObject .play(dur=0, delay=0) .out(...) .stop() .mix(voices=1) -> Mix .set(attr, value, port=0.025)

Page 19: Pycon5 creare soundscape con pyo

Classi base

PyoObject

s1 = Sine().out() s1.set('freq', 500, 5)

Page 20: Pycon5 creare soundscape con pyo

Classi base

PyoObject

.get & .set .ctrl: gestione UI .mul: moltiplica il sample .add: aggiuge al sample

Page 21: Pycon5 creare soundscape con pyo

Classi base

PyoTableObject

buffer dove memorizzare un vettore pre-calcolato

Page 22: Pycon5 creare soundscape con pyo

Classi base

PyoMatrixObject

matrice bidimensionale dove memorizzare

campioni pre-calcolati

Page 23: Pycon5 creare soundscape con pyo

Operazioni matematiche

sincospowround...

Page 24: Pycon5 creare soundscape con pyo

Segnali di controllo

Generatori di campioni utilizzabili per controllare

i parametri dei segnali audio

Page 25: Pycon5 creare soundscape con pyo

Segnali di controllo

FaderGenera un inviluppo Fade-in/Fade-out

Adsr: Generatore di inviluppo: Attack - Decay - Sustain - Release

Page 26: Pycon5 creare soundscape con pyo

Segnali di controllo

LinsegGeneratore di inviluppo lineare: collega i punti con segmenti

.graph

Page 27: Pycon5 creare soundscape con pyo

Segnali di controllo

SigSegnale continuo: stream di un solo sample

.value stream .get sample

Page 28: Pycon5 creare soundscape con pyo

Gestione dinamica

Gestione dell’ampiezza del segnale

ClipCompress...

Page 29: Pycon5 creare soundscape con pyo

Effetti

Disto: distorsoreDelay: ritardoChorus...

Page 30: Pycon5 creare soundscape con pyo

Filtri

EQAllPass...

Page 31: Pycon5 creare soundscape con pyo

Trasformata di Fourier

Analisi del segnale nel dominio della frequenza.

FFT e IFFT...Spectrum: mostra lo spettro del segnale

Page 32: Pycon5 creare soundscape con pyo

Generatori di segnali audio

Possono essere usati come generatori di segnali audio

oppure comegeneratori di segnali di controllo

Page 33: Pycon5 creare soundscape con pyo

Generatori di segnali

Oscillatori

Sine sinusoideSineLoopPhasor dente di sega, rampaFM modulatore di frequenzaLFO… low frequency oscillator

Page 34: Pycon5 creare soundscape con pyo

Generatori di segnali

Rumore

BrownNoise Noise (white) PinkNoise

Page 35: Pycon5 creare soundscape con pyo

Routing

Mixer: audio mixer Pan: distribuisce uno stream su due canali Selector: interpola più stream

Page 36: Pycon5 creare soundscape con pyo

Generatori di Eventi

CallAfter: call al tempo tPattern: call periodica

Page 37: Pycon5 creare soundscape con pyo

Generatori di Eventi

a = Sine()def callback1(): a.set('freq', 100, 1)c1 = CallAfter(callback1, 2)

Page 38: Pycon5 creare soundscape con pyo

Lettori di file audio

Modellano un file audio

SfPlayer: legge un file e genera lo stream

Page 39: Pycon5 creare soundscape con pyo

Generatori Random

Generatori di rumore usati prevalentemente come controllori

per i parametri di altri generatori

Choice Rand* Xnoise*

Page 40: Pycon5 creare soundscape con pyo

Tabelle

Vettori monodimensionali che contengono

campioni pre-calcolati

Page 41: Pycon5 creare soundscape con pyo

Tabelle

CosTable: punti intepolati con un coseno .graphDataTable: tabella vuotaSawTable: contiene un “dente di sega”SndTable: riempita con un file...

Page 42: Pycon5 creare soundscape con pyo

Processori di Tabelle

Granulator: synth granulareLooper: playerOsc: oscillatore che usa una tabellaOscLoop: oscillatore con feedback...

Page 43: Pycon5 creare soundscape con pyo

Trigger

Flusso di 0 in cui “ogni tanto” c’è un 1

Page 44: Pycon5 creare soundscape con pyo

Generatori di Trigger

Trig: genera un singolo eventoMetro: metronomoSeq: generatore di pattern ritmiciBeat: generatore di pattern ritmici pseudo-random...

Page 45: Pycon5 creare soundscape con pyo

Handler di Trigger

Iter: cambia valore sequenzialmente TrigRand: genera un valore randomTrigChoice: cambia valore scegliendo da una lista TrigFunc: esegue una funzione...

Page 46: Pycon5 creare soundscape con pyo

Interfaccia utente

SLMap: slider genericoSLMapFreq: legato a ‘freq’SLMapMul: legato a ‘mul’…

Page 47: Pycon5 creare soundscape con pyo

Interfaccia utente

a = Sine(440, mul=0.5).out()a.ctrl([ SLMapFreq(init=a.freq), SLMapMul(init=a.mul),])

Page 48: Pycon5 creare soundscape con pyo

Utilities

Print: stampa il valore corrente di uno stream

Record: scrive su disco

Page 49: Pycon5 creare soundscape con pyo

Il coro demoniaco

Analisi del codice