SlideShare uma empresa Scribd logo
1 de 38
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
AudioLazyAudioLazy
Danilo de Jesus da Silva BelliniDanilo de Jesus da Silva Bellini
(AudioLazy Developer)(AudioLazy Developer)
danilo.bellini [at] gmail.comdanilo.bellini [at] gmail.com
Twitter: @danilobelliniTwitter: @danilobellini
https://pypi.python.org/pypi/audiolazyhttps://pypi.python.org/pypi/audiolazy
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
AudioLazyAudioLazy
●
DSP (DSP (Digital Signal ProcessingDigital Signal Processing) para áudio) para áudio
– AnáliseAnálise
●
MIR (MIR (Music Information RetrievalMusic Information Retrieval))
– SínteseSíntese
– ProcessamentoProcessamento
●
Expressividade de códigoExpressividade de código
– Prototipação, simulaçãoPrototipação, simulação
●
Tempo realTempo real
– Uso em aplicações finaisUso em aplicações finais
Python 2 e 3
Python 2 e 3
c/ o mesmo código!
c/ o mesmo código!
Documentação (Sphinx)
http://pythonhosted.org/audiolazy
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Testes e cobertura de códigoTestes e cobertura de código
--------------- coverage: platform linux2, python 2.7.3-final-0 ----------------
Name Stmts Miss Branch BrPart Cover Missing
------------------------------------------------------------
__init__ 44 1 18 4 92% 72
lazy_analysis 125 3 60 2 97% 211, 259-260
lazy_auditory 60 0 14 0 100%
lazy_compat 42 5 6 1 88% 43, 67-68, 78-79
lazy_core 175 7 80 9 94% 124, 136-138, 346, 471, 478
lazy_filters 521 176 247 115 62% 57, 64, 85, 95, [...]
lazy_io 156 43 58 28 67% 89, 141-157, 161, [...]
lazy_itertools 41 7 20 11 70% 39, 60-61, 66, 108-111
lazy_lpc 128 15 42 7 87% 121, 135-136, [...]
lazy_math 61 1 28 0 99% 133
lazy_midi 54 5 26 3 90% 70, 111, 150, 156, 158
lazy_misc 110 9 62 10 89% 156-157, 194, [...]
lazy_poly 191 2 126 3 98% 396-397
lazy_stream 175 2 76 4 98% 59, 738
lazy_synth 251 32 124 40 81% 278-300, 467, 469, [...]
lazy_text 102 33 70 29 64% 132-147, 205-229, [...]
------------------------------------------------------------
TOTAL 2236 341 1057 266 82%
========================= 2310 passed in 22.36 seconds =========================
--------------- coverage: platform linux2, python 2.7.3-final-0 ----------------
Name Stmts Miss Branch BrPart Cover Missing
------------------------------------------------------------
__init__ 44 1 18 4 92% 72
lazy_analysis 125 3 60 2 97% 211, 259-260
lazy_auditory 60 0 14 0 100%
lazy_compat 42 5 6 1 88% 43, 67-68, 78-79
lazy_core 175 7 80 9 94% 124, 136-138, 346, 471, 478
lazy_filters 521 176 247 115 62% 57, 64, 85, 95, [...]
lazy_io 156 43 58 28 67% 89, 141-157, 161, [...]
lazy_itertools 41 7 20 11 70% 39, 60-61, 66, 108-111
lazy_lpc 128 15 42 7 87% 121, 135-136, [...]
lazy_math 61 1 28 0 99% 133
lazy_midi 54 5 26 3 90% 70, 111, 150, 156, 158
lazy_misc 110 9 62 10 89% 156-157, 194, [...]
lazy_poly 191 2 126 3 98% 396-397
lazy_stream 175 2 76 4 98% 59, 738
lazy_synth 251 32 124 40 81% 278-300, 467, 469, [...]
lazy_text 102 33 70 29 64% 132-147, 205-229, [...]
------------------------------------------------------------
TOTAL 2236 341 1057 266 82%
========================= 2310 passed in 22.36 seconds =========================
Mock
Oráculos
(NumPy, SciPy)
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Talk is cheap.Talk is cheap.
Show me the code.Show me the code.
(Linus Torvalds)(Linus Torvalds)
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
““Hello world”Hello world”
●
Tocar uma senóideTocar uma senóide
– ConsoleConsole
(e.g. IPython)(e.g. IPython)
– ScriptsScripts
●
Gerenciadores de contextoGerenciadores de contexto
from audiolazy 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)
from audiolazy 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)
with AudioIO(True) as player: # Wait threads
player.play(snd, rate=rate)
with AudioIO(True) as player: # Wait threads
player.play(snd, rate=rate)
Multithread!
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Notas/Alturas e MIDI PitchNotas/Alturas e MIDI Pitch
●
Pitch (notas/alturas)Pitch (notas/alturas)
– C, D, E, F, G, A, BC, D, E, F, G, A, B
– Do, Re, Mi, Fa, Sol, La, SiDo, Re, Mi, Fa, Sol, La, Si
●
OitavasOitavas
– Iniciam em dóIniciam em dó
– Ignoram a alteraçãoIgnoram a alteração
●
““Cb4” (dó bemol) é a mesmaCb4” (dó bemol) é a mesma
nota que B3nota que B3
●
MIDI PitchMIDI Pitch
– Define 69 como A4 (láDefine 69 como A4 (lá
central), deslocamento emcentral), deslocamento em
semitonssemitons
●
Funções para realizarFunções para realizar
conversõesconversões
– midi2strmidi2str
– str2midistr2midi
– freq2strfreq2str
– str2freqstr2freq
– midi2freqmidi2freq
– freq2midifreq2midi
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Controle e tipos de sínteseControle e tipos de síntese
●
ControlStreamControlStream
– Property “value”Property “value”
– Permite interatividadePermite interatividade
●
Tempo realTempo real
●
SínteseSíntese
– Aditiva (e.g. classe TableLookup)Aditiva (e.g. classe TableLookup)
– ModulaçãoModulação
●
Ring Modulation (Anel)Ring Modulation (Anel)
– Senóide * SenóideSenóide * Senóide
●
AM (Amplitude)AM (Amplitude)
– Senóide * (1 + Senóide)Senóide * (1 + Senóide)
●
FM (Frequência ou fase)FM (Frequência ou fase)
– Senóide(Senóide)Senóide(Senóide)
– Subtrativa (e.g. modelo de Karplus-Strong)Subtrativa (e.g. modelo de Karplus-Strong)
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 [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]
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
ExemplosExemplos
●
HardwareHardware
– Arduino via PySerialArduino via PySerial
●
Jogos/gamesJogos/games
– Campo minadoCampo minado
●
Síntese em tempo realSíntese em tempo real
●
https://github.com/danilobellini/mmineshttps://github.com/danilobellini/mmines
●
MúsicaMúsica
– Recortes e normalização (geração de arquivos WAV)Recortes e normalização (geração de arquivos WAV)
– Composições, e.g. trilha musical de Klockwork (game)Composições, e.g. trilha musical de Klockwork (game)
Exemplos no repositório!!!
Exemplos no repositório!!!
keyboard.py (com tkinter)
keyboard.py (com tkinter)
mcfm.py (com wxPython)
mcfm.py (com wxPython)
play_bach_choral.py (com music21)
play_bach_choral.py (com music21)
save_and_memoize_synth (wave)
save_and_memoize_synth (wave)
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
““Container” para áudioContainer” para áudio
●
QualquerQualquer iteráveliterável pode ser áudio!pode ser áudio!
●
Tempo realTempo real
– Amostras (dados/elementos) inexistentes...Amostras (dados/elementos) inexistentes...
●
...em tempo de compilação (dados a serem coletados)...em tempo de compilação (dados a serem coletados)
●
...em tempo de execução (dados criados no futuro)...em tempo de execução (dados criados no futuro)
– Suporte a “endless”Suporte a “endless”
– Causal (independe de dados futuros)Causal (independe de dados futuros)
– MinimizarMinimizar laglag (atraso) entre entrada e saída(atraso) entre entrada e saída
Lazy!Lazy!
Derivado da discussão
durante a apresentação,
as aspas indicam que o
objeto não precisa
“conter”, literalmente, os
elementos, assim como
o “conjunto” dos
números naturais não
pode ser construído na
prática (por “conter
infinitos elementos”) e é
definido através de
regras de geração de
números, embora seja
dito que ele “contém”
seus elementos.
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Classe StreamClasse Stream
●
IterávelIterável
●
HeterogêneoHeterogêneo
●
Lazy! (Avaliação tardia)Lazy! (Avaliação tardia)
●
Operadores (Elementwise/broadcast)Operadores (Elementwise/broadcast)
●
Métodos (take, peek, limit, skip, map, filter, blocks)Métodos (take, peek, limit, skip, map, filter, blocks)
In [1]: from audiolazy import Stream, inf
In [2]: dados = Stream(5, 7, 1, 2, 5, 3, 2) # Periódico
In [3]: dados2 = Stream(0, 1) # Idem
In [4]: (dados + dados2).take(15)
Out[4]: [5, 8, 1, 3, 5, 4, 2, 6, 7, 2, 2, 6, 3, 3, 5]
In [5]: (_ * Stream(1 + 2j, -3j, 7).imag).map(int).take(inf)
Out[5]: [2.0, 0.0, 14]
In [1]: from audiolazy import Stream, inf
In [2]: dados = Stream(5, 7, 1, 2, 5, 3, 2) # Periódico
In [3]: dados2 = Stream(0, 1) # Idem
In [4]: (dados + dados2).take(15)
Out[4]: [5, 8, 1, 3, 5, 4, 2, 6, 7, 2, 2, 6, 3, 3, 5]
In [5]: (_ * Stream(1 + 2j, -3j, 7).imag).map(int).take(inf)
Out[5]: [2.0, 0.0, 14]
In [1]: data = Stream(range(7))
In [2]: blks = data.blocks(size=3, hop=2)
In [3]: [list(blk) for blk in blks]
Out[3]: [[0, 1, 2], [2, 3, 4], [4, 5, 6]]
In [1]: data = Stream(range(7))
In [2]: blks = data.blocks(size=3, hop=2)
In [3]: [list(blk) for blk in blks]
Out[3]: [[0, 1, 2], [2, 3, 4], [4, 5, 6]]
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Efeito “wah”, knob guitarra, transiçõesEfeito “wah”, knob guitarra, transições
Filtros digitais e a Transformada ZFiltros digitais e a Transformada Z
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Filtros LTIFiltros LTI
(Lineares e invariantes no tempo)(Lineares e invariantes no tempo)
““Digital signal processing is mainlyDigital signal processing is mainly
based on linear time-invariantbased on linear time-invariant
systems.systems.””
(Dutilleux, Dempwolf, Holters e Zölzer(Dutilleux, Dempwolf, Holters e Zölzer
DAFx, segunda edição, capítulo 4, p. 103)DAFx, segunda edição, capítulo 4, p. 103)
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Transformada ZTransformada Z
●
Definição:Definição:
●
Interpretação:Interpretação:
AtrasoAtraso em kem k
amostras!amostras!
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 [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]
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Plot (AudioLazy + MatPlotLib)!Plot (AudioLazy + MatPlotLib)!
●
DTFT - Caso particular da transformada ZDTFT - Caso particular da transformada Z
– O valor de z está na circunferência complexa unitáriaO valor de z está na circunferência complexa unitária
●
Método plot dos filtrosMétodo plot dos filtros
– Resposta em frequênciaResposta em frequência
●
Método zplotMétodo zplot
– Estabilidade do filtroEstabilidade do filtro
– Pólos: “X”Pólos: “X”
●
Raízes do denominadorRaízes do denominador
– Zeros: “O”Zeros: “O”
●
Raízes do numeradorRaízes do numerador
X
X
gammatone_plots.py
gammatone_plots.pytambém tem
também temresposta ao impulso
resposta ao impulso
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Filtros prontos!Filtros prontos!●
AudioLazyAudioLazy
– Média móvelMédia móvel
– RessonadoresRessonadores
– CombComb
– Passa-baixasPassa-baixas
– Passa-altasPassa-altas
– Gammatone (Patterson-Holdsworth, audição)Gammatone (Patterson-Holdsworth, audição)
●
Scipy.signalScipy.signal
– ButterworthButterworth
– ChebyshevChebyshev
– ElípticoElíptico
Filtros variantes no tempo!
Coeficientes (fatores “a” em
parcelas “a * z ** -k”) podem ser
objetos Stream)e.g. lptv.py
JIT!
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
FibonacciFibonacci
●
h[0] = 0h[0] = 0
●
h[1] = 1h[1] = 1
●
h[n] = h[n-1] + h[n-2]h[n] = h[n-1] + h[n-2]
– Entrada [0, 1, 0, 0, 0, 0, ...] aplicado a esse filtro digitalEntrada [0, 1, 0, 0, 0, 0, ...] aplicado a esse filtro digital
●
Função impulse()Função impulse()
In [2]: (z ** -1 / (1 - z ** -1 - z ** -2))(impulse(zero=0,
...: one=1), zero=0).take(17)
Out[2]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
In [2]: (z ** -1 / (1 - z ** -1 - z ** -2))(impulse(zero=0,
...: one=1), zero=0).take(17)
Out[2]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
h[n]=h[n−1]+h[ n−2]+δ[ n−1]
E o exemplo
E o exemplo
pi.py?pi.py?
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Pitch – ShepardPitch – Shepard
●
Exemplo no GitHubExemplo no GitHub
●
2 dimensões:2 dimensões:
– Altura (Altura (pitch heightpitch height))
●
Dimensão “linear”Dimensão “linear”
– Croma (Croma (pitch chromapitch chroma))
●
Dimensão “circular”Dimensão “circular”
●
Lembra EscherLembra Escher
●
““Hélice”Hélice”
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Série harmônicaSérie harmônica
●
F0, 2F0, 3F0, 4F0 …F0, 2F0, 3F0, 4F0 …
– 100 Hz, 200 Hz, 300 Hz...100 Hz, 200 Hz, 300 Hz...
Comb!
freqs = [str2freq(note) for note in "E2 G#2 B2".split()] # Mi maior
filt = ParallelFilter(comb.tau(freq_to_lag(freq * Hz), .1 * s)
for freq in freqs)
filt.plot(samples=8192, rate=rate, min_freq=220*Hz, max_freq=880*Hz).show()
freqs = [str2freq(note) for note in "E2 G#2 B2".split()] # Mi maior
filt = ParallelFilter(comb.tau(freq_to_lag(freq * Hz), .1 * s)
for freq in freqs)
filt.plot(samples=8192, rate=rate, min_freq=220*Hz, max_freq=880*Hz).show()
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Coletando a alturaColetando a altura
●
ZCR (Taxa de cruzamento no zero)ZCR (Taxa de cruzamento no zero)
●
DFT (Transformada Discreta de Fourier)DFT (Transformada Discreta de Fourier)
●
AMDF (Average Magnitude Difference Function)AMDF (Average Magnitude Difference Function)
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Envoltória espectral comEnvoltória espectral com
LPC (Linear Predictive Coding)LPC (Linear Predictive Coding)
FormantesFormantes
Pode ser utilizadoPode ser utilizado
para classificação depara classificação de
vogaisvogais
(análise e síntese)(análise e síntese)
e.g.e.g.
lpc_plot.pylpc_plot.py
formants.pyformants.py
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
PolinômiosPolinômios
●
Baseados em dicionárioBaseados em dicionário
– MemóriaMemória
– Expoente negativo (Laurent)Expoente negativo (Laurent)
– Expoente fracionário (soma de potências)Expoente fracionário (soma de potências)
●
Objeto “x”Objeto “x”
●
InterpolaçãoInterpolação
– LagrangeLagrange
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
In [7]: (x + x ** 2 + x ** -.5)(4)
Out[7]: 20.5
In [7]: (x + x ** 2 + x ** -.5)(4)
Out[7]: 20.5
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Imagens feitas com a AudioLazyImagens feitas com a AudioLazy
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
É possível... ?É possível... ?
●
Em tempo real...Em tempo real...
– Distorção ?Distorção ?
– Delay ?Delay ?
– Flanger ?Flanger ?
– Phaser ?Phaser ?
– Compressor/limiter ?Compressor/limiter ?
Vejamos...Vejamos...
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013 – PSI22222013 – PSI2222
Orientações at Poli-USPOrientações at Poli-USP
●
Pedaleira (4 alunos)Pedaleira (4 alunos)
– https://github.com/RicardoBoccoliGallego/DigitalPedalBoardhttps://github.com/RicardoBoccoliGallego/DigitalPedalBoard
– PySerialPySerial
●
Hardware controlador em ArduinoHardware controlador em Arduino
●
2 botões + pedal expressão2 botões + pedal expressão
– AudioLazyAudioLazy
●
Distorção, flanger, filtros, …Distorção, flanger, filtros, …
– wxPythonwxPython
– MatPlotLibMatPlotLib
●
Gráfico da envoltória dinâmica (envelope) atualizado em tempo realGráfico da envoltória dinâmica (envelope) atualizado em tempo real
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
2013 – PSI22222013 – PSI2222
Orientações at Poli-USPOrientações at Poli-USP
●
Sintetizador (outros 4 alunos) [inacabado]Sintetizador (outros 4 alunos) [inacabado]
– https://github.com/elisatengan/Synthesishttps://github.com/elisatengan/Synthesis
– PyGamePyGame
●
I/O MIDII/O MIDI
– AudioLazyAudioLazy
●
Modelo de Karplus-Strong modificadoModelo de Karplus-Strong modificado
●
LPC: Filtros de síntese/análiseLPC: Filtros de síntese/análise
– PyQt4PyQt4
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Apenas visual, esta GUI está inacabadaApenas visual, esta GUI está inacabada
2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube
São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
Obrigado!Obrigado!
Perguntas?Perguntas?
Fork me on GitHubFork me on GitHub
https://github.com/danilobellini/audiolazyhttps://github.com/danilobellini/audiolazy

