ESP8266 como decodificador MP3 en línea

Las bibliotecas de soporte, las buenas notas de la aplicación y los ejemplos elaborados de un fabricante pueden ayudarnos a acelerar el camino para hacer cosas interesantes con piezas nuevas. Espressif Systems ha hecho un buen trabajo con su producto ESP8266 (por supuesto, no está de más que el problema haga realidad un dispositivo IoT de menos de $ 5). Sin embargo, solo recientemente han comenzado a publicar ejemplos de muestra complejos completos. Esta demostración, un reproductor de radio MP3 en línea, apareció recientemente en Github, escrita por el hombre más conocido como Sprite_tm. No podemos esperar a ver más.

El decodificador MP3 en sí es un puerto de la biblioteca MAD MP3, adaptado para cantidades más pequeñas de SRAM y portado al ESP8266. Con algunas partes externas, puede crear un dispositivo conectado en línea que puede apuntar a cualquier flujo MP3 de Icecast, por ejemplo, y descifrará y reproducirá el sonido resultante.

¿Qué partes externas, preguntas? Primero hay algo para hacer la conversión de digital a analógico. La aplicación, tal como está escrita, se creó para ES9023-DAC, pero básicamente todo lo que habla I2S debería funcionar con solo un poco de hojas de datos y raspado de cabeza. Por supuesto, podría eliminar el agradable chip DAC y producir un PWM de 5 bits directamente desde el ESP8266, pero aparte de ser una buena demostración rápida, sonará como una mierda.

El otro IC externo propuesto es un chip SPI RAM para permitir el almacenamiento en búfer del archivo MP3 entrante. Como son las redes WiFi, y TCP en general, querrás almacenar los archivos MP3 en búfer para evitar problemas. Al igual que con el DAC dedicado, podría irse sin él (y hay definiciones en el archivo “playerconfig.h” para hacerlo) pero probablemente se arrepienta.

Básicamente, un chip ESP8266, un DAC I2S barato y algo de RAM externa y tienes un reproductor de radio en línea. Bueno, tal vez también agreguemos un amplificador, una fuente de alimentación y un altavoz. Mmm. y pantalla? ¿O dejar todo personalizable a través de WiFi? El punto es que es un gran ejemplo de código potenciado y un dispositivo de bricolaje ordenado para presumir ante tus amigos.

¿Las desventajas? Hasta ahora, solo se ha entregado al ESP8266 la versión económica del decodificador / sintetizador libMAD. El enlace de github solicita una solicitud de extracción, el código no exportado simplemente se encuentra allí y creemos que alguien debe completar la tarea.

Otros recursos

En nuestra búsqueda de otros ejemplos de código para el ESP8266, encontramos tres repositorios que parecen ser repositorios oficiales de Espressif en Github: espressif, EspressifSystems y EspressifApp (para aplicaciones móviles que se conectan al ESP8266). El ejemplo oficial de “Medición de voltaje de baja potencia” parece un gran lugar para comenzar y utiliza la versión actual del SDK y el kit de herramientas.

También hay un foro activo, con su propio repositorio comunitario de Github, con algunos ejemplos de “Hello World” y un buen paso de la cadena de herramientas.

Y, por supuesto, hemos informado sobre algunos en el pasado. Este programa rastrea, por ejemplo, los niveles de batería. Si tiene tiempo, consulte todas las publicaciones etiquetadas como ESP8266 aquí en La-Tecnologia.

Es posible que no desee más recursos para comenzar con su proyecto ESP8266. Oh, espera, ¿quieres soporte para Arduino IDE?

