Construindo efeitos sonoros com o ISoundFx

Transcrição

Construindo efeitos sonoros com o ISoundFx
Construindo efeitos sonoros com o ISoundFx
Pedro Matos Motta¹, Eduardo M. de Freitas Jorge¹
¹Universidade do Estado da Bahia - (UNEB), Salvador, BA - Brasil
{[email protected], [email protected]}
Resumo. Os dispositivos móveis atuais romperam com a limitação tecnológica que
os impediam de processar efeitos sonoros em tempo real. Através de aplicações
para smartphones, por exemplo, é possível plugar uma guitarra em um celular e
ouvir os efeitos semelhantes às pedaleiras e amplificadores. Porém, para a criação
de programas nesse contexto o nível de reuso de componentes prontos ainda é
baixo gerando uma menor produtividade para concepção de aplicações de efeitos
sonoros. Este trabalho propõe a criação de uma biblioteca de efeitos denominada de
ISoundFx para plataforma iOS. O objetivo é reunir nesta biblioteca algoritmos de
efeitos sonoros e o uso de recursos de hardware, permitindo que aplicações sejam
desenvolvidas para smartphones e tablets em um menor espaço de tempo e por
desenvolvedores que não necessitam de conhecimentos profundos nesta área.
Abstract. Mobile devices have broken with the current technological limitations that
prevented them from processing sound effects in real time. Through applications for
smartphones, for example, you can plug a guitar into a phone and hear the effects
similar to pedals and amps. However, for the creation of programs in this context the
level of component reuse is still low ready generating less productivity for application
design sound effects. This paper proposes the creation of a library of effects called
for ISoundFx iOS platform. The goal is to gather algorithms in this library of sound
effects and use of hardware resources, allowing applications to be developed for
smartphones and tablets in a shorter time and for developers who do not require
deep knowledge in this area.
1. Introdução
O mercado de aplicações para dispositivos móveis dispõe de um número
significativo de programas para fins musicais. Os usuários têm buscado cada vez
mais por estas ferramentas que auxiliam na composição musical, principalmente
pela praticidade de carregar um celular ao invés de caixas de som, pedais de
efeitos, racks dentre outros equipamentos de som, não sendo necessário estar em
um estúdio de gravação, mas em qualquer lugar (KRUEGER, 2008).
A procura dos usuários por esse tipo de aplicativo cria um atrativo para os
desenvolvedores. Porém, ao criar programas de efeitos sonoros para dispositivos
móveis, existe uma dificuldade inerente ao tema, já que, é necessário um
conhecimento em algoritmos de processamento de áudio. Alem disso, no ambiente
de dispositivos móveis deve haver uma preocupação maior que nos computadores
convencionais, pois existem limitações quanto ao poder de processamento,
capacidade de memória dentre outros recursos, dificultando ainda mais a construção
desses aplicativos.
Neste contexto temos dois principais grupos de aplicações musicais que
definem qual o tipo de algoritmo de áudio utilizado: efeitos de transformação sonora
e os sintetizadores de áudio. As aplicações denominadas sintetizadoras sāo
responsáveis por "gerar" um som (APPLE, 2012). Por exemplo, os aplicativos de
instrumentos virtuais (bateria, flauta e violão). Já as de efeito de transformação, ou
simplesmente de efeitos sonoros, promovem uma modificação em tempo de
execução do som original captado de um ambiente externo, ou em um arquivo
(APPLE, 2012). Temos os pedais de guitarra virtuais e os alteradores de tonalidade
de voz como exemplo.
Segundo os dados da Apple (2012) as aplicações que fazem parte do grupo
de efeitos de transformação sonora possuem o código fonte fechado, ou seja,
dificulta que outros programadores possam utilizar os algoritmos para a construção
de outros programas, aumentando assim o esforço e o tempo de criação. Por tanto a
existência de código open source ajudaria que desenvolvedores, com pouca
experiência, desenvolvessem aplicações neste domínio.
Diante disso, o presente trabalho objetiva criar uma biblioteca denominada
ISoundFx com o foco no grupo de recursos de transformações sonoras. A biblioteca
a ser especificada, traz algumas vantagens, por exemplo: reaproveitamento de
código, já que este possui rotinas de utilização da API nativa de áudio, que estaria
repetido nas diversas aplicações; e redução da complexidade, visto que o
desenvolvedor precisa se preocupar apenas com a lógica da sua aplicação.
Os passos para a concepção do ISoundFx são: (i) conceituação de alguns
dos efeitos sonoros; (ii) análise do funcionamento do framework de áudio do iOS; (iii)
implementação ISoundFx na plataforma iOS; (iv) por fim são desenvolvidos
protótipos de aplicações usando o ISoundFx.
2. Efeitos Sonoros
Os efeitos sonoros são comumente utilizados pelos guitarristas através do uso de
pedais ou racks. Os efeitos mais utilizados por estes músicos são o de distorção,
reverberação, echo, chorus e flanger. Nesta seção são apresentados dois dos
principais efeitos: o echo e a distorção.
Distorção, como sugere o nome, é um efeito provocado pela amplificação do
sinal de áudio, a tal ponto que há uma perda de parte do som original
descaracterizando-o (MENDES;GOULART, 2012). Este processo também pode ser
denominado como clipping. Na Figura 1 é ilustrado o formato da onda original e os
cortes realizados nas extremidades para gerar o efeito de distorção, dando um
formato de onda quadrada. Os ajustes realizáveis no efeito de distorção são:



Ganho: dita o nível de saturação da distorção;
Tom: regula sem o som ficará mais agudo ou mais grave;
Volume: regula a intensidade do som.
Figura 1 - Formato de onda distorcida (BAITONA 2012)
O efeito de Echo ou Delay é definido como a repetição do som original com
um tempo de atraso definido. A cada repetição o som vai decaindo, ou seja, vai
perdendo a intensidade até que não seja mais possível a audição (KRUEGER,
2012). A Figura 2 demonstra o sinal original e o sinal após a aplicação do efeito de
delay. Este efeito tem os seguintes ajustes:



Atraso: ajusta o intervalo em que as repetições vão ocorrer;
Feedback: regula a quantidade de repetições;
Level: dita o nível de intensidade das repetições.
Figura 2 - Formato de Onda no efeito de delay
Os efeitos apresentados serão retomados na seção 4, quando será exemplificado
a criação deles utilizando o iSoundFx.
3. Arquitetura de áudio do iOS
Para a compreensão do funcionamento do iSoundFx é necessário o conhecimento
prévio da plataforma para qual ele foi designado. Esta seção faz uma breve
descrição do suporte nativo do framework de áudio da plataforma iOS.
Segundo a Apple (2012) a API de áudio do iOS provê diversas unidades
divididas por camadas da Figura 3. Cada unidade possui um grau de abstração mais
elevado na parte superior em relação a camada que está mais próxima dos drivers e
hardwares.
A escolha de qual unidade deverá ser utilizada no projeto é dada pela
intenção do desenvolvedor. Caso ele queira maior flexibilidade, desempenho e
controle a opção seria o Audio Unit. Se a intenção é tocar apenas uma amostra de
áudio, por exemplo, a unidade Media Player seria a mais adequada.
Figura 3 - Framework de áudio no iOS (APPLE, 2012)
O uso do Audio Units é recomendado para as seguintes situações (APPLE,
2012):