Mais conteúdo relacionado

Destaque

บทที่ 2 html introduction
บทที่ 2 html introductionบทที่ 2 html introduction
บทที่ 2 html introductionNattipong Siangyen
 
บทที่ 1 ทำความรู้จักเว็บเพจ
บทที่ 1 ทำความรู้จักเว็บเพจบทที่ 1 ทำความรู้จักเว็บเพจ
บทที่ 1 ทำความรู้จักเว็บเพจNattipong Siangyen
 
Archer South Africa - benefits of mms overview 2012
Archer South Africa - benefits of mms overview 2012Archer South Africa - benefits of mms overview 2012
Archer South Africa - benefits of mms overview 2012Johann Venter
 
List of prior actions version of 26 june 20 00
List of prior actions   version of 26 june 20 00List of prior actions   version of 26 june 20 00
List of prior actions version of 26 june 20 00Emmanuel de La Houssaye
 
Ppt story board
Ppt story boardPpt story board
Ppt story boardhestiko
 
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3Danilo J. S. Bellini
 

Destaque (11)

บทที่ 2 html introduction
บทที่ 2 html introductionบทที่ 2 html introduction
บทที่ 2 html introduction
 
บทที่ 1 ทำความรู้จักเว็บเพจ
บทที่ 1 ทำความรู้จักเว็บเพจบทที่ 1 ทำความรู้จักเว็บเพจ
บทที่ 1 ทำความรู้จักเว็บเพจ
 
