ESP32-audioI2S icon indicating copy to clipboard operation
ESP32-audioI2S copied to clipboard

Interrupted Bluetooth Replay when using I2S to Bluetooth Module TSA5001

Open chess-levin opened this issue 1 year ago • 1 comments

Hello Wolle!

I'm trying out this TSA5001 module. It converts an I2S stream directly to Bluetooth. My webradio project uses your audio lib and I replaced the PCM5102a with a TSA5001 module to transmit the playback to my BT speakers.

When I connect to German public radio stations (WDR, NDR, Radio Bremen) the played sound is perfect. But every private radio station stream playback I'm testing is interrupted approx. every 4 seconds for half a second. Then it continues perfectly for the next 4 secs. There are some stations that behave in another way: They are played too fast - it sounds like Mikey Mouse :-) And they are interrupted every 0,75secs.

My analysis shows that these problems could be related to different bit or/and sampling rates. Here are some examples

Properties of public radio stations streams that are playing perfectly:

[716382][I][main.cpp:664] audio_info(): info        Connect to new host: "http://wdr-wdr5-live.icecastssl.wdr.de/wdr/wdr5/live/mp3/128/stream.mp3"
[716388][V][ssl_client.cpp:321] stop_ssl_socket(): Cleaning SSL connection.
[716393][I][main.cpp:664] audio_info(): info        buffers freed, free Heap: 127560 bytes
[716459][I][main.cpp:664] audio_info(): info        Connection has been established in 57 ms, free Heap: 126852 bytes
[716546][I][main.cpp:664] audio_info(): info        redirect to new host "http://f121.rndfnk.com/ard/wdr/wdr5/live/mp3/128/stream.mp3?cid=01FBS0E239W9R7GR1S5Q7RTQRC&sid=2dRoZsiHLqv60IFig0iU1iTdAf1&token=QCY8z_hu46cD23uVJtLW8rexUjqF6Fleqipbp5H56VY&tvf=iJ2SbK0luxdmMTIxLnJuZGZuay5jb20"
[716561][I][main.cpp:664] audio_info(): info        Connect to new host: "http://f121.rndfnk.com/ard/wdr/wdr5/live/mp3/128/stream.mp3?cid=01FBS0E239W9R7GR1S5Q7RTQRC&sid=2dRoZsiHLqv60IFig0iU1iTdAf1&token=QCY8z_hu46cD23uVJtLW8rexUjqF6Fleqipbp5H56VY&tvf=iJ2SbK0luxdmMTIxLnJuZGZuay5jb20"
[716589][V][ssl_client.cpp:321] stop_ssl_socket(): Cleaning SSL connection.
[716594][I][main.cpp:664] audio_info(): info        buffers freed, free Heap: 126752 bytes
[716655][I][main.cpp:664] audio_info(): info        Connection has been established in 52 ms, free Heap: 126208 bytes
[716694][I][main.cpp:689] audio_bitrate(): bitrate     128000
[716698][I][main.cpp:673] audio_showstation(): station     WDR 5, Westdeutscher Rundfunk Koeln
[716700][I][main.cpp:695] audio_icyurl(): icyurl      https://www1.wdr.de/radio/wdr5/index.html
[716716][I][main.cpp:664] audio_info(): info        MP3Decoder has been initialized, free Heap: 82784 bytes , free stack 5520 DWORDs
[716720][I][main.cpp:698] audio_lasthost(): lasthost    http://f121.rndfnk.com/ard/wdr/wdr5/live/mp3/128/stream.mp3?cid=01FBS0E239W9R7GR1S5Q7RTQRC&sid=2dRoZsiHLqv60IFig0iU1iTdAf1&token=QCY8z_hu46cD23uVJtLW8rexUjqF6Fleqipbp5H56VY&tvf=iJ2SbK0luxdmMTIxLnJuZGZuay5jb20
[716747][I][main.cpp:664] audio_info(): info        stream ready
[716847][I][main.cpp:664] audio_info(): info        Channels: 2
[716847][I][main.cpp:664] audio_info(): info        SampleRate: 48000
[716854][I][main.cpp:664] audio_info(): info        BitsPerSample: 16
[716861][I][main.cpp:664] audio_info(): info        BitRate: 128000

==============

[3216518][I][main.cpp:664] audio_info(): info        Channels: 1
[3216521][I][main.cpp:664] audio_info(): info        SampleRate: 48000
[3216528][I][main.cpp:664] audio_info(): info        BitsPerSample: 16
[3216536][I][main.cpp:664] audio_info(): info        BitRate: 64000
[3216739][I][main.cpp:664] audio_info(): info        StreamTitle='Bremen Zwei'
[3216740][I][main.cpp:677] audio_showstreamtitle(): currentStreamTitle 'Bremen Zwei'  11

Properties of streams that are continuously interrupted:

[1498274][I][main.cpp:664] audio_info(): info        Channels: 2
[1498274][I][main.cpp:664] audio_info(): info        SampleRate: 44100
[1498281][I][main.cpp:664] audio_info(): info        BitsPerSample: 16
[1498288][I][main.cpp:664] audio_info(): info        BitRate: 192000

===============================

