Pycon5 creare soundscape con pyo

Post on 07-Jul-2015

134 views 2 download

description

Presentazione della libreria Pyo al Pycon5 (2014).

Transcript of Pycon5 creare soundscape con pyo

CreareSoundscape con

PYOPyCon 5 - Maggio 2014

Chi sono

Riccardo Lemmisviluppatore Zope/Plonechitarrista ERG (8string)

PYO

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

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

Come funziona Pyo

Suono come: vettore di float

stream di sampleflusso di campioni

Pyo Hello world

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

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

Cambiare i parametri

Es: la frequenza

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

… in qualsiasi momento

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()

Concatenare stream

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

Audio Server

Server Setup

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

Audio Serverclass Server(

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

Audio ServerServer

nchnls

streams

Audio Server

Tipi

● portaudio● offline● jackd

Audio Server

.boot: setup server

.start: inizia l’elaborazione

.stop: ferma l’elaborazione

.gui: attiva la UI

Audio Server

Interazione

s.gui(locals())

locals() per accedere agli oggetti istanziati

Classi base

PyoObject

rappresenta uno stream

Classi base

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

Classi base

PyoObject

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

Classi base

PyoObject

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

Classi base

PyoTableObject

buffer dove memorizzare un vettore pre-calcolato

Classi base

PyoMatrixObject

matrice bidimensionale dove memorizzare

campioni pre-calcolati

Operazioni matematiche

sincospowround...

Segnali di controllo

Generatori di campioni utilizzabili per controllare

i parametri dei segnali audio

Segnali di controllo

FaderGenera un inviluppo Fade-in/Fade-out

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

Segnali di controllo

LinsegGeneratore di inviluppo lineare: collega i punti con segmenti

.graph

Segnali di controllo

SigSegnale continuo: stream di un solo sample

.value stream .get sample

Gestione dinamica

Gestione dell’ampiezza del segnale

ClipCompress...

Effetti

Disto: distorsoreDelay: ritardoChorus...

Filtri

EQAllPass...

Trasformata di Fourier

Analisi del segnale nel dominio della frequenza.

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

Generatori di segnali audio

Possono essere usati come generatori di segnali audio

oppure comegeneratori di segnali di controllo

Generatori di segnali

Oscillatori

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

Generatori di segnali

Rumore

BrownNoise Noise (white) PinkNoise

Routing

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

Generatori di Eventi

CallAfter: call al tempo tPattern: call periodica

Generatori di Eventi

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

Lettori di file audio

Modellano un file audio

SfPlayer: legge un file e genera lo stream

Generatori Random

Generatori di rumore usati prevalentemente come controllori

per i parametri di altri generatori

Choice Rand* Xnoise*

Tabelle

Vettori monodimensionali che contengono

campioni pre-calcolati

Tabelle

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

Processori di Tabelle

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

Trigger

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

Generatori di Trigger

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

Handler di Trigger

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

Interfaccia utente

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

Interfaccia utente

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

Utilities

Print: stampa il valore corrente di uno stream

Record: scrive su disco

Il coro demoniaco

Analisi del codice