Archer South Africa - benefits of mms overview 2012
Archer South Africa - benefits of mms overview 2012Archer South Africa - benefits of mms overview 2012
Archer South Africa - benefits of mms overview 2012
 
List of prior actions version of 26 june 20 00
List of prior actions   version of 26 june 20 00List of prior actions   version of 26 june 20 00
List of prior actions version of 26 june 20 00
 
Abu
AbuAbu
Abu
 
Flameproof Vacuum Switch series FC
Flameproof Vacuum Switch series FCFlameproof Vacuum Switch series FC
Flameproof Vacuum Switch series FC
 
Ppt story board
Ppt story boardPpt story board
Ppt story board
 
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
 
Hizb 35
Hizb 35Hizb 35
Hizb 35
 
南一 數學-1下
南一 數學-1下南一 數學-1下
南一 數學-1下
 
Vacuum Switch MD Series
Vacuum Switch MD SeriesVacuum Switch MD Series
Vacuum Switch MD Series
 

Semelhante a (2013-12-18) [Garoa HC] AudioLazy

(2013-10-16) [LatinoWare] Processamento de sinais em Python
(2013-10-16) [LatinoWare] Processamento de sinais em Python(2013-10-16) [LatinoWare] Processamento de sinais em Python
(2013-10-16) [LatinoWare] Processamento de sinais em PythonDanilo J. S. Bellini
 
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazyDanilo J. S. Bellini
 
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)Danilo J. S. Bellini
 
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...Danilo J. S. Bellini
 
