Casa > O > O Que Entra Num Leitor De Áudio?

O que entra num leitor de áudio?

Saiu a minha actualização do meu leitor de áudio esta semana.

Utilizo um framework chamado Harmony 3, para os microcontroladores MIPS (PIC32) e ARM (SAM) de 32 bits do Microchip. Na versão atual do repo para o Harmony 3 no GitHub, existe uma aplicação chamada universal audio decoders que lê arquivos MP3, WAV ou ADPCM a partir de um sistema de arquivos localizado em um drive USB ou em um cartão SD.

Estou fazendo uma atualização desta aplicação que incluirá três formatos adicionais.

Rather do que escrever meus próprios decodificadores, o que seria uma tarefa enorme, estou usando os de código aberto. Por exemplo, para MP3 usei um chamado Helix que adicionei ao Harmony 3 como uma biblioteca. O Helix é usado na linha de produtos RealPlayer, e está disponível sob várias licenças open-source. Eu então adicionei código para exibir as informações nas tags ID3, como o título da música, artista, álbum à biblioteca.

Os principais componentes de um media player são:

>ul>li>USB host library, para hospedar um dongle USB com um sistema de arquivos (ou)
SD media card library (para hospedar um cartão SD ou micro-SD com um sistema de arquivos)li>li>Audio decoder library (WAV, MP3 etc.)Biblioteca de áudio (driver I2S, driver periférico I2S e driver de codec)>li>li>Biblioteca de gráficos (se fornecer uma GUI)>p>Existe um diagrama de blocos da aplicação mostrando estes componentes e suas conexões, a partir da documentação do meu programa:main-qimg-eb4d1dc20dc228c9eadde8297a029dde7

Esta é a aparência do programa no gráfico do projeto MPLAB X Harmony Configurator (MHC) do Harmony:

main-qimg-512c7e54586dc6bc718958a2b0943837

O terço superior são principalmente os componentes para a GUI. Todos eles são reunidos selecionando um modelo gráfico para o display (TM4301B). Baseado no tipo de placa de desenvolvimento (PIC32MZ EF Curiosity 2.0), os periféricos apropriados e as atribuições de pinos) são selecionados automaticamente.

P>Próximo você tem o áudio. Novamente, isto é trazido pela seleção de um modelo de áudio para o codec AK4954. Novamente baseado no tipo de placa de desenvolvimento (PIC32MZ EF Curiosity 2.0), os periféricos apropriados (I2C1 e I2S2) são selecionados automaticamente.

Na parte inferior estão os componentes para a interface do host USB para um drive de polegar (MSD=mass storage device), juntamente com um sistema de arquivos.

Os blocos STDIO e UART no canto inferior esquerdo não são realmente parte da aplicação, mas sim adicionados para depuração - qualquer saída através de uma declaração printf no meu código é enviada através da porta de depuração para uma porta COM virtual no meu PC, onde eu posso vê-la com um programa terminal como o RealTerm.

Muitos dos componentes têm opções de configuração; eu selecionei o codec AK4954 (esquema em verde no gráfico do projeto) e seu menu de configuração é mostrado no lado direito.

Após todos os componentes terem sido selecionados, pressionando um botão Code gera todo o código para os componentes mostrados. Em seguida, só é preciso escrever a aplicação ligando tudo isso - respondendo a eventos como a unidade USB sendo inserida (fazendo com que o diretório seja lido), respondendo aos botões do usuário na GUI sendo pressionada (play/pause, fast forward, volume, etc.). Ainda uma boa quantidade de trabalho.

O aplicativo também tem que abrir o arquivo selecionado, passar para o decodificador apropriado (como MP3), e então passar as amostras decodificadas do PCM para o DMA que irá alimentar o codec sobre o bus I2S.

Todo o código para a versão atual deste aplicativo está disponível no GitHub repo ligado anteriormente.

A aplicação corre tanto num microcontrolador MIPS (PIC32MZ2048EFM144) como no ARM (ATSAME70Q21B), com exactamente o mesmo código da aplicação - todas as diferenças no código fonte estão nos drivers e bibliotecas periféricas cujo código é gerado automaticamente pelo Harmony a partir do gráfico do projecto e do menu de configuração associado.

Aqui está uma imagem dela a correr na placa PIC32MZ EF Curiosity 2.0. O codec AK4954 está na placa filha no canto superior direito da imagem.

main-qimg-a7900416925b461bc1bbcd0a20744bba-mzj

De Harvison

Quão forte seria Hashirama se ele se tornasse 10 Tails Jinchuriki? :: Qual é a diferença entre um alimentador e uma linha de transmissão?