MAC 337/5900 - Computação Musical
Aula 15 - 2/10/7
Capítulo 3: Computações em áudio e controle
Controle
- Assim como no CSound, temos a taxa de áudio e a taxa de controle.
- Note que há umas sutilezas quando falamos de tempo em computação musical:
- tempo real é o tempo no qual o som é tocado
- tempo lógico é o tempo no qual o som é calculado
- o computador calcula o som em blocos de tamanho variável (normalmente 256 a 1024 amostras)
- e joga para a placa de som 1 ou mais blocos de uma vez.
- A Fig. 3.2 mostra a relação entre tempo
lógico e tempo real e os instantes nos quais controle é
computado e áudio é computado.
- a) bloco de 1 amostra
- b) bloco de 4 amostras
- (no mundo real, os blocos contém muito mais amostras)
- O custo de chamar um objeto em Pd é aprox. 20 vezes maior do que o custo de gerar uma amostra.
- Se o Pd chamasse o objeto a cada amostra, a sobrecarga das chamadas seria 2.000%.
- O Pd usa então blocos de 64 amostras, o que leva a sobrecarga a 30% aproximadamente apenas.
Fluxos de Controle
- Dados de controle podem vir de fontes
- internas: por exemplo,
seqüenciamento de comandos ou detecções de
características do áudio (por exemplo, acompanhando os
cruzamentos do 0 num sinal de áudio).
- externas: controladores MIDI, mouse, teclado, sensores, conexão de rede, etc.
- Em ambos os casos, as mensagens de controle em geral vem em
intervalos irregulares, ao contrário do áudio que vem a
taxas e períodos constantes.
- Fluxos de controle podem ser representados por uma
seqüência de pares <t, v> onde t é o instante
onde a mensagem de controle ocorre e v o valor da mensagem.
- Por exemplo, considere a seguinte onda quadrada de controle: (2, 1), (4.75, 0), (7.5, 1), (10.25, 0), (13, 1),...
- A Fig 3.4 mostra 3 formas de implementar este fluxo de controle:
- mais simples: usa no áudio, a última informação de controle disponível.
- intermediária: aplica na amostra mais próxima.
- melhor: usa interpolação linear (com dois pontos).
- Muitas vezes, informação de controle são
convertidas para sua aplicação no áudio
através de funções rampa para eliminar
discontinuidades. Como foi usado nos exemplos de controle de amplitude
que vimos na aula retrasada (para eliminar cliques).
- C03.zipper.noise mostra como rampas podem ser criadas com line e line~.
- com line, ele gera uma escada com salto a cada 20ms, o que gera
um ruído de ziper. A conversão de controle para sinal
é feita de forma implícita e o Pd neste caso usa o
algoritmo mais simples da Fig. 3.4.
- com line~, a escalada é feita na taxa do áudio e o ruído de zíper desaparece.
- Em alguns casos mais raros, o line~ também pode gerar problemas como no C04.control.to.signal onde o line~ é usado como gerador de onda triangular. Vai para 1 em 2 ms e vai para 0 em 2 ms.
- Neste caso o line~ não dá conta do recado (pois ele alinha as linhas aos limites dos blocos de 64 amostras do Pd).
- O vline~, no entanto, que possui uma precisão maior (no nível da amostra) dá conta do recado.
- O problema é que vline~ é muito pesado
computacionalmente e só deve ser usado caso haja realmente
necessidade.
- O C05.sampler.oneshot mostra como construir um non-looping sampler usando o vline~ ao invés do phasor que usávamos no looping sampler.
- Este tipo de sampler é bem usado para inserir/disparar
amostras de áudio pré-gravadas dentro de nossas
peças eletroacústicas.
- Note as rampas no início e no fim.
Conversão de sinais de áudio para fluxos de controle
- Em alguns casos, precisamos extrair informações do
sinal de áudio e convertê-las em comandos de controle.
- Por exemplo, suponha que queremos cortar um som o mais rápido possível mas prevenindo contra cliques.
- Precisamos usar uma função rampa para diminuir a
amplitude. Mas quanto menor a amplitude inicial, mais rápida
pode ser a rampa de descida.
- A Fig. 3.6 mostra diagramas da conversão de áudio para controle e vice-versa.
- C06.signal.to.control mostra como snapshot~ pode ser usado para converter dados de áudio para controle.
Detecção de eventos
- É comum precisarmos detectar que certas coisas aconteceram
no sinal de áudio e gerar mensagens de controle dependendo desta
detecção.
- Por exemplo, poderíamos querer detectar o início e
o fim de atividades no sinal de áudio. Isso poderia ser usado
para identificar as frases melódicas tocadas por um instrumento
ou identificar quando a voz está sendo captada em uma
aplicação VoIP.
- Fig. 3.7
- a) ilustra o algoritmo
mais simples possível com 1 limite (ele gera muitos erros quando
há variações próximas do limite).
- b) ilustra um algoritmo melhor com dois limites.
- c) mostra outro
algoritmo que considera um período morto depois de cada
detecção e só volta a detectar após o
término do período morto.
- Os algoritmos b) e c) podem ainda ser utilizados em conjunto, em um algoritmo híbrido.
- C07.envelope.follower mostra como o env~ mostra como obter o RMS de um sinal de áudio em tempo real.
Sinais de Áudio como Controle
- A tradição de síntese analógica dos
anos 1950 a 1980 nos dá uma alternativa elegante para gerar
fluxos de controle:
- usar sinais de áudio para controlar outros sinais de áudio.
- Na síntese analógica, duas técnicas eram muito usadas:
- sequenciamento analógico
- pode ser simulado com uma tabela contendo valores
pré-determinados e o uso de uma onda dente de serra com a
freqüência e amplitude corretas para percorrer os elementos
da tabela.
- os elementos da tabela podem conter as alturas das notas de
uma melodia, uma seqüência de dados de controle quaisquer,
etc.
- A Fig. 2.8 mostra como ondas dente de serra podem ser manipuladas para gerar freqüências e amplitudes diversas.
- C08.analog.sequencer
- amostre e segure (sample-and-hold)
- Consiste em extrair amostras do sinal de áudio e segurar o valor daquela amostra ao longo de um certo tempo.
- A Fig. 2.9 mostra um exemplo que segura o valor do cosseno por um período fixo.
- Isso é similar ao uso que fizemos do trigger no B08.sampler.nodoppler
- C09.sample.hold
Referência
Próxima Aula
Página de MAC
337/5900
Página do Fabio
Página do
DCC