Gracias [Sprite_tm] por la propina.

  • Andrés dice:

    Puede generar el sonido a través de PWM.

    Utilice dos pines PWM para estéreo.

    • César Chirila dice:

      “Por supuesto, puede eliminar el agradable chip DAC y generar PWM de 5 bits directamente desde el ESP8266”
      Creo que ya se han ocupado de eso.

      • Sprite_tm dice:

        Si. Desafortunadamente, solo se puede hacer algo que suene económico de esta manera: realmente necesita una salida con búfer, y en este caso estoy haciendo un mal uso del hardware I2S y DMA para hacer eso, pero eso solo da una salida. Para tener dos resultados, tendrías que hacer todo en los programas y no sé si eso dejaría suficiente espacio para decodificar el MP3.

        • Dave dice:

          Según el cartel sobre el adolescente; ¿Es posible SPDIF?

      • Andrés dice:

        ¿Por qué son solo 5 bits?

        • Sprite_tm dice:

          Porque en lugar de enviar datos PCM de 32 bits al I2S-DAC, estoy enviando valores de 32 bits de datos PWM. Dado que en ese caso cada bit tiene el mismo peso, puedo enviar solo 2 ^ 5 valores con porciones únicas entre 1 y 0. Teóricamente podría hacer más, pero realmente no tengo la memoria para almacenar eso en esta aplicación.

        • Andrés dice:

          Ah, lo entiendo. Reutiliza el módulo I2S como módulo PWM, pero solo alcanza una resolución de 5 bits.

          ¿Por qué no utilizar el módulo PWM integrado?

          • Sprite_tm dice:

            Necesito un búfer para realizar múltiples tareas entre la decodificación de datos MP3, la lectura de MP3 de la red y varias pilas de red. Teóricamente, sería posible modificar el código PWM para usar un búfer también, pero el modo PWM fue básicamente un truco rápido para permitir que las personas prueben esto sin esperar a que ingrese el chip I2S, por lo que no quería gastar demasiado. mucho tiempo en él.

  • jpa dice:

    ESP tiene hardware SPI, por lo que tal vez DSD (https://en.wikipedia.org/wiki/Direct_Stream_Digital) sería posible. Aunque realizar la conversión temporalmente puede ser demasiado lento.

    • Sprite_tm dice:

      El ESP en realidad tiene I2S, que en este caso es básicamente un SPI con un motor DMA para alimentarlo. El DSD que mencionas necesita una salida de 1 bit a 2.8 MHz, más algo de lógica para calcular la salida. Tiempo de procesador que tengo en el ESP: el decodificador de MP3 en realidad usa la CPU a 80MHz mientras que puede funcionar a 160MHz. Me temo que el signo de interrogación serán los búferes de salida: solo tengo lo suficiente para hacer una salida de 1,4 MHz-1 bit … de lo contrario, valdría la pena echarle un vistazo.

      • rj dice:

        Un DAC sigma delta de segundo orden de 1 bit a 1.4 MHz debería producir una calidad de sonido aceptable … y solo usa suma y resta de enteros.

        La mayoría de los SD-DAC comerciales son de quinto orden, pero eso quiere un multiplicador y también descubre los coeficientes exactos para el paso bajo (mientras que el SDDAC de segundo orden es solo un integrador doble)

        • Sprite_tm dice:

          Implementé un DAC delta-sigma de 2 órdenes y, de hecho, para mi oído inexperto, al menos parece que el ruido está más concentrado en las bandas de alta frecuencia y debería ser más fácil de filtrar a través de un paso bajo. Verifique el código de github si lo desea. Estoy seguro de que un DAC de quinto orden también es factible, pero no sé si es necesario implementar las cualidades analógicas del pin de salida ESP.

  • fabricante de acero dice:

    ¿Alguien ha probado Tremo (códec Vorbis de punto fijo) con estos chips?

  • timgray1 dice:

    Hay chips decodificadores de mp3 para dispositivos que tienen DAC y todo lo que contienen. ¿Por qué no solo uno de esos? ¿Es estéreo sin necesidad de una biblioteca de decodificación?

    https://www.sparkfun.com/products/8125?gclid=CjwKEAjwtMqrBRDwtoehx72vm34SJACl_Un1R0wxL6KfMDieBItdWKCHNcFcWAvS3KBkdJuZ_8aLXRoCxaTw_

    • nachtritter dice:

      ¿Porque entonces ya no costaría menos de $ 5 el dispositivo?

      • makomk dice:

        Creo que los chinos baratos probablemente cuestan menos que el costo de un chip RAM DAC y SPI independiente, pero lamentablemente no tenemos una forma de comprarlos o desarrollarlos.

  • Tofuwurst dice:

    emitido en esp8266 sería genial …

  • Daniel dice:

    Unos 74’595 y muchas resistencias y tienes un DAC I2S barato. Bueno, bueno, no es tan barato como todo en grandes cantidades, pero al menos es muy fácil de obtener.

    • tekkieneet dice:

      74HC595 cuesta $ 0.45 US QTY1 y eso es dinero de 8 bits asumiendo que realmente obtiene linealidad de 8 bits de R2R. El DAC más barato en Digikey es un AK4430ET $ 1.05 US @ qty 1 con un estéreo de “24 bits”.

      • Daniel dice:

        Aquí vivo 74HC595 cuesta 0,19 € + 5,60 € de envío en una tienda y 0,20 € + 3,85 € de envío en otra tienda, mientras que Digikey quiere tener 18 € de envío a menos que pidas piezas por> = 65 €. No encuentro otra tienda que venda AK4430.

      • tekkieneet dice:

        De Farnell Element 14,
        UDA1334BT / N2 1,08 €
        PCM1781DBQ 1.3687 €
        WM8711CBLGEFL / V 1,64 €

        ¿Seguramente prefieres que una ubicación de envío lleve algunos de esos?

  • QWERTY dice:

    ¿Soy el único al que le gustaría ver una implementación de ancho de banda VOIP de doble ancho de banda en estos módulos?

    • RunnerPack dice:

      No.

    • BonegaCatsby dice:

      No veo un gran problema: si la pila de MP3 funciona, sigue una pila SIP delgada y ya casi está ahí.
      Estoy seguro de que una implementación de SIP corporal por diversión es suficiente, o un PJSIP personalizado para aquellos que quieren usar algo de PBX.

  • Palmitoxico dice:

    Y será procesado por infracción de patente.

    • makomk dice:

      La mayoría de las patentes de MP3 han expirado ahora porque es muy antiguo. El estándar en sí se remonta a 1993, y hay descodificadores MP3 de software que se han estado ejecutando en una computadora ordinaria en tiempo real desde 1995 (en un mundo sensato, todos ellos deberían expirar ahora, ya que han pasado 20 años, pero la patente el sistema está ligeramente roto.)

      • Palmitoxico dice:

        Es bueno saber esto. De todos modos, no tenemos patentes de software en Brasil, por lo que no sería un problema aquí 🙂

  • Lucas dice:

    ¡Felicitaciones por su nuevo trabajo en Espressif!
    http://www.reddit.com/r/esp8266/comments/38o5uk/software_mp3_decoder_with_i2s_interface_in_an/crx7gxl

    • Sprite_tm dice:

      ¡Gracias!

      • Ben Nguyen dice:

        ¿Vives en Shanghái o EspressIf admite trabajar de forma remota?

        Los archivos .a lib en github parecen estar vacíos. ¿Estos archivos no están en uso o hay blobs binarios que EspressIf proporciona para la pila tcp / ip, freertos, etc.?

        ¿En qué estás trabajando ahora, para la estación de radio esp8266 o para un proyecto?

        • Sprite_tm dice:

          Usé el trabajo de Espressif como pretexto para mudarme a Shanghai. No tengo idea sobre el trabajo remoto, sé que no lo molestan por pequeños períodos de tiempo, pero no estoy seguro de qué tan buena idea sería no unirse nunca a la empresa.

          Todos los archivos .a contienen datos (no en formato de texto, por lo que Github no lo muestra en la vista previa). Contienen las bibliotecas SDK.

      • Mike Wen dice:

        ¿Qué le parece Shanghai hasta ahora?
        Extrañaba Shanghai. (Viví en Shanghai entre 1992-1997, una universidad y luego su primer trabajo).

  • Ene. dice:

    ¿Podría ser un comienzo fácil y económico para los altavoces WLAN de bricolaje: UPNP conectado y sincronizado (Squeeze-Server?)?

    • Elías dice:

      Creé mi propia batería que actualmente solo tiene entrada Bluetooth; pero prefiero configurar el ESP8266 como algo que pueda anunciarse como un reproductor de audio en la red wifi, similar a lo que hacen algunos televisores actuales. Y luego obtenga una transmisión de sonido de Spotify, Google Play Music, tal vez incluso de YouTube.

      ¿Es eso factible? ¿Alguien puede indicarme la dirección correcta sobre qué protocolo / servicio debe anunciar el ESP8266 en la red?

      • jl dice:

        ¿Te pareció posible reproducir Spotify con “altavoces wifi” basados ​​en eso8266?

  • AMX dice:

    ¿El ESP8266 también emite la señal de reloj para el I2S DAC? Creo que el ES9023 se mencionó en el README, que requiere una señal de reloj de N veces la frecuencia de muestreo en su pin MCLK.

    • makomk dice:

      Ah, ahora hay sutileza. Que yo sepa, no, pero el ES9023 es inusual porque MCLK no tiene que derivarse del mismo reloj que BCLK; admite un modo asíncrono especial donde MCLK se proporciona con una fuente de reloj diferente, y creo que puede obtener módulos con ES9023 y reloj incorporado. Esto no es cierto para los chips DAC en general. La mayoría espera que MCLK y BCLK provengan de la misma fuente de reloj y MCLK será un múltiplo exacto de la muestra.

  • AMX dice:

    De hecho, puede conectar un oscilador externo a este DAC, pero es difícil encontrar una frecuencia común para 44,1 y 48 khnz, por ejemplo. Recuerdo que pic32 (mx220fb32 y otras MCU con interfaz I2S pueden hacer eso) podrían generar la señal de reloj (N * fs donde N = 128.256, …). Sería realmente útil tener una salida de reloj directamente desde el ESP8266. Quizás se pueda utilizar una de las salidas de PWM …

  • István dice:

    Tengo algunas preguntas:
    1. ¿Alguien más ha pensado en enviar PCM / DSD (datos modulados sigma delta de 1 bit) a través de wifi y usar el ESP8266 como controlador de puerta de enlace para el amplificador H-Bridge clase D? (Filtro de paso bajo de PCM a PWM o DSD PWM)
    ¿Por qué esto funcionaría o no funcionaría?
    2. ¿Se necesita MP3 porque la velocidad de datos del ESP8266 es demasiado lenta? Apuesto a que el 99% de los usuarios no escucharían la diferencia entre un flujo de 48 kHz con modulación delta de 1 bit y un PCM-DAC de 16 bits.

    La mayoría de las veces no me importa un reproductor completo dentro del ESP8266, sino un dispositivo para emitir sonido y reproducirlo a través de wifi con un amplificador de clase D decente.

  • isti37 dice:

    Tengo algunas preguntas:
    1. ¿Alguien más ha pensado en enviar PCM / DSD (datos modulados sigma delta de 1 bit) a través de wifi y usar el ESP8266 como controlador de puerta de enlace para el amplificador H-Bridge clase D? (PCM a PWM o DSD PWM de paso bajo) ¿Por qué o no funcionaría?
    2. ¿Se necesita MP3 porque la velocidad de datos del ESP8266 es demasiado lenta? Apuesto a que el 99% de los usuarios no escucharían la diferencia entre un flujo de 48 kHz con modulación delta de 1 bit y un PCM-DAC de 16 bits. La mayoría de las veces no me importa un reproductor completo dentro del ESP8266, sino un dispositivo para emitir sonido y reproducirlo a través de wifi con un amplificador de clase D decente.

  • Julian dice:

    ¿Qué pasa con la reproducción de archivos FLAC en lugar de MP3? La salida directa a coaxial / spdif debería ser agradable, ya que permitiría usar un DAC externo (de alta calidad).

  • Rohit Rajapure dice:

    Hola a todos,
    Estoy trabajando en esp8266, mi idea es enviar archivos de audio a MCU, aquí mi MCU es TM4C123 a través de ESP8266.
    ¿Alguien puede ayudarme a hacer esto? Por favor
    Gracias por adelantado
    Rohit

  • vino dice:

    Oye, ¿hay alguna forma de compilar el código con arduino? Me alegro de poder manejar las dificultades en mi Windows, pero no entiendo nada sobre el archivo MAKE y demás. Ya recibí mi ESP8266 ESP-01 con el SPI-RAM adicional instale también todo el cableado, ahora me falta el software. Quiero usar el canal pwm como salida de sonido.

Alejandro Vargas
Alejandro Vargas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *