Your SlideShare is downloading. ×
0
Creare
Soundscape con
PYO
PyCon 5 - Maggio 2014
Chi sono
Riccardo Lemmi
sviluppatore Zope/Plone
chitarrista 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 sample
flusso 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: moltiplicator...
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 = S...
Concatenare stream
Inviluppo
amp = Adsr(attack=.01, decay=.2,
sustain=.5, release=.1,
dur=5, mul=.5)
a = Sine(mul=amp).out...
Audio Server
Server Setup
from pyo import *
s = Server(???).boot()
s.start()
a = Sine(440, mul=0.01).out()
s.gui(locals())
Audio Server
class Server(
sr=44100,
nchnls=2,
buffersize=256,
duplex=1,
audio='portaudio',
jackname='pyo')
Audio Server
Server
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
sin
cos
pow
round
...
Segnali di controllo
Generatori di campioni
utilizzabili per controllare
i parametri dei segnali audio
Segnali di controllo
Fader
Genera un inviluppo Fade-in/Fade-out
Adsr:
Generatore di inviluppo:
Attack - Decay - Sustain - ...
Segnali di controllo
Linseg
Generatore di inviluppo lineare:
collega i punti con segmenti
.graph
Segnali di controllo
Sig
Segnale continuo: stream di un solo sample
.value stream
.get sample
Gestione dinamica
Gestione dell’ampiezza del segnale
Clip
Compress
...
Effetti
Disto: distorsore
Delay: ritardo
Chorus
...
Filtri
EQ
AllPass
...
Trasformata di Fourier
Analisi del segnale nel dominio della frequenza.
FFT e IFFT...
Spectrum: mostra lo spettro del segn...
Generatori di segnali audio
Possono essere usati come
generatori di segnali audio
oppure come
generatori di segnali di con...
Generatori di segnali
Oscillatori
Sine sinusoide
SineLoop
Phasor dente di sega, rampa
FM modulatore di frequenza
LFO… low ...
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 t
Pattern: 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
R...
Tabelle
Vettori monodimensionali
che contengono
campioni pre-calcolati
Tabelle
CosTable: punti intepolati con un coseno
.graph
DataTable: tabella vuota
SawTable: contiene un “dente di sega”
Snd...
Processori di Tabelle
Granulator: synth granulare
Looper: player
Osc: oscillatore che usa una tabella
OscLoop: oscillatore...
Trigger
Flusso di 0 in cui “ogni tanto” c’è un 1
Generatori di Trigger
Trig: genera un singolo evento
Metro: metronomo
Seq: generatore di pattern ritmici
Beat: generatore ...
Handler di Trigger
Iter: cambia valore sequenzialmente
TrigRand: genera un valore random
TrigChoice: cambia valore sceglie...
Interfaccia utente
SLMap: slider generico
SLMapFreq: 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
Upcoming SlideShare
Loading in...5
×

Pycon5 creare soundscape con pyo

126

Published on