[1618710][I][main.cpp:664] audio_info(): info        Channels: 2
[1618710][I][main.cpp:664] audio_info(): info        SampleRate: 44100
[1618717][I][main.cpp:664] audio_info(): info        BitsPerSample: 16
[1618725][I][main.cpp:664] audio_info(): info        BitRate: 320000

Properties of stream that are playing with Mickey Mouse voice (pitch is to high)

[3017508][I][main.cpp:664] audio_info(): info        Connect to new host: "http://rnrw.cast.addradio.de/rnrw-0182/deinrock/low/stream.mp3"
[3017513][V][ssl_client.cpp:321] stop_ssl_socket(): Cleaning SSL connection.
[3017518][I][main.cpp:664] audio_info(): info        buffers freed, free Heap: 127616 bytes
[3017589][I][main.cpp:664] audio_info(): info        Connection has been established in 62 ms, free Heap: 126912 bytes
[3018094][I][main.cpp:664] audio_info(): info        redirect to new host "http://rnrw--di--rnrw-ais-01--04--cdn.cast.addradio.de/rnrw/deinrock/low/stream.mp3?_art=dj0yJmlwPTc3LjIyLjEzOS4yMTAmaWQ9aWNzY3hsLW1qaHNrZnhrYiZ0PTE3MTAwNjkwMTEmcz03ODY2ZjI5YyM3ZTcwMjQzZDBlNTQ5YjkxZTVhNmUxMWVjN2Y2YzQxMg"
[3018110][I][main.cpp:664] audio_info(): info        Connect to new host: "http://rnrw--di--rnrw-ais-01--04--cdn.cast.addradio.de/rnrw/deinrock/low/stream.mp3?_art=dj0yJmlwPTc3LjIyLjEzOS4yMTAmaWQ9aWNzY3hsLW1qaHNrZnhrYiZ0PTE3MTAwNjkwMTEmcz03ODY2ZjI5YyM3ZTcwMjQzZDBlNTQ5YjkxZTVhNmUxMWVjN2Y2YzQxMg"
[3018138][V][ssl_client.cpp:321] stop_ssl_socket(): Cleaning SSL connection.
[3018144][I][main.cpp:664] audio_info(): info        buffers freed, free Heap: 126972 bytes
[3018214][I][main.cpp:664] audio_info(): info        Connection has been established in 61 ms, free Heap: 126232 bytes
[3018798][I][main.cpp:689] audio_bitrate(): bitrate     64000
[3018803][I][main.cpp:695] audio_icyurl(): icyurl      
[3018812][I][main.cpp:664] audio_info(): info        MP3Decoder has been initialized, free Heap: 102392 bytes , free stack 5296 DWORDs
[3018814][I][main.cpp:698] audio_lasthost(): lasthost    http://rnrw--di--rnrw-ais-01--04--cdn.cast.addradio.de/rnrw/deinrock/low/stream.mp3?_art=dj0yJmlwPTc3LjIyLjEzOS4yMTAmaWQ9aWNzY3hsLW1qaHNrZnhrYiZ0PTE3MTAwNjkwMTEmcz03ODY2ZjI5YyM3ZTcwMjQzZDBlNTQ5YjkxZTVhNmUxMWVjN2Y2YzQxMg  
[3019206][I][main.cpp:664] audio_info(): info        stream ready
[3019206][I][main.cpp:664] audio_info(): info        syncword found at pos 0
[3019213][I][main.cpp:664] audio_info(): info        Channels: 2
[3019216][I][main.cpp:664] audio_info(): info        SampleRate: 24000
[3019223][I][main.cpp:664] audio_info(): info        BitsPerSample: 16
[3019231][I][main.cpp:664] audio_info(): info        BitRate: 64000
[3019475][I][main.cpp:664] audio_info(): info        StreamTitle=''
[3019476][I][main.cpp:677] audio_showstreamtitle(): currentStreamTitle ''  0

[3019551][I][main.cpp:664] audio_info(): info        durationMilliseconds='30168'
[3019551][I][main.cpp:692] audio_commercial(): commercial  30168
[3025050][V][main.cpp:365] savePreferencesCB(): Saved preferences
[3049470][I][main.cpp:664] audio_info(): info        StreamTitle='ASIA - HEAT OF THE MOMENT'
[3049470][I][main.cpp:677] audio_showstreamtitle(): currentStreamTitle 'ASIA - HEAT OF THE MOMENT'  25

Am I missing some configuration options? Do you have any ideas?

You can find audio-setup in my main class..

chess-levin avatar Mar 09 '24 11:03 chess-levin

Okay. RTFM. The specs of the TSA5102:

Bluetooth v5.3 specification support
I2S digital input
Sampling Rate: 48KHz
Bit per Sample: 16 bit, 24bit, 32bit.
aptX, aptX Low Latency, aptX HD, SBC and AAC
Bluetooth protocol: A2DP

The fixed Sampling Rate of 48KHz explains the issues with streams using other sample rates e.g. 44100 or 24000Hz.

@schreibfaul1 : Is there a way to resample the stream with 48KHz on the fly to match the TSA5001 specs?

chess-levin avatar Mar 09 '24 13:03 chess-levin

This issue is stale because it has been open for 30 days with no activity.

github-actions[bot] avatar Apr 11 '24 02:04 github-actions[bot]

This issue was closed because it has been inactive for 14 days since being marked as stale.

github-actions[bot] avatar Apr 25 '24 02:04 github-actions[bot]