Uma ferramenta essencial para a síntese de som é o oscilador, que implementa ou simula um movimento ondulatório periódico, cuja freqüência pode ser controlada.
Há uma variedade de métodos para computar ondas senoidais digitalmente, o que possibilita a implementação de osciladores senoidais que diferem em critérios como velocidade, precisão e uso de memória.
Ondas complexas podem ser obtidas combinando-se vários osciladores senoidais, ou fornecendo-se a forma de onda pré-calculada a um oscilador de tabela de onda.
Formas de onda
Algumas das formas de onda mais usadas são apresentadas a seguir.
-
Senoidal: Determinada pela função seno (ou cosseno);
f(x) = cos(x)
-
Dente-de-serra: Um período dessa forma de onda consiste simplesmente de uma rampa ascendente (que então salta abruptamente para o ponto inicial, na passagem para o próximo ciclo).
Pode-ser obtida com:
f(x) = x - floor(x)
qué o mesmo que:
f(x) = mod(x, 1.0)
Pode ser aproximada utilizando-se harmônicos com amplitude inversa ao seu índice (número do harmônico):
f(x) = cos(x) + cos(2x)/2 + cos(3x)/3 ...
-
Quadrada: Alterna regularmente entre dois valores.
Pode ser obtida, por exemplo, tomando-se o sinal (+, – ou 0) da saída de um oscilador senoidal:f(x) = sgn(sin(x))
ou com o teste:
mod(x, 1.0) >= 0.5
Nesse caso, se o valor
0.5
for substituído por outro número entre 0 e 1, obtém-se um trem de pulsos ou onda retangular, dos quais a onda quadrada é um caso particular.A onda quadrada pode ser aproximada de maneira similar à onda dente-de-serra, mas usando-se somente harmônicos ímpares:
f(x) = cos(x) + cos(3x)/3 + cos(5x)/5 ...
-
Triangular: Formada por uma rampa ascendente seguida de uma rampa descendente.
f(x) = abs( x - round(x) )
Pode ser aproximada usando-se harmônicos ímpares, com amplitude inversa ao quadrado do número do harmônico, invertendo-se as fases (sinal) de cada componente com relação ao anterior:
f(x) = cos(x) + cos(-3x)/9 + cos(5x)/25 + cos(-7x)/49 ...
Usando-se função seno, pode-se inverter as amplitudes (ao invés da fases):
f(x) = sin(x) - sin(3x)/9 + sin(5x)/25 - sin(7x)/49 ...
Como visto acima, as ondas triangular, quadrada e dente-de-serra (ideais) possuem infinitos harmônicos. Devido à limitação de banda determinada pelo Teorema da Amostragem, na forma digital o número de harmônicos deve ser restrito (conforme a freqüência fundamental) quando se quer evitar aliasing.
Tabelas de forma de onda
Para a síntese de sons periódicos complexos, pode-se evitar (re)calcular a função de onda para cada amostra: afinal, uma vez calculado um período da onda, basta repeti-lo ao longo da duração do som. Esse é o princípio básico da síntese por tabela de onda (table-lookup oscilators). Dada uma tabela contendo um período da onda, o oscilador simplesmente repete a tabela na freqüência desejada.
Osciladores com interpolação
O oscilador de tabela deverá decidir entre dois valores adjacentes, quando precisar de algum ponto da onda que inexista na tabela. Para reduzir a distorção causada por esse arredondamento, deve-se utilizar tabelas suficientemente grandes, com alta resolução. A qualidade será claramente superior com o uso de osciladores capazes de interpolar entre dois pontos da tabela, ou seja, calcular valores intermediários (inexistentes na tabela). Contudo, esses osciladores precisam realizar o cálculo de interpolação a cada amostra, o que, dependendo do caso, pode ser menos eficiente (e preciso) do que o cálculo direto da onda.