Índice:

Biblioteca Arduino para decodificação de MP3: 4 etapas
Biblioteca Arduino para decodificação de MP3: 4 etapas
Anonim
Biblioteca Arduino para decodificação de MP3
Biblioteca Arduino para decodificação de MP3
Biblioteca Arduino para decodificação de MP3
Biblioteca Arduino para decodificação de MP3

Devido ao aumento da prevalência de microcontroladores rápidos como o ESP32 e a série ARM M, a decodificação de MP3 não precisa mais ser feita por hardware especializado. A decodificação agora pode ser feita no software.

Há uma ótima biblioteca disponível na Earlephilhower que mostra como decodificar uma ampla variedade de arquivos de áudio e reproduzi-los em microcontroladores ESP. Inspirado por isso, adaptei parte do código para criar um método modular de leitura de arquivos MP3 em microcontroladores.

Minha esperança é que este método seja genérico o suficiente para uso em qualquer microcontrolador rápido o suficiente (não apenas uma placa ESP32), mas até agora eu testei apenas em um ESP32.

Suprimentos

Como eu disse antes, espero que esse método funcione para qualquer microcontrolador rápido, mas pode não funcionar. Portanto, para replicar meus resultados, você precisará de:

  • Uma placa ESP32
  • SD breakout board
  • cartão SD
  • Jumper Wires
  • tábua de pão
  • Cabo micro USB (para fazer upload do esboço)
  • IDE Arduino

Etapa 1: Layout da placa de ensaio

Disposição da placa de ensaio
Disposição da placa de ensaio

Coloque o ESP32 e o cartão SD na placa de ensaio.

Etapa 2: Fiação do cartão SD

Fiação do cartão SD
Fiação do cartão SD

As conexões do cartão SD (breakout ESP32 SD) são as seguintes:

GND GND

3v3 VDD

23 DI (MOSI)

19 DO (MISO)

18 SCLK

5 CS

Observe que essas conexões serão diferentes se você estiver usando um microcontrolador diferente.

Etapa 3: as bibliotecas de software

se você não tiver o ESP-IDF instalado, acesse o site e instale-o.

Em seguida, instale a biblioteca do microdecoder. Você pode fazer isso baixando o repositório e colocando-o na pasta Bibliotecas do Arduino. A biblioteca do microdecodificador atualmente oferece suporte a arquivos.wav e.mp3.

Independentemente do formato, existem alguns métodos comuns associados a cada classe e são abordados no código a seguir. Isso inclui obter alguns metadados dos arquivos e imprimi-los no monitor serial.

#include "SD.h" // input

#include "mp3.h" // decodificador #include "pcm.h" // contêiner de dados de áudio brutos mp3 MP3; void setup () {Serial.begin (115200); // Configurar SD.begin (); // Arquivo de configuração de conexão SD = SD.open ("/ cc.mp3"); // Abra um arquivo MP3 MP3.begin (arquivo); // diga à classe MP3 qual arquivo processar MP3.getMetadata (); // obtém os metadados Serial.print ("Bits por Amostra:"); Serial.println (MP3.bitsPerSample); // imprime bits por amostra Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // e taxa de amostragem} void loop () {}

Etapa 4: Plote os dados de MP3 no monitor serial

Plotar dados de MP3 no monitor serial
Plotar dados de MP3 no monitor serial

Com o código abaixo, você pode plotar alguns dados de áudio no monitor serial. Isso será muito lento, mas mostrará como usar a biblioteca de MP3. Ele também reduz a resolução dos dados por um fator de 16, de modo que, quando os dados são plotados, eles se parecem com uma forma de onda de áudio. Este código é retirado do exemplo SPI_MP3_Serial.ino que vem com a biblioteca do microdecoder. Claro, indo em frente, você vai querer tocar esses dados de áudio de alguma forma, mas esse é o tópico de um instrutível diferente.

#include "SD.h" // input

#include "mp3.h" // decodificador mp3 MP3; // Áudio MP3 Class pcm; // dados de áudio brutos void setup () {Serial.begin (115200); // Configuração de SD.begin (); // Arquivo de configuração de conexão SD = SD.open ("/ cc.mp3"); // Abra um arquivo MP3 MP3.begin (arquivo); // Passe o arquivo para a classe MP3} void loop () {audio = MP3.decode (); // Decodifique os dados de áudio na classe pcm / * há 32 amostras em audio.interleaved (16 à esquerda e 16 à direita) * mas vamos representar graficamente o primeiro ponto de dados em cada canal. * Isso efetivamente reduz a resolução dos dados por um fator de 16 (para * visualizar apenas a forma de onda) * / Serial.print (audio.interleaved [0]); // canal esquerdo Serial.print (""); Serial.println (audio.interleaved [1]); // canal certo}

Recomendado: