O documento descreve uma apresentação sobre a biblioteca Python AudioLazy para processamento digital de sinal de áudio. Apresenta os principais recursos da biblioteca como DSP, MIR, síntese de áudio em tempo real, tipos de síntese suportados e exemplos de uso.
(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
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