El tocar MP3 es una capacidad de muchas o de la mayoría de tarjetas SAMD51 y nRF. No es una capacidad para ninguna de las tarjetas M0. Revisa si tu tarjeta tiene dichas capacidades, revisando en la página de descargas en CircuitPython.org, y buscando a "audiomp3" en la lista de "build modules available" (o "módulos incluidos disponibles")

El audio comprimido puede ser una bonita alternativa a los archivos WAV que no tienen compresión, especialmente cuando tienes un sistema de archivo pequeño como pasa en muchas de las tarjetas con CircuitPython: ¡los archivos WAV terminan ocupando mucho de tu espacio! Gracias a que han expirado las patentes sobre MP3, ahora podemos incluir decodificación de MP3 como una funcionalidad del núcleo de CircuitPython, y ¡hasta puedes tocar varios archivos MP3 de forma simultánea!

CircuitPython tiene capacidad para cualquier tipo de archivo MP3 que desees. Hemos encontrado que archivos tanto mono como estereo desde 32kbit/s hasta 128kbit/s funcionan, con tazas de muestreo desde 16kHz hasta 44.1kHz. La salida de DAC de las SAMD51 M4 es de tan solo 12-bits por lo que no tiene sentido usar tazas de muestreo más altas.

Vamos a tocar un archivo mp3 corto, esperar a que un botón sea presionado, y luego tocar otro segundo archivo mp3. Utilice el mismo cableado que en los otros ejemplos de audio.

Ya que crear un objeto MP3Decoder requiere mucha memoria, lo mejor es hacer esto solo una vez cuando inicia tu programa, y luego actualizar la propiedad .file del objeto MP3Decoder cuando quieres tocar un archivo diferente. De otra forma, puede que te topes el temido error de  MemoryError.

Descarga estos dos archivos mp3 y cópialos a tu tarjeta:

Copia y pega el siguiente código hacia code.py utilizando tu editor preferido, y salva el archivo:

"""CircuitPython Essentials Audio Out MP3 Example"""
import board
import digitalio

from audiomp3 import MP3Decoder

try:
    from audioio import AudioOut
except ImportError:
    try:
        from audiopwmio import PWMAudioOut as AudioOut
    except ImportError:
        pass  # not always supported by every board!

button = digitalio.DigitalInOut(board.A1)
button.switch_to_input(pull=digitalio.Pull.UP)

# The listed mp3files will be played in order
mp3files = ["begins.mp3", "xfiles.mp3"]

# You have to specify some mp3 file when creating the decoder
mp3 = open(mp3files[0], "rb")
decoder = MP3Decoder(mp3)
audio = AudioOut(board.A0)

while True:
    for filename in mp3files:
        # Updating the .file property of the existing decoder
        # helps avoid running out of memory (MemoryError exception)
        decoder.file = open(filename, "rb")
        audio.play(decoder)
        print("playing", filename)

        # This allows you to do other things while the audio plays!
        while audio.playing:
            pass

        print("Waiting for button press to continue!")
        while button.value:
            pass

This guide was first published on Jun 24, 2020. It was last updated on Jun 24, 2020.

This page (Audio MP3 con CircuitPython) was last updated on Aug 27, 2021.

Text editor powered by tinymce.