Desenvolvimento de um Aplicativo Gráfico para Dispositivos Móveis para a Análise de Sinais de Áudio no Tempo e na Freqüência Leandro Alves Santiago, Ivan Roberto de Santana Casella Centro de Engenharia, Modelagem e Ciências Sociais Aplicadas (CECS), Universidade Federal do ABC Av. dos Estados, 5001, Santo André, SP I. INTRODUÇÃO O s aparelhos celulares adquiriram a capacidade para desempenhar um grande número de novas funções. Isso foi possível em razão da crescente demanda de serviços multimídia de entretenimento e de fins específicos. Além disso, esse aparelho apresentou um grande poder de penetração na sociedade, facilitando o acesso de diversos aplicativos ao usuário final, disponibilizando um instrumento específico de fácil acesso. Segundo a ANATEL, o Brasil chega a 164,5 milhões de celulares em Setembro de 2009. [1] Devido à sua ampla gama de aplicações, os arquivos de áudio têm importante papel tanto na pesquisa quanto na indústria. As características dos sinais de áudio proporcionam uma grande área de pesquisa e desenvolvimento de novas tecnologias. A oportunidade do envolvimento com a programação, adicionalmente voltada a celulares, e com estudos das características do som são grandes motivadores para a realização deste projeto. Além disso, este trabalho ainda poderia ser ampliado a fim de realizarem-se aplicações adicionais, dentre outras, tais como o Reconhecimento de voz e o Gerador de sinais acústicos. O Reconhecimento de voz ou fala permite uma série de aplicações, como a possibilidade de uma pessoa com deficiência que a impede de digitar ou realizar outras ações do gênero escrever textos ou acessar arquivos, além da flexibilidade de acesso a recursos do celular utilizando-se a voz ou até mesmo a identificação de padrões de sinais sonoros. Com a utilização do aplicativo, o estudo de sinais acústicos padrões, tais como ondas senoidais, quadradas, triangulares etc., seria facilitado, utilizando-se de um aparelho celular. II. UFABC. Como ambiente de desenvolvimento, será utilizada o Netbeans, que dispõe de um grande número de recursos gráficos para desenvolvimento de aplicativos para celulares. A plataforma Java 2 Micro Edition (J2ME) foi criada para lidar com as limitações associadas com a criação de aplicativos para dispositivos pequenos e de pouco poder de processamento. Esta define dois conceitos essenciais que são Configurações e Perfis, além de utilizar-se de APIs (Interfaces de Programa da Aplicação) adicionais. O J2ME contêm um JRE (da sigla em inglês Java Runtime Environment, Ambiente de Tempo de Execução) altamente otimizado, abrangendo uma ampla gama de dispositivos muito pequenos e habilitando programas utilitários úteis, de segurança e conectividade em smart cards, pagers, conversores de sinal digital (set-top boxes) e outros aparelhos de pequeno porte. DESENVOLVIMENTO DE APLICAÇÕES PARA DISPOSITIVOS CELULARES Existem várias linguagens de programação voltada a dispositivos móveis, tais como J2ME(Java), Hecl, Python, além de aplicativos escritos em C. Existem, também, vários ambientes de desenvolvimento como o Eclipse, o Netbeans e o S60. Devido à grande sofisticação e flexibilidade, neste projeto faremos uso da linguagem Java, que também leva em conta a adoção desta linguagem em diversas disciplinas da Figura 1 – A plataforma J2ME A. Configurações Uma configuração define uma plataforma mínima para um grupo de dispositivos com características similares, tanto na memória quanto no poder de processamento. As configurações definem as características suportadas tanto pela própria linguagem de programação Java, quanto pela máquina virtual e suas bibliotecas de classes e APIs, as quais um determinado fabricante pode esperar que estejam disponíveis em todos os dispositivos de uma mesma categoria. As principais configurações do J2ME são o CDC, o CLDC. A configuração CLDC é destinada a dispositivos móveis, pequenos e com grande restrição de recursos, conectividade a algum tipo de rede, em geral sem-fio apresentando banda limitada. Faz uso da KVM (Kilo Virtual Machine), uma versão reduzida da máquina virtual Java. Alguns exemplos desses dispositivos são: telefones celulares, PDAs, entre outros. Assim, este projeto fará uso desta configuração CLDC. Por outro lado, existe a configuração CDC. Ela é destinada a dispositivos fixos um pouco mais poderosos, que possuem conectividade com redes, possibilitando estabilidade e grande largura de banda. Essa configuração utiliza a máquina virtual Compact Virtual Machine (CVM) que é uma máquina virtual completa e projetada para os dispositivos que necessitam de toda a funcionalidade presente na edição J2SE (JVM), porém com menos memória. Alguns exemplos desses dispositivos são: televisão com Internet, sistema de navegação de carros, entre outros. B. Perfis Um perfil define uma plataforma Java para uma categoria de dispositivos, sendo a camada mais visível para usuários e desenvolvedores de aplicações. Ele especifica o conjunto mínimo de interfaces de programa da aplicação (APIs) disponível em uma classe particular de dispositivos. Os perfis são implementados para uma configuração particular (CLDC ou CDC). As aplicações são escritas para um perfil específico sendo, deste modo, portáteis para qualquer dispositivo que suporte aquele perfil. Um dispositivo pode sustentar múltiplos perfis. O Perfil do Dispositivo de Informação Móvel (MIDP) é o principal e pioneiro perfil na plataforma J2ME. A combinação do CLDC e do MIDP fornece um ambiente completo de desenvolvimento para a criação de aplicações em celulares e pagers. Aplicações que executam em dispositivos que suportam MIDP são denominados MIDlets. O MIDP foi feito para executar em cima da camada de configuração CLDC. Deste modo, o perfil utilizado neste projeto é o MIDP 2.0. III. TRATAMENTO DE SINAIS DE ÁUDIO A captura de sinais de áudio foi realizada com a utilização da MMAPI (Mobile Media API). A MMAPI é um pacote opcional de desenvolvimento de MIDlets que incorpora capacidades de manipulação de áudio e vídeo e suporta vários formatos de mídias. Fornece controles avançados sobre a reprodução, da captura de áudio e vídeo, da captura de fotos, reprodução de arquivos MIDI, entre outras. Para alcançar essa neutralidade, a API encapsula esses conceitos em dois objetos de alto nível: o Player e o DataSource. Ao passo que o Player é uma interface que lida com o processamento e reprodução de dados multimídia, DataSource é um resumo que encapsula a tarefa de dados de localização e recuperação, mantendo um protocolo independente. Além disso, temos a classe Manager, que fornece acesso a instancias da classe Player, funcionando como uma ponte entre o DataSource e seu respectivo Player. Nesta aplicação, o acesso ao player de captura foi dado através do método createPlayer() da classe Manager, utilizando-se como parâmetros a String ―capture://audio‖, que define o player como capturador de áudio [3]. Figura 2 – MMAPI como um Pacote Opcional IV. REPRESENTAÇÃO GRÁFICA DE SINAIS A representação gráfica de dados em J2ME pode ser uma tarefa difícil de desenvolver, pois a manipulação gráfica está vinculada à interface de baixo nível Canvas. A dificuldade de implementação de gráficos, utilizando-se a interface Canvas, encontra-se na manipulação direta de pixels do visor. Para isso, foi utilizada uma biblioteca adicional chamada Chart Component. [3] A manipulação de um gráfico é feita com a instanciação de um objeto, que adicionam dados e define sua estrutura. Para que o gráfico seja exibido, o item deve ser anexado por um formulário (form). Nas figuras abaixo, temos alguns exemplos de gráficos suportados pela biblioteca: Figura 3 – Exemplos de gráficos da Chart Component V. FAST FOURIER TRANSFORM EM J2ME A transformada de Fourier é uma transformada integral que expressa uma função como soma ou integral de funções senos e cossenos multiplicados por coeficientes ("amplitudes"). As transformadas contínuas e discretas de Fourier têm muitas aplicações em disciplinas científicas — em Processamento de sinal, Processamento de imagem, Física, Física e Química Quântica, Estatística, Acústica e outras áreas. Nos campos relacionados com o processamento de sinal, a Transformada de Fourier é tipicamente utilizada para decompor um sinal nas suas componentes em freqüência e suas amplitudes. Geralmente, a denominação "Transformada de Fourier" refere-se à Transformada de Fourier para funções contínuas. Para uso computacional, seja para aplicações científicas ou em processamento digital de sinais, é preciso ter valores discretos. Para isso existe a versão da transformada para funções discretas, a DFT (Discrete Fourier Transform) que pode ser calculada de forma eficiente utilizando-se de um algoritmo FFT (Fast Fourier Transform). O número de cálculos necessários para executar a DFT foi drasticamente reduzido por esse algoritmo, desenvolvido por Tukey e Cooley, em 1965. [3] Utilizando as técnicas de transformada de Fourier (TF) é possível representar um sinal no domínio da freqüência. Essa representação possibilita uma nova perspectiva de análise de sinal, oferecendo recursos para extrair características do sinal que podem ser utilizadas para o processamento da informação (reconhecimento do sinal, filtragem etc.). RESULTADOS E DISCUSSÕES O aplicativo desenvolvido neste projeto permitiu a captura de áudio e a representação desses dados no domínio da freqüência e do tempo. Abaixo, temos algumas telas do aplicativo no emulador do Netbeans, no qual foram capturados sinais de uma onda quadrada de 1 kHz: Figura 4 – Onda quadrada 1 kHz no tempo e na freqüência CONCLUSÕES O aplicativo ainda precisa de otimizações, como aplicações de filtros e ajustes dos níveis de captura. Entretanto, a este projeto contribui com a pesquisa direcionada a processamento digital de sinais, pois permite o estudo de sinais de áudio, utilizando-se de dispositivos celulares. Sugere-se, para posteriores pesquisas baseadas neste trabalho, o estudo sobre o armazenamento das amostras (samples) para melhor manipulação dessas amostras. REFERÊNCIAS BIBLIOGRÁFICAS [1] http://www.anatel.gov.br/Portal/exibirPortalInternet.do acessado em 20/09/09 [2] http://java.sun.com/javame/overview/products.jsp , acessado em 20/09/09. [3] Goyal, Vikram, ―Pro Java ME MMAPI: Mobile Media API for Java Micro Edition‖, 1 ed., 2006. [4] http://www.beanizer.org/site/index.php/en/Software/J2meChartComponent-ver-1.5.html , acessado em 29/07/09. [5] Lathi, B. P. – ―Sinais e sistemas Lineares‖, 2 ed., Porto Alegre: Bookman, 2007 AGRADECIMENTOS Agradeço a UFABC pela possibilidade de envolvimento com a pesquisa científica e pelo apoio financeiro, ao meu Orientador Prof. Dr. Ivan R. S. Casella e a todos que contribuíram com a realização deste projeto.