(2017-07-22) [TDC] Audiolazy em 2017!
(2017-07-22) [TDC] Audiolazy em 2017!(2017-07-22) [TDC] Audiolazy em 2017!
(2017-07-22) [TDC] Audiolazy em 2017!Danilo J. S. Bellini
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
 

Semelhante a (2013-12-18) [Garoa HC] AudioLazy (7)

(2013-10-16) [LatinoWare] Processamento de sinais em Python
(2013-10-16) [LatinoWare] Processamento de sinais em Python(2013-10-16) [LatinoWare] Processamento de sinais em Python
(2013-10-16) [LatinoWare] Processamento de sinais em Python
 
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
 
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
 
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
 
(2017-07-22) [TDC] Audiolazy em 2017!
(2017-07-22) [TDC] Audiolazy em 2017!(2017-07-22) [TDC] Audiolazy em 2017!
(2017-07-22) [TDC] Audiolazy em 2017!
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 
(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides
 

Mais de Danilo J. S. Bellini

(2018-10-18) [ETEC Uirapuru] Segurança da Informação
(2018-10-18) [ETEC Uirapuru] Segurança da Informação(2018-10-18) [ETEC Uirapuru] Segurança da Informação
(2018-10-18) [ETEC Uirapuru] Segurança da InformaçãoDanilo J. S. Bellini
 
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask AssíncronoDanilo J. S. Bellini
 
(2018-07-14) [Just Python] Números no Python!
(2018-07-14) [Just Python] Números no Python!(2018-07-14) [Just Python] Números no Python!
(2018-07-14) [Just Python] Números no Python!Danilo J. S. Bellini
 
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)Danilo J. S. Bellini
 
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0Danilo J. S. Bellini
 
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?Danilo J. S. Bellini
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)Danilo J. S. Bellini
 
