MP3Decoder: better handle INDATA_UNDERFLOW & MAINDATA_UNDERFLOW · csamuelson/circuitpython@9bc89f5 · GitHub
Skip to content

Commit 9bc89f5

Browse files
committed
MP3Decoder: better handle INDATA_UNDERFLOW & MAINDATA_UNDERFLOW
This allows playback of some 128k http streams from somafm, though glitches occur with some regularity. ```py import time import adafruit_connection_manager import adafruit_requests import audiobusio import audiomixer import audiomp3 import board import wifi pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio) ssl_context = adafruit_connection_manager.get_radio_ssl_context(wifi.radio) requests = adafruit_requests.Session(pool, ssl_context) # todo: parse PLS files like https://somafm.com/nossl/dronezone.pls # todo: figure out why https URLs don't work at all (missing select?) # STREAMING_URL = "http://ice2.somafm.com/dronezone-128-mp3" STREAMING_URL = "http://ice4.somafm.com/tikitime-128-mp3" def get_mp3_stream(): if STREAMING_URL.startswith("http:") or STREAMING_URL.startswith("https:"): return requests.get(STREAMING_URL, headers={"connection": "close"}).socket return open(STREAMING_URL, "rb") mixer_buffer_size = 1152 * 16 mp3_buffer = bytearray(16384) with audiobusio.I2SOut( bit_clock=board.D12, word_select=board.D13, data=board.D11 ) as i2s, get_mp3_stream() as stream, audiomp3.MP3Decoder( stream, mp3_buffer ) as sample, audiomixer.Mixer( channel_count=2, sample_rate=44100, buffer_size=mixer_buffer_size ) as m: v = m.voice[0] print(sample) i2s.play(m) v.play(sample, loop=False) while v.playing: time.sleep(0.1) ```
1 parent 974b21a commit 9bc89f5

1 file changed

Lines changed: 37 additions & 4 deletions

File tree

shared-module/audiomp3/MP3Decoder.c

Lines changed: 37 additions & 4 deletions

0 commit comments

Comments
 (0)