Weitere ähnliche Inhalte Ähnlich wie (2014-10-27) [SETI-UFLA-MG] AudioLazy (18) Mehr von Danilo J. S. Bellini (20) (2014-10-27) [SETI-UFLA-MG] AudioLazy1. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
AAuuddiiooLLaazzyy
DDaanniilloo ddee JJeessuuss ddaa SSiillvvaa BBeelllliinnii
((DDeesseennvvoollvveeddoorr ddaa AAuuddiiooLLaazzyy))
TTwwiitttteerr:: @@ddaanniilloobbeelllliinnii
hhttttppss::////ggiitthhuubb..ccoomm//ddaanniilloobbeelllliinnii//aauuddiioollaazzyy
hhttttppss::////ppyyppii..ppyytthhoonn..oorrgg//ppyyppii//aauuddiioollaazzyy
hhttttppss::////ggrroouuppss..ggooooggllee..ccoomm//ffoorruumm//##!!
ffoorruumm//aauuddiioollaazzyy
2. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
AAuuddiiooLLaazzyy
● DDSSPP ((DDiiggiittaall SSiiggnnaall PPrroocceessssiinngg))
– AAnnáálliissee
– SSíínntteessee
– PPrroocceessssaammeennttoo
– PPssiiccooaaccúússttiiccaa
● EExxpprreessssiivviiddaaddee ddee ccóóddiiggoo
● TTeemmppoo rreeaall
Python 2.7
e 3.2+!
Documentação (Sphinx)
http://pythonhosted.org/audiolazy
86% py.test
branch
coverage
Cálculo numérico
Imagens
...
Game: Musical Mines!
https://github.com/danilobellini/mmines
3. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
““HHeelllloo wwoorrlldd””
● TTooccaarr uummaa sseennóóiiddee
– CCoonnssoollee
((ee..gg.. IIPPyytthhoonn))
– SSccrriippttss
Multithread!
from from audiolazy audiolazy import import *
*
rate = 44100
s, Hz = sHz(rate)
player = AudioIO()
snd = sinusoid(440 * Hz).limit(2 * s)
th = player.play(snd, rate=rate) # an AudioThread
player.close() # Kill th (AudioIO arg isn't True)
rate = 44100
s, Hz = sHz(rate)
player = AudioIO()
snd = sinusoid(440 * Hz).limit(2 * s)
th = player.play(snd, rate=rate) # an AudioThread
player.close() # Kill th (AudioIO arg isn't True)
● GGeerreenncciiaaddoorreess ddee ccoonntteexxttoo
ALSA/Jack/... via PyAudio
(PortAudio)
with AudioIO(True, api="jack") as player: # True = wait all audio
with AudioIO(True, api="jack") as player: # True = wait all audio
player.play(snd, rate=rate) # threads finish
player.play(snd, rate=rate) # threads finish
4. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
IItteerráávveell == ááuuddiioo!!
● CCoonnttrroollSSttrreeaamm
– IInntteerraattiivviiddaaddee
● SSttrreeaamm
In [1]: data = ControlStream(42)
In [2]: data.take(5)
Out[2]: [42, 42, 42, 42, 42]
In [1]: data = ControlStream(42)
In [2]: data.take(5)
Out[2]: [42, 42, 42, 42, 42]
In [3]: data.value = -1
In [4]: data.take(5)
Out[4]: [-1, -1, -1, -1, -1]
In [3]: data.value = -1
In [4]: data.take(5)
Out[4]: [-1, -1, -1, -1, -1]
– LLaazzyy
– OOppeerraaddoorreess eelleemmeennttwwiissee//bbrrooaaddccaasstt
– MMééttooddooss ttaakkee,, ppeeeekk,, lliimmiitt,, sskkiipp,, mmaapp,, ffiilltteerr ee bblloocckkss
In [1]: from audiolazy import Stream, inf, count, cycle # itertools-like
In [2]: dados = Stream(-5j, 7j, 1, 1+2j, 5, 3, 2) # Periódico
In [3]: dados2 = Stream(0, 2j) # Idem
In [4]: (dados * dados2).take(15)
Out[4]: [0j, (-14+0j), 0, (-4+2j), 0, 6j, 0, (10+0j), 0j, 2j, 0j, 10j, 0, 4j, 0j]
In [5]: (cycle(_).limit(5).imag * 1j + count(start=1, step=2)).take(inf)
Out[5]: [(1+0j), (3+0j), (5+0j), (7+2j), (9+0j)]
In [1]: from audiolazy import Stream, inf, count, cycle # itertools-like
In [2]: dados = Stream(-5j, 7j, 1, 1+2j, 5, 3, 2) # Periódico
In [3]: dados2 = Stream(0, 2j) # Idem
In [4]: (dados * dados2).take(15)
Out[4]: [0j, (-14+0j), 0, (-4+2j), 0, 6j, 0, (10+0j), 0j, 2j, 0j, 10j, 0, 4j, 0j]
In [5]: (cycle(_).limit(5).imag * 1j + count(start=1, step=2)).take(inf)
Out[5]: [(1+0j), (3+0j), (5+0j), (7+2j), (9+0j)]
5. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
NNoottaass//AAllttuurraass ee MMIIDDII PPiittcchh
● PPiittcchh ((nnoottaass//aallttuurraass))
● CCoomm ooiittaavvaass!!
– IInniicciiaamm eemm ddóó
>>> str2midi("Cb4") == str2midi("B3")
True
● MMIIDDII PPiittcchh
– EEmm sseemmiittoonnss
● FFuunnççõõeess ppaarraa rreeaalliizzaarr
ccoonnvveerrssõõeess
– mmiiddii22ssttrr
– ssttrr22mmiiddii
– ffrreeqq22ssttrr
– ssttrr22ffrreeqq
– mmiiddii22ffrreeqq
– ffrreeqq22mmiiddii
C D E F G A B
Do Re Mi Fa Sol La Si
>>> str2midi("Cb4") == str2midi("B3")
True
>>> str2midi("A4") # La central
69
>>> str2midi("Bb4")
70
>>> str2midi("C5")
72
>>> str2midi("A4") # La central
69
>>> str2midi("Bb4")
70
>>> str2midi("C5")
72
Outras
conversões
lag2freq
freq2lag
phon2dB
dB10
dB20
6. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
LLoouuddnneessss
Modelo de Fletcher-Munson (1933)
“Loudness, Its Definition, Measurement and Calculation”
ISO/FDIS 226:2003
Imagem obtida a partir do exemplo iso226_plot.py
7. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
AAllttuurraa ((ppiittcchh))!! SShheeppaarrdd
● 22 ddiimmeennssõõeess::
– AAllttuurraa ((ppiittcchh hheeiigghhtt))
● DDiimmeennssããoo ““lliinneeaarr””
– CCrroommaa ((ppiittcchh cchhrroommaa))
● DDiimmeennssããoo ““cciirrccuullaarr””
● LLeemmbbrraa EEsscchheerr →→
EExxeemmpplloo sshheeppaarrdd..ppyy
““HHéélliiccee””
8. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
DDeemmoonnssttrraattiioonnss ttoo
AASSAA ((BBrreeggmmaann))
RRuuííddoo
((eexxppeerriimmeennttoo 3344))
EExxeemmpplloo bbuutttteerrwwoorrtthh__wwiitthh__nnooiissee..ppyy
9. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
SSíínntteessee
● MMoodduullaaççããoo
– RRiinngg//aanneell
– AAMM
– FFMM
● SSíínntteessee aaddiittiivvaa
● SSíínntteessee ssuubbttrraattiivvaa
● FFoorrmmaass ddee oonnddaa
– SSeennooiiddeess
– SSaawwttooootthh
– TTaabbllee llooookkuupp
keyboard.py:
GGGSUGSUG
LLLPUTSUG
● RRuuííddoo
– BBrraannccoo//uunniiffoorrmmee
– GGaauussssiiaannoo
● EExxeemmppllooss
– FFMM:: mmccffmm..ppyy
– SSuubbttrraattiivvaa:: ffoorrmmaannttss..ppyy
– AAddiittiivvaa ccoomm sseennooiiddeess::
sshheeppaarrdd..ppyy
10. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
EEnnvvoollttóórriiaa eessppeeccttrraall
FFoorrmmaanntteess
MMooddeelloo ffoonnttee--ffiillttrroo
ppaarraa aa vvoozz
LLPPCC ((LLiinneeaarr
PPrreeddiiccttiivvee CCooddiinngg))
CCllaassssiiffiiccaaççããoo ddee
vvooggaaiiss
((aannáálliissee ee ssíínntteessee))
llppcc__pplloott..ppyy
ffoorrmmaannttss..ppyy
11. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
AAnnáálliissee
ZZCCRR
– TTaaxxaa ddee ccrruuzzaammeennttoo nnoo
zzeerroo
AAMMDDFF
– AAvveerraaggee MMaaggnniittuuddee
DDiiffffeerreennccee FFuunnccttiioonn
......
ddfftt__ppiittcchh..ppyy
zzccrroossss__ppiittcchh..ppyy
aanniimmaatteedd__pplloott..ppyy
● DDFFTT ((TTrraannssffoorrmmaaddaa DDiissccrreettaa ddee FFoouurriieerr))
– UUssaannddoo ccoomm NNuummppyy//SScciippyy
● FFuunnççõõeess ddee jjaanneellaammeennttoo
– PPrroocceessssaammeennttoo ((SSTTFFTT))
– PPrroojjeettoo ddee ffiillttrrooss
12. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
FFiillttrrooss LLTTII
((LLiinneeaarreess ee iinnvvaarriiaanntteess nnoo tteemmppoo))
““DDiiggiittaall ssiiggnnaall pprroocceessssiinngg iiss mmaaiinnllyy
bbaasseedd oonn lliinneeaarr ttiimmee--iinnvvaarriiaanntt ssyysstteemmss..””
((DDuuttiilllleeuuxx,, DDeemmppwwoollff,, HHoolltteerrss ee ZZööllzzeerr
DDAAFFxx,, sseegguunnddaa eeddiiççããoo,, ccaappííttuulloo 44,, pp.. 110033))
13. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
TTrraannssffoorrmmaaddaa ZZ
● DDeeffiinniiççããoo::
● IInntteerrpprreettaaççããoo::
AAttrraassoo eemm kk
aammoossttrraass!!
In [1]: from audiolazy import z, inf
In [2]: sig = [1, 2, 3, 4, 5, 6, 7]
In [1]: from audiolazy import z, inf
In [2]: sig = [1, 2, 3, 4, 5, 6, 7]
In [3]: (z ** -2)(sig).take(inf)
Out[3]: [0.0, 0.0, 1, 2, 3, 4, 5]
In [4]: (1 - z ** -2)(sig).take(inf)
Out[4]: [1.0, 2.0, 2, 2, 2, 2, 2]
In [3]: (z ** -2)(sig).take(inf)
Out[3]: [0.0, 0.0, 1, 2, 3, 4, 5]
In [4]: (1 - z ** -2)(sig).take(inf)
Out[4]: [1.0, 2.0, 2, 2, 2, 2, 2]
14. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
FFiillttrrooss lliinneeaarreess
● SSíínntteessee ssuubbttrraattiivvaa ((ee..gg.. ppllaayy__bbaacchh__cchhoorraall..ppyy))
● CCoommbb,, rreessssoonnaaddoorr,, ppaassssaa--bbaaiixxaass,, ppaassssaa--aallttaass,, ……
● WWaahh,, kknnoobb gguuiittaarrrraa ((ppaassssaa--bbaaiixxaass RRCC)),, ......
1 2
filt = 1./9. * (4 - z ** -2) / (1 + .8 * z ** -1 + .4 * z ** -2)
filt.zplot().savefig("zeropolo.pdf")
fcomb = comb.fb(25, .95)
fcomb.plot().savefig("plot-comb.pdf")
filt = 1./9. * (4 - z ** -2) / (1 + .8 * z ** -1 + .4 * z ** -2)
filt.zplot().savefig("zeropolo.pdf")
fcomb = comb.fb(25, .95)
fcomb.plot().savefig("plot-comb.pdf")
1
2
15. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
PPrroocceessssaammeennttoo
● DDiissttoorrççããoo
● FFllaannggeerr
● PPhhaasseerr
● WWaahh
● RRoobboottiizzaaççããoo ddee vvoozz
● DDeellaayy
● RReevveerrbb
● ……
Arquivos WAV
ou ao vivo?
STFT!
W = window.hann
robotize = stft(abs, size=1024, hop=441, wnd=w, ola_wnd=w)
W = window.hann
robotize = stft(abs, size=1024, hop=441, wnd=w, ola_wnd=w)
# Hint: usar também before=None
# Hint: usar também before=None
# [...] e no io_wire.py
raw = pr.record(rate=rate)
pr.play(robotize(raw), rate=rate)
# [...] e no io_wire.py
raw = pr.record(rate=rate)
pr.play(robotize(raw), rate=rate)
16. https://github.com/RicardoBoccoliGallego/DigitalPedalBoard
AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
PPeeddaalleeiirraa ffeeiittaa
ccoomm aa
AAuuddiiooLLaazzyy ++
PPyySSeerriiaall ((ccoomm
AArrdduuiinnoo)) ppoorr 44
aalluunnooss ddaa
PPoollii--UUSSPP
17. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
EEmm aannddaammeennttoo......
● llzz22llvv22
– CCrriiaaççããoo ddee pplluuggiinnss LLVV22 uussaannddoo PPyytthhoonn ++ AAuuddiiooLLaazzyy
– AAppeennaass ggeerraaççããoo ddee mmeettaaddaaddooss ((TTuurrttllee)) nnoo mmoommeennttoo
● llzz--pplluuggiinnss--llvv22
– CCoolleettâânneeaa ddee pplluuggiinnss LLVV22 uussaannddoo PPyytthhoonn
– AAppeennaass ““rroobboottiizzee”” nnoo mmoommeennttoo
LV2 é um padrão de plugins em
C/C++ usado por Audacity, Ardour,
pedaleira MOD, etc.
18. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
IImmaaggeennss ffeeiittaass ccoomm aa AAuuddiiooLLaazzyy
++ MMaattPPlloottLLiibb
++ hhiippsstteerrpplloott
19. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
20. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
21. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
22. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
23. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
24. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
25. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
26. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
27. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
28. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
29. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
30. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
AudioLazy + Matplotlib + “hipsterplot”
31. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
32. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
33. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
34. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
35. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
PPoolliinnôômmiiooss
● BBaasseeaaddooss eemm ddiicciioonnáárriioo
In [7]: (x + x ** 2 + x ** -.5)(4)
Out[7]: 20.5
In [7]: (x + x ** 2 + x ** -.5)(4)
Out[7]: 20.5
– MMeemmóórriiaa
– EExxppooeennttee nneeggaattiivvoo ((LLaauurreenntt))
– EExxppooeennttee ffrraacciioonnáárriioo ((ssoommaa ddee ppoottêênncciiaass))
– VVaarriiaanntteess nnoo tteemmppoo
● OObbjjeettoo ““xx””
● IInntteerrppoollaaççããoo
– LLaaggrraannggee
In [9]: lagrange.poly([(0, 0), (1, 1)])
Out[9]: x
In [10]: lagrange.poly([(0, 0), (1, 1), (2, 2)])
Out[10]: x
In [11]: lagrange.poly([(0, 0), (1, 1), (2, 4)])
Out[11]: x^2
In [9]: lagrange.poly([(1, 3), (3, 14), (45, 0)])
Out[9]: -2.89773 + 6.0303 * x - 0.132576 * x^2
In [9]: lagrange.poly([(0, 0), (1, 1)])
Out[9]: x
In [10]: lagrange.poly([(0, 0), (1, 1), (2, 2)])
Out[10]: x
In [11]: lagrange.poly([(0, 0), (1, 1), (2, 4)])
Out[11]: x^2
In [9]: lagrange.poly([(1, 3), (3, 14), (45, 0)])
Out[9]: -2.89773 + 6.0303 * x - 0.132576 * x^2
36. AudioLazy –– DDaanniilloo JJ.. SS.. BBeelllliinnii –– @@ddaanniilloobbeelllliinnii
SSEETTII // UUFFLLAA –– 22001144--1100--2277 –– LLaavvrraass // MMGG
Perguntas ? OObbrriiggaaddoo!!
hhttttppss::////ggiitthhuubb..ccoomm//ddaanniilloobbeelllliinnii//aauuddiioollaazzyy