(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e toxDanilo J. S. Bellini
 
(2014-10-27) [SETI-UFLA-MG] AudioLazy
(2014-10-27) [SETI-UFLA-MG] AudioLazy(2014-10-27) [SETI-UFLA-MG] AudioLazy
(2014-10-27) [SETI-UFLA-MG] AudioLazyDanilo J. S. Bellini
 
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!Danilo J. S. Bellini
 
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...Danilo J. S. Bellini
 
(2013-10-17) [LatinoWare] Automatizando o GIMP com Python
(2013-10-17) [LatinoWare] Automatizando o GIMP com Python(2013-10-17) [LatinoWare] Automatizando o GIMP com Python
(2013-10-17) [LatinoWare] Automatizando o GIMP com PythonDanilo J. S. Bellini
 
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3Danilo J. S. Bellini
 
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojosDanilo J. S. Bellini
 

Mais de Danilo J. S. Bellini (16)

(2018-10-18) [ETEC Uirapuru] Segurança da Informação
(2018-10-18) [ETEC Uirapuru] Segurança da Informação(2018-10-18) [ETEC Uirapuru] Segurança da Informação
(2018-10-18) [ETEC Uirapuru] Segurança da Informação
 
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
 
(2018-07-14) [Just Python] Números no Python!
(2018-07-14) [Just Python] Números no Python!(2018-07-14) [Just Python] Números no Python!
(2018-07-14) [Just Python] Números no Python!
 
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
 
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
 
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
 
(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox
 
(2014-10-27) [SETI-UFLA-MG] AudioLazy
(2014-10-27) [SETI-UFLA-MG] AudioLazy(2014-10-27) [SETI-UFLA-MG] AudioLazy
(2014-10-27) [SETI-UFLA-MG] AudioLazy
 
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
 
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
 
(2014-04-16) [Garoa HC] Strategy
(2014-04-16) [Garoa HC] Strategy(2014-04-16) [Garoa HC] Strategy
(2014-04-16) [Garoa HC] Strategy
 
(2014-03-26) [7masters] AudioLazy
(2014-03-26) [7masters] AudioLazy(2014-03-26) [7masters] AudioLazy
(2014-03-26) [7masters] AudioLazy
 
(2013-10-17) [LatinoWare] Automatizando o GIMP com Python
(2013-10-17) [LatinoWare] Automatizando o GIMP com Python(2013-10-17) [LatinoWare] Automatizando o GIMP com Python
(2013-10-17) [LatinoWare] Automatizando o GIMP com Python
 
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
 
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
 

(2013-12-18) [Garoa HC] AudioLazy

  • 1. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini AudioLazyAudioLazy Danilo de Jesus da Silva BelliniDanilo de Jesus da Silva Bellini (AudioLazy Developer)(AudioLazy Developer) danilo.bellini [at] gmail.comdanilo.bellini [at] gmail.com Twitter: @danilobelliniTwitter: @danilobellini https://pypi.python.org/pypi/audiolazyhttps://pypi.python.org/pypi/audiolazy
  • 2. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini AudioLazyAudioLazy ● DSP (DSP (Digital Signal ProcessingDigital Signal Processing) para áudio) para áudio – AnáliseAnálise ● MIR (MIR (Music Information RetrievalMusic Information Retrieval)) – SínteseSíntese – ProcessamentoProcessamento ● Expressividade de códigoExpressividade de código – Prototipação, simulaçãoPrototipação, simulação ● Tempo realTempo real – Uso em aplicações finaisUso em aplicações finais Python 2 e 3 Python 2 e 3 c/ o mesmo código! c/ o mesmo código! Documentação (Sphinx) http://pythonhosted.org/audiolazy
  • 3. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Testes e cobertura de códigoTestes e cobertura de código --------------- coverage: platform linux2, python 2.7.3-final-0 ---------------- Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------ __init__ 44 1 18 4 92% 72 lazy_analysis 125 3 60 2 97% 211, 259-260 lazy_auditory 60 0 14 0 100% lazy_compat 42 5 6 1 88% 43, 67-68, 78-79 lazy_core 175 7 80 9 94% 124, 136-138, 346, 471, 478 lazy_filters 521 176 247 115 62% 57, 64, 85, 95, [...] lazy_io 156 43 58 28 67% 89, 141-157, 161, [...] lazy_itertools 41 7 20 11 70% 39, 60-61, 66, 108-111 lazy_lpc 128 15 42 7 87% 121, 135-136, [...] lazy_math 61 1 28 0 99% 133 lazy_midi 54 5 26 3 90% 70, 111, 150, 156, 158 lazy_misc 110 9 62 10 89% 156-157, 194, [...] lazy_poly 191 2 126 3 98% 396-397 lazy_stream 175 2 76 4 98% 59, 738 lazy_synth 251 32 124 40 81% 278-300, 467, 469, [...] lazy_text 102 33 70 29 64% 132-147, 205-229, [...] ------------------------------------------------------------ TOTAL 2236 341 1057 266 82% ========================= 2310 passed in 22.36 seconds ========================= --------------- coverage: platform linux2, python 2.7.3-final-0 ---------------- Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------ __init__ 44 1 18 4 92% 72 lazy_analysis 125 3 60 2 97% 211, 259-260 lazy_auditory 60 0 14 0 100% lazy_compat 42 5 6 1 88% 43, 67-68, 78-79 lazy_core 175 7 80 9 94% 124, 136-138, 346, 471, 478 lazy_filters 521 176 247 115 62% 57, 64, 85, 95, [...] lazy_io 156 43 58 28 67% 89, 141-157, 161, [...] lazy_itertools 41 7 20 11 70% 39, 60-61, 66, 108-111 lazy_lpc 128 15 42 7 87% 121, 135-136, [...] lazy_math 61 1 28 0 99% 133 lazy_midi 54 5 26 3 90% 70, 111, 150, 156, 158 lazy_misc 110 9 62 10 89% 156-157, 194, [...] lazy_poly 191 2 126 3 98% 396-397 lazy_stream 175 2 76 4 98% 59, 738 lazy_synth 251 32 124 40 81% 278-300, 467, 469, [...] lazy_text 102 33 70 29 64% 132-147, 205-229, [...] ------------------------------------------------------------ TOTAL 2236 341 1057 266 82% ========================= 2310 passed in 22.36 seconds ========================= Mock Oráculos (NumPy, SciPy)
  • 4. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Talk is cheap.Talk is cheap. Show me the code.Show me the code. (Linus Torvalds)(Linus Torvalds)
  • 5. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini ““Hello world”Hello world” ● Tocar uma senóideTocar uma senóide – ConsoleConsole (e.g. IPython)(e.g. IPython) – ScriptsScripts ● Gerenciadores de contextoGerenciadores de contexto from audiolazy 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) from audiolazy 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) with AudioIO(True) as player: # Wait threads player.play(snd, rate=rate) with AudioIO(True) as player: # Wait threads player.play(snd, rate=rate) Multithread!
  • 6. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Notas/Alturas e MIDI PitchNotas/Alturas e MIDI Pitch ● Pitch (notas/alturas)Pitch (notas/alturas) – C, D, E, F, G, A, BC, D, E, F, G, A, B – Do, Re, Mi, Fa, Sol, La, SiDo, Re, Mi, Fa, Sol, La, Si ● OitavasOitavas – Iniciam em dóIniciam em dó – Ignoram a alteraçãoIgnoram a alteração ● ““Cb4” (dó bemol) é a mesmaCb4” (dó bemol) é a mesma nota que B3nota que B3 ● MIDI PitchMIDI Pitch – Define 69 como A4 (láDefine 69 como A4 (lá central), deslocamento emcentral), deslocamento em semitonssemitons ● Funções para realizarFunções para realizar conversõesconversões – midi2strmidi2str – str2midistr2midi – freq2strfreq2str – str2freqstr2freq – midi2freqmidi2freq – freq2midifreq2midi
  • 7. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Controle e tipos de sínteseControle e tipos de síntese ● ControlStreamControlStream – Property “value”Property “value” – Permite interatividadePermite interatividade ● Tempo realTempo real ● SínteseSíntese – Aditiva (e.g. classe TableLookup)Aditiva (e.g. classe TableLookup) – ModulaçãoModulação ● Ring Modulation (Anel)Ring Modulation (Anel) – Senóide * SenóideSenóide * Senóide ● AM (Amplitude)AM (Amplitude) – Senóide * (1 + Senóide)Senóide * (1 + Senóide) ● FM (Frequência ou fase)FM (Frequência ou fase) – Senóide(Senóide)Senóide(Senóide) – Subtrativa (e.g. modelo de Karplus-Strong)Subtrativa (e.g. modelo de Karplus-Strong) 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 [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]
  • 8. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini ExemplosExemplos ● HardwareHardware – Arduino via PySerialArduino via PySerial ● Jogos/gamesJogos/games – Campo minadoCampo minado ● Síntese em tempo realSíntese em tempo real ● https://github.com/danilobellini/mmineshttps://github.com/danilobellini/mmines ● MúsicaMúsica – Recortes e normalização (geração de arquivos WAV)Recortes e normalização (geração de arquivos WAV) – Composições, e.g. trilha musical de Klockwork (game)Composições, e.g. trilha musical de Klockwork (game) Exemplos no repositório!!! Exemplos no repositório!!! keyboard.py (com tkinter) keyboard.py (com tkinter) mcfm.py (com wxPython) mcfm.py (com wxPython) play_bach_choral.py (com music21) play_bach_choral.py (com music21) save_and_memoize_synth (wave) save_and_memoize_synth (wave)
  • 9. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini ““Container” para áudioContainer” para áudio ● QualquerQualquer iteráveliterável pode ser áudio!pode ser áudio! ● Tempo realTempo real – Amostras (dados/elementos) inexistentes...Amostras (dados/elementos) inexistentes... ● ...em tempo de compilação (dados a serem coletados)...em tempo de compilação (dados a serem coletados) ● ...em tempo de execução (dados criados no futuro)...em tempo de execução (dados criados no futuro) – Suporte a “endless”Suporte a “endless” – Causal (independe de dados futuros)Causal (independe de dados futuros) – MinimizarMinimizar laglag (atraso) entre entrada e saída(atraso) entre entrada e saída Lazy!Lazy! Derivado da discussão durante a apresentação, as aspas indicam que o objeto não precisa “conter”, literalmente, os elementos, assim como o “conjunto” dos números naturais não pode ser construído na prática (por “conter infinitos elementos”) e é definido através de regras de geração de números, embora seja dito que ele “contém” seus elementos.
  • 10. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Classe StreamClasse Stream ● IterávelIterável ● HeterogêneoHeterogêneo ● Lazy! (Avaliação tardia)Lazy! (Avaliação tardia) ● Operadores (Elementwise/broadcast)Operadores (Elementwise/broadcast) ● Métodos (take, peek, limit, skip, map, filter, blocks)Métodos (take, peek, limit, skip, map, filter, blocks) In [1]: from audiolazy import Stream, inf In [2]: dados = Stream(5, 7, 1, 2, 5, 3, 2) # Periódico In [3]: dados2 = Stream(0, 1) # Idem In [4]: (dados + dados2).take(15) Out[4]: [5, 8, 1, 3, 5, 4, 2, 6, 7, 2, 2, 6, 3, 3, 5] In [5]: (_ * Stream(1 + 2j, -3j, 7).imag).map(int).take(inf) Out[5]: [2.0, 0.0, 14] In [1]: from audiolazy import Stream, inf In [2]: dados = Stream(5, 7, 1, 2, 5, 3, 2) # Periódico In [3]: dados2 = Stream(0, 1) # Idem In [4]: (dados + dados2).take(15) Out[4]: [5, 8, 1, 3, 5, 4, 2, 6, 7, 2, 2, 6, 3, 3, 5] In [5]: (_ * Stream(1 + 2j, -3j, 7).imag).map(int).take(inf) Out[5]: [2.0, 0.0, 14] In [1]: data = Stream(range(7)) In [2]: blks = data.blocks(size=3, hop=2) In [3]: [list(blk) for blk in blks] Out[3]: [[0, 1, 2], [2, 3, 4], [4, 5, 6]] In [1]: data = Stream(range(7)) In [2]: blks = data.blocks(size=3, hop=2) In [3]: [list(blk) for blk in blks] Out[3]: [[0, 1, 2], [2, 3, 4], [4, 5, 6]]
  • 11. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Efeito “wah”, knob guitarra, transiçõesEfeito “wah”, knob guitarra, transições Filtros digitais e a Transformada ZFiltros digitais e a Transformada Z
  • 12. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Filtros LTIFiltros LTI (Lineares e invariantes no tempo)(Lineares e invariantes no tempo) ““Digital signal processing is mainlyDigital signal processing is mainly based on linear time-invariantbased on linear time-invariant systems.systems.”” (Dutilleux, Dempwolf, Holters e Zölzer(Dutilleux, Dempwolf, Holters e Zölzer DAFx, segunda edição, capítulo 4, p. 103)DAFx, segunda edição, capítulo 4, p. 103)
  • 13. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Transformada ZTransformada Z ● Definição:Definição: ● Interpretação:Interpretação: AtrasoAtraso em kem k amostras!amostras! 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 [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]
  • 14. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Plot (AudioLazy + MatPlotLib)!Plot (AudioLazy + MatPlotLib)! ● DTFT - Caso particular da transformada ZDTFT - Caso particular da transformada Z – O valor de z está na circunferência complexa unitáriaO valor de z está na circunferência complexa unitária ● Método plot dos filtrosMétodo plot dos filtros – Resposta em frequênciaResposta em frequência ● Método zplotMétodo zplot – Estabilidade do filtroEstabilidade do filtro – Pólos: “X”Pólos: “X” ● Raízes do denominadorRaízes do denominador – Zeros: “O”Zeros: “O” ● Raízes do numeradorRaízes do numerador X X gammatone_plots.py gammatone_plots.pytambém tem também temresposta ao impulso resposta ao impulso
  • 15. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Filtros prontos!Filtros prontos!● AudioLazyAudioLazy – Média móvelMédia móvel – RessonadoresRessonadores – CombComb – Passa-baixasPassa-baixas – Passa-altasPassa-altas – Gammatone (Patterson-Holdsworth, audição)Gammatone (Patterson-Holdsworth, audição) ● Scipy.signalScipy.signal – ButterworthButterworth – ChebyshevChebyshev – ElípticoElíptico Filtros variantes no tempo! Coeficientes (fatores “a” em parcelas “a * z ** -k”) podem ser objetos Stream)e.g. lptv.py JIT!
  • 16. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini FibonacciFibonacci ● h[0] = 0h[0] = 0 ● h[1] = 1h[1] = 1 ● h[n] = h[n-1] + h[n-2]h[n] = h[n-1] + h[n-2] – Entrada [0, 1, 0, 0, 0, 0, ...] aplicado a esse filtro digitalEntrada [0, 1, 0, 0, 0, 0, ...] aplicado a esse filtro digital ● Função impulse()Função impulse() In [2]: (z ** -1 / (1 - z ** -1 - z ** -2))(impulse(zero=0, ...: one=1), zero=0).take(17) Out[2]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987] In [2]: (z ** -1 / (1 - z ** -1 - z ** -2))(impulse(zero=0, ...: one=1), zero=0).take(17) Out[2]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987] h[n]=h[n−1]+h[ n−2]+δ[ n−1] E o exemplo E o exemplo pi.py?pi.py?
  • 17. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Pitch – ShepardPitch – Shepard ● Exemplo no GitHubExemplo no GitHub ● 2 dimensões:2 dimensões: – Altura (Altura (pitch heightpitch height)) ● Dimensão “linear”Dimensão “linear” – Croma (Croma (pitch chromapitch chroma)) ● Dimensão “circular”Dimensão “circular” ● Lembra EscherLembra Escher ● ““Hélice”Hélice”
  • 18. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Série harmônicaSérie harmônica ● F0, 2F0, 3F0, 4F0 …F0, 2F0, 3F0, 4F0 … – 100 Hz, 200 Hz, 300 Hz...100 Hz, 200 Hz, 300 Hz... Comb! freqs = [str2freq(note) for note in "E2 G#2 B2".split()] # Mi maior filt = ParallelFilter(comb.tau(freq_to_lag(freq * Hz), .1 * s) for freq in freqs) filt.plot(samples=8192, rate=rate, min_freq=220*Hz, max_freq=880*Hz).show() freqs = [str2freq(note) for note in "E2 G#2 B2".split()] # Mi maior filt = ParallelFilter(comb.tau(freq_to_lag(freq * Hz), .1 * s) for freq in freqs) filt.plot(samples=8192, rate=rate, min_freq=220*Hz, max_freq=880*Hz).show()
  • 19. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Coletando a alturaColetando a altura ● ZCR (Taxa de cruzamento no zero)ZCR (Taxa de cruzamento no zero) ● DFT (Transformada Discreta de Fourier)DFT (Transformada Discreta de Fourier) ● AMDF (Average Magnitude Difference Function)AMDF (Average Magnitude Difference Function)
  • 20. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Envoltória espectral comEnvoltória espectral com LPC (Linear Predictive Coding)LPC (Linear Predictive Coding) FormantesFormantes Pode ser utilizadoPode ser utilizado para classificação depara classificação de vogaisvogais (análise e síntese)(análise e síntese) e.g.e.g. lpc_plot.pylpc_plot.py formants.pyformants.py
  • 21. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini PolinômiosPolinômios ● Baseados em dicionárioBaseados em dicionário – MemóriaMemória – Expoente negativo (Laurent)Expoente negativo (Laurent) – Expoente fracionário (soma de potências)Expoente fracionário (soma de potências) ● Objeto “x”Objeto “x” ● InterpolaçãoInterpolação – LagrangeLagrange 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 In [7]: (x + x ** 2 + x ** -.5)(4) Out[7]: 20.5 In [7]: (x + x ** 2 + x ** -.5)(4) Out[7]: 20.5
  • 22. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Imagens feitas com a AudioLazyImagens feitas com a AudioLazy
  • 23. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 24. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 25. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 26. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 27. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 28. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 29. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 30. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 31. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini É possível... ?É possível... ? ● Em tempo real...Em tempo real... – Distorção ?Distorção ? – Delay ?Delay ? – Flanger ?Flanger ? – Phaser ?Phaser ? – Compressor/limiter ?Compressor/limiter ? Vejamos...Vejamos...
  • 32. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini 2013 – PSI22222013 – PSI2222 Orientações at Poli-USPOrientações at Poli-USP ● Pedaleira (4 alunos)Pedaleira (4 alunos) – https://github.com/RicardoBoccoliGallego/DigitalPedalBoardhttps://github.com/RicardoBoccoliGallego/DigitalPedalBoard – PySerialPySerial ● Hardware controlador em ArduinoHardware controlador em Arduino ● 2 botões + pedal expressão2 botões + pedal expressão – AudioLazyAudioLazy ● Distorção, flanger, filtros, …Distorção, flanger, filtros, … – wxPythonwxPython – MatPlotLibMatPlotLib ● Gráfico da envoltória dinâmica (envelope) atualizado em tempo realGráfico da envoltória dinâmica (envelope) atualizado em tempo real
  • 33. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 34. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 35. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini
  • 36. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini 2013 – PSI22222013 – PSI2222 Orientações at Poli-USPOrientações at Poli-USP ● Sintetizador (outros 4 alunos) [inacabado]Sintetizador (outros 4 alunos) [inacabado] – https://github.com/elisatengan/Synthesishttps://github.com/elisatengan/Synthesis – PyGamePyGame ● I/O MIDII/O MIDI – AudioLazyAudioLazy ● Modelo de Karplus-Strong modificadoModelo de Karplus-Strong modificado ● LPC: Filtros de síntese/análiseLPC: Filtros de síntese/análise – PyQt4PyQt4
  • 37. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Apenas visual, esta GUI está inacabadaApenas visual, esta GUI está inacabada
  • 38. 2013-12-18 – AudioLazy no Garoa Hacker Clube2013-12-18 – AudioLazy no Garoa Hacker Clube São Paulo – SP – Danilo J. S. Bellini – @danilobelliniSão Paulo – SP – Danilo J. S. Bellini – @danilobellini Obrigado!Obrigado! Perguntas?Perguntas? Fork me on GitHubFork me on GitHub https://github.com/danilobellini/audiolazyhttps://github.com/danilobellini/audiolazy