Pycon5 creare soundscape con pyo
-
Upload
riccardo-lemmi -
Category
Technology
-
view
134 -
download
2
description
Transcript of Pycon5 creare soundscape con pyo
CreareSoundscape con
PYOPyCon 5 - Maggio 2014
Chi sono
Riccardo Lemmisviluppatore Zope/Plonechitarrista ERG (8string)
Damned Chorus
Ascolto
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