Utilização simultânea dos canais de entrada e saída de áudio com o mínimo
de latência, como, por exemplo, um pedal de efeitos sonoros virtuais;
Tocar amostras sintetizadas de áudio com eficiência;
Uso para uma demanda específica de áudio como cancelamento de eco,
mixagem ou equalização sonora;
A partir desses dados o Audio Units é a unidade mais compatível com o
ISoundFx devido a primeira situação contemplar o objetivo de capturar o áudio,
processá-lo utilizando os efeitos musicais e em seguida tocar essa amostra de
áudio.
4. ISoundFx
O ISoundFX, junção dos nomes iOS + Sound + Effects, é uma biblioteca open
source de uso restrito aos dispositivos móveis da Apple. Possui seu código fonte
escrito nas linguagens C++ e Objetive-C. O principal objetivo desta pesquisa é
mostrar as potencialidades do uso dessa biblioteca e como a mesma pode apoiar os
desenvolvedores na construção de aplicações neste domínio. Para demonstrar a
aplicabilidade do ISoundFX serão apresentados também dois exemplos de
codificação que usam efeitos sonoros vistos na seção 3.
Esta seção está subdividida nas seções de arquitetura do ISoundFx, onde é
apresentado o funcionamento do ISoundFx, depois a criação dos efeitos e por fim a
conclusão deste trabalho.
4.1 Arquitetura
No desenvolvimento de aplicações para dispositivos móveis a arquitetura deve ser
cuidadosamente projetada, devido as limitações quanto ao uso de processamento e
memória, logo o ISoundFx foi projetado observando estas questões (ver Figura 4).
Figura 4 - Arquitetura do ISoundFx: (a) Aplicação Hospedeira; (b) Biblioteca ISoundFx; (c) Framework
nativo do iOS.
Em “a” está a aplicação dita hospedeira que fará o uso da biblioteca. O
acesso à biblioteca ISoundFx, representado por “b”, será feito através da camada de
abstração denominada “Controle”. Na camada intermediária existem “n” efeitos
dispostos de forma horizontal simbolizando que ao término do efeito anterior, mais à
esquerda, o próximo efeito, da direita, será processado. Já a camada inferior
denominada interface comum será feita a intermediação da biblioteca com o
framework nativo, captando os recursos de entrada e saída, além de outros recursos
disponíveis Audio Unit.
O ISoundFx pode ser representado também por um ponto de vista mais
detalhado, como pode ser observado no diagrama de classes da Figura 5. Para
este projeto o padrão Strategy foi adotado visando facilitar a inclusão de novos
efeitos ao projeto. Segue uma breve descrição das principais classes utilizadas:

NativeAudio – É responsável por fazer o acesso ao framework de áudio
nativo, o Audio Units, bem como configurar as propriedades das amostras de
áudio e gerenciar o fluxo de Entrada e Saída (E/S);



IEffect – É a interface comum entre os efeitos que possuirá como principal
método o onSample que receberá o como parâmetros o stream de áudio
recebido pelo NativeAudio e a quantidade de amostras;
EffectImplement – É a classe que fará a implementação real do efeito. Cada
efeito adicionado ao projeto terá que implementar o IEffect;
Controller – É responsável por controlar as configurações dos efeitos e
gerenciar parte dos processos da classe NativeAudio. É por meio deste que a
aplicação fará o uso da biblioteca.
A classe NativeAudio encapsula o funcionamento do Framework Audio Units
simplificando o uso de áudio no iOS para a construção de aplicações de efeitos
sonoros. É possível observar a quantidade de configurações que são necessárias
para realizar uma simples captura de áudio pela documentação oficial da Apple.
Após a breve descrição do funcionamento do ISoundFx, a próxima seção
demonstra a criação de dois efeitos sonoros descritos na seção 2: o efeito de eco e
distorção.
Figura 5 - Diagrama de classes do ISoundFx
4.2 Criação dos Efeitos
O primeiro passo para a criação de um efeito sonoro utilizando o ISoundFx é gerar
uma classe que implemente a interface IEffect Esta forma o método onSample
receberá por parâmetro as amostras de áudio dos canais esquerdo e direito e a
quantidade dessas amostras. Por padrão a taxa de amostragem possui 16 bits e
44.100Hz. A seguir segue o exemplo de criação do efeito de eco.
O efeito de eco ou delay como explicado na seção 2 pode ser brevemente
descrito como a repetição do sinal original até o decaimento total do som. Uma
Figura 6 - Fila Circular (PIMENTEL;CRISTINA 2012)
estrutura de dados que é utilizada para a construção deste efeito é a fila circular
(Figura 6). Ela funciona da seguinte forma: os dados são inseridos na fila e são
removidos de acordo com a ordem de inserção. Para o caso do efeito de delay as
amostras de áudio são inseridas na fila e conforme o tempo pré-definido as
amostras são executadas e removidas da fila. Os parâmetros de configuração do
efeito são:



Level – Expressa a intensidade das repetições. Os estão entre 0 e 0,5;
Feedback – É a quantidade de repetições. Os valores vão de 1 à 10;
Delay – É o tempo entre as repetições. Os estão entre 0 até 5 segundos.
Para o cálculo do decaimento do delay é necessário o uso das através das
fórmulas abaixo:
Sendo o levelFactor a variável que será multiplicada pela posição da amostra
de áudio na fila circular, para obter o level de cada repetição do sinal. Na Figura 7
pode ser observado esse procedimento no último laço do “for”.
for (int index = 0; index < inNumberFrames ; index++ ) {
bufferLeft[bufferHead] = sampleBufferLeft[index];
bufferRight[bufferHead] = sampleBufferRight[index];
bufferHead++;
if(bufferHead >= BUFFER_LENGTH - 1){
bufferHead = 0;
}
sampleBufferRight[index] *=.5;
sampleBufferLeft[index] *=.5;
}
for(int i = 1 , j = feedback ; i < feedback; i++, j--){
bufferTail = (bufferHead - (delay + inNumberFrames) * i);
if(bufferTail < 0){
bufferTail = (BUFFER_LENGTH - 1) - abs(bufferTail);
}
for (int index = 0; index < inNumberFrames ; index++ ) {
sampleBufferLeft[index] += bufferLeft[bufferTail] * (level * j);
sampleBufferRight[index] += bufferRight[bufferTail] * (level * j);
bufferTail++;
if(bufferTail >= BUFFER_LENGTH - 1){
bufferTail = 0;
}
}
}
Figura 7 - Algoritmo de Delay
O efeito de distorção foi proveniente do trabalho de Krueger (2012), o
algoritmo foi adaptado para o funcionamento no ISoundFx a partir das fórmulas
abaixo:
Sendo que fGanho corresponde ao nível de distorção dentro do intervalo de
0,1 à 0,7 e X a amostra de áudio. A Figura 8 expressa o as fórmulas de distorção
aplicadas no algoritmo. Os parâmetros do efeito são:


Gain – Corresponde a quantidade saturada;
Level – É a intensidade da distorção.
-(void)onStream : (UInt32) inNumberFrames sampleBufferLeft: (SInt32*)
sampleBufferLeft sampleBufferRight: (SInt32*) sampleBufferRight{
SInt32 *x1, *x2;
x1 = sampleBufferLeft;
x2 = sampleBufferRight;
for(int i = 0; i < inNumberFrames; i++){
x1[i] = ((1 + k) * x1[i]) / ( 1 + k * abs(x1[i]) );
x1[i] = x1[i] * level;
x2[i] = x1[i];
}
}
Figura 8 - Algoritmo de Distorção
4.3 Considerações Finais
Este trabalho apresentou o funcionamento do ISoundFx que é uma biblioteca de
efeitos sonoros e a construção dos efeitos de distorção e delay. Para a concepção
da biblioteca foram dados alguns fundamentos sobre o framework de áudio da
plataforma iOS, o Audio Units e os efeitos construídos.
O funcionamento dos efeitos em tempo real, a possibilidade da criação de
novos efeitos sem grande impacto a estrutura do projeto e principalmente o
encapsulamento do framework de áudio nativo são a principais características do
ISoundFX .
Algumas sugestões de trabalhos futuros: a construção de novos efeitos para a
biblioteca, a criação de aplicações utilizando a biblioteca e por último, a criação de
uma interface comum para configuração dos efeitos.
Referências
KRUEGER, Daniel. “Tratamento de sinais sonoros no computador simulando
pedais virtuais”. Monografia de Ciência da Computação – Universidade do Vale do
Itajaí. Itajaí. 2008.
APPLE.
“iOS
Technology
Overview”.
Disponível
em:
<http://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/iPh
oneOSTechOverview/iPhoneOSTechOverview.pdf>. Acessado em 18 de março de
2012.
MENDES, Leandro Fernando; GOURLAT, Rafael Lopes. “Pedaleira multi-efeitos
para guitarra com processamento digital de sinais”. Monografia do Curso de
Engenharia Elétrica – Universidade Positivo. Curitiba. 2009.
BAITONA.
“Amplifier
Distortion”.
Disponível
em:
<http://www.baitona.net/forum/baitona53/bait23109/>. Acessado em 2 de junho de
2012.
PIMENTEL, Graça; CRISTINA, Maria. “Fila Circular”. Disponível em:
<http://www.icmc.usp.br/~sce182/fcirc.html/>. Acessado em 2 de junho de 2012.

Documentos relacionados