Presentazione della libreria Pyo al Pycon5 (2014).

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
126
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Pycon5 creare soundscape con pyo"

  1. 1. Creare Soundscape con PYO PyCon 5 - Maggio 2014
  2. 2. Chi sono Riccardo Lemmi sviluppatore Zope/Plone chitarrista ERG (8string)
  3. 3. Damned Chorus Ascolto
  4. 4. PYO https://code.google.com/p/pyo/ “pyo is a Python module written in C to help digital signal processing script creation”
  5. 5. Come funziona Pyo Suono come: vettore di float stream di sample flusso di campioni
  6. 6. Pyo Hello world from pyo import * s = Server().boot() s.start() a = Sine(mul=0.01).out()
  7. 7. 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
  8. 8. Cambiare i parametri Es: la frequenza a.setFreq(1000) a.freq = 1000 a.set('freq', 1000, 5) … in qualsiasi momento
  9. 9. 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()
  10. 10. Concatenare stream Inviluppo amp = Adsr(attack=.01, decay=.2, sustain=.5, release=.1, dur=5, mul=.5) a = Sine(mul=amp).out() amp.play()
  11. 11. Audio Server Server Setup from pyo import * s = Server(???).boot() s.start() a = Sine(440, mul=0.01).out() s.gui(locals())
  12. 12. Audio Server class Server( sr=44100, nchnls=2, buffersize=256, duplex=1, audio='portaudio', jackname='pyo')
  13. 13. Audio Server Server nchnls streams
  14. 14. Audio Server Tipi ● portaudio ● offline ● jackd
  15. 15. Audio Server .boot: setup server .start: inizia l’elaborazione .stop: ferma l’elaborazione .gui: attiva la UI
  16. 16. Audio Server Interazione s.gui(locals()) locals() per accedere agli oggetti istanziati
  17. 17. Classi base PyoObject rappresenta uno stream
  18. 18. Classi base PyoObject .play(dur=0, delay=0) .out(...) .stop() .mix(voices=1) -> Mix .set(attr, value, port=0.025)
  19. 19. Classi base PyoObject s1 = Sine().out() s1.set('freq', 500, 5)
  20. 20. Classi base PyoObject .get & .set .ctrl: gestione UI .mul: moltiplica il sample .add: aggiuge al sample
  21. 21. Classi base PyoTableObject buffer dove memorizzare un vettore pre-calcolato
  22. 22. Classi base PyoMatrixObject matrice bidimensionale dove memorizzare campioni pre-calcolati
  23. 23. Operazioni matematiche sin cos pow round ...
  24. 24. Segnali di controllo Generatori di campioni utilizzabili per controllare i parametri dei segnali audio
  25. 25. Segnali di controllo Fader Genera un inviluppo Fade-in/Fade-out Adsr: Generatore di inviluppo: Attack - Decay - Sustain - Release
  26. 26. Segnali di controllo Linseg Generatore di inviluppo lineare: collega i punti con segmenti .graph
  27. 27. Segnali di controllo Sig Segnale continuo: stream di un solo sample .value stream .get sample
  28. 28. Gestione dinamica Gestione dell’ampiezza del segnale Clip Compress ...
  29. 29. Effetti Disto: distorsore Delay: ritardo Chorus ...
  30. 30. Filtri EQ AllPass ...
  31. 31. Trasformata di Fourier Analisi del segnale nel dominio della frequenza. FFT e IFFT... Spectrum: mostra lo spettro del segnale
  32. 32. Generatori di segnali audio Possono essere usati come generatori di segnali audio oppure come generatori di segnali di controllo
  33. 33. Generatori di segnali Oscillatori Sine sinusoide SineLoop Phasor dente di sega, rampa FM modulatore di frequenza LFO… low frequency oscillator
  34. 34. Generatori di segnali Rumore BrownNoise Noise (white) PinkNoise
  35. 35. Routing Mixer: audio mixer Pan: distribuisce uno stream su due canali Selector: interpola più stream
  36. 36. Generatori di Eventi CallAfter: call al tempo t Pattern: call periodica
  37. 37. Generatori di Eventi a = Sine() def callback1(): a.set('freq', 100, 1) c1 = CallAfter(callback1, 2)
  38. 38. Lettori di file audio Modellano un file audio SfPlayer: legge un file e genera lo stream
  39. 39. Generatori Random Generatori di rumore usati prevalentemente come controllori per i parametri di altri generatori Choice Rand* Xnoise*
  40. 40. Tabelle Vettori monodimensionali che contengono campioni pre-calcolati
  41. 41. Tabelle CosTable: punti intepolati con un coseno .graph DataTable: tabella vuota SawTable: contiene un “dente di sega” SndTable: riempita con un file ...
  42. 42. Processori di Tabelle Granulator: synth granulare Looper: player Osc: oscillatore che usa una tabella OscLoop: oscillatore con feedback ...
  43. 43. Trigger Flusso di 0 in cui “ogni tanto” c’è un 1
  44. 44. Generatori di Trigger Trig: genera un singolo evento Metro: metronomo Seq: generatore di pattern ritmici Beat: generatore di pattern ritmici pseudo-random ...
  45. 45. Handler di Trigger Iter: cambia valore sequenzialmente TrigRand: genera un valore random TrigChoice: cambia valore scegliendo da una lista TrigFunc: esegue una funzione ...
  46. 46. Interfaccia utente SLMap: slider generico SLMapFreq: legato a ‘freq’ SLMapMul: legato a ‘mul’ …
  47. 47. Interfaccia utente a = Sine(440, mul=0.5).out() a.ctrl([ SLMapFreq(init=a.freq), SLMapMul(init=a.mul), ])
  48. 48. Utilities Print: stampa il valore corrente di uno stream Record: scrive su disco
  49. 49. Il coro demoniaco Analisi del codice
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×