Media player with esp32 s3 N16R8 and max98357 with sendspin synchronized audio

I feel the need to start a discussion about this media player setup I am trying to test without much luck, if anyone else is having a play with this setup and can offer some advice it would be great.

Background. I have been using these media players as stand alone players with great success for some time, I use them to modify old 1950’s radios along with some 1970 transistor radio’s.

I have 5 that I am playing with now trying to get the Resonate stuff running, with my current yaml I have the normal media player working 100% of the time. The resonate media player side just seems to reboot the esp32, there are no logs, just instant reboot, whether trying to play a group or trying to play as a single player.About every 10th time or so I try to play the resonate player it will work fine and play for a long time if left alone.

Here is the latest yaml

substitutions:

  name: media-player
  friendly_name: Media Player
  i2s_lrclk: GPIO11
  i2s_bclk: GPIO09
  spk: GPIO07
  ledpin: GPIO48   #14
  ota_password: "stuff"
  key_encryption: "stuff"
  wifi_ssid: !secret wifi_ssid_4
  wifi_password: !secret wifi_password_4
  wifi_ssid_2: !secret wifi_ssid_2
  wifi_password_2: !secret wifi_password_2
  red: 100%
  green: 0%
  blue: 0% 
  rgb: GRB
  chip: WS2812  #WS2812 / APA106

  task: false
  bufdur: 200ms
  bufsize: 1000000
  logger: DEBUG

wifi:
  networks:
  - ssid: ${wifi_ssid}
    password: ${wifi_password}
  - ssid: ${wifi_ssid_2}
    password: ${wifi_password_2}


esphome:
  name: ${name}
  friendly_name: ${friendly_name}

esp32:
  board: esp32-s3-devkitc-1
  cpu_frequency: 240MHz
  variant: esp32s3
  flash_size: 16MB
  framework:
    type: esp-idf
    version: 5.5.1
  
    sdkconfig_options:
      CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST: "y"
      CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY: "y"

      CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC: "y"
      CONFIG_MBEDTLS_SSL_PROTO_TLS1_3: "y"  # TLS1.3 support isn't enabled by default in IDF 5.1.5

###### Copy below  ########

# Enable logging
logger:
  level: ${logger}

# Enable Home Assistant API
api:
  encryption:
    key: ${key_encryption}

ota:
  - platform: esphome
    password: ${ota_password}

psram:
  mode: octal
  speed: 80MHz

external_components:
  - source:
      type: git
      url: https://github.com/esphome/esphome
      ref: 3ecdf16d7555a80baa712273a1ca5c5134e6cf04
    components: [audio, mdns, mixer, speaker, resampler, resonate]
    refresh: 0s

resonate:
  id: resonate_hub
  task_stack_in_psram: ${task}
  kalman_process_error: 0.01  # Filter tuning parameter for time synchronization

i2s_audio:
  - id: i2s_output
    i2s_lrclk_pin: 
      number: ${i2s_lrclk}
    i2s_bclk_pin:  
      number: ${i2s_bclk}

speaker:
  - platform: i2s_audio
    id: output_speaker
    i2s_dout_pin:   
      number: ${spk}
    dac_type: external    
    bits_per_sample: 16bit
    channel: mono
    buffer_duration: ${bufdur}
    timeout: never
    sample_rate: 48000
 
 # Virtual speakers to combine the announcement and media streams together into one output
  - platform: mixer
    id: mixing_speaker
    output_speaker: output_speaker
    num_channels: 1
    task_stack_in_psram: ${task}
    source_speakers:
      - id: announcement_mixing_input
        timeout: never
        buffer_duration: ${bufdur}
      - id: media_mixing_input
        timeout: never
        buffer_duration: ${bufdur}
      - id: resonate_mixing_input
        timeout: never
        buffer_duration: ${bufdur}

  # Vritual speakers to resample each pipelines' audio, if necessary, as the mixer speaker requires the same sample rate
  - platform: resampler
    id: announcement_resampling_speaker
    output_speaker: announcement_mixing_input
    task_stack_in_psram: ${task}
    sample_rate: 48000
    bits_per_sample: 16
  - platform: resampler
    id: media_resampling_speaker
    output_speaker: media_mixing_input
    task_stack_in_psram: ${task}
    sample_rate: 48000
    bits_per_sample: 16
  - platform: resampler
    id: resonate_resampling_speaker
    output_speaker: resonate_mixing_input
    task_stack_in_psram: ${task}
    sample_rate: 48000
    bits_per_sample: 16

media_player:
  - platform: speaker
    name: "player"
    id: media_out
   # volume_initial: 50%
    volume_min: 0.1
    volume_max: 1.0
    volume_increment: 0.1
    buffer_size: ${bufsize}
    announcement_pipeline:
      speaker: announcement_resampling_speaker
      format: FLAC     # FLAC is the least processor intensive codec
      num_channels: 2  # Stereo audio is unnecessary for announcements
      sample_rate: 48000
    media_pipeline:
      speaker: media_resampling_speaker
      format: FLAC    # FLAC is the least processor intensive codec
      num_channels: 2
      sample_rate: 48000
    on_announcement:
      - mixer_speaker.apply_ducking:
          id: media_mixing_input
          decibel_reduction: 20
          duration: 0.0s
      - mixer_speaker.apply_ducking:
          id: resonate_mixing_input
          decibel_reduction: 20
          duration: 0.0s

    on_play:              
        then:
        - light.turn_on:
            brightness: 100%
            red: ${red}
            green: ${green}
            blue: ${blue}
            id: led

    on_idle:              
        then:
        - light.turn_off:
            id: led            

    on_pause:              
        then:
        - light.turn_off:
            id: led  

  - platform: resonate
    id: resonate_media_player
    name: ${name} Resonate
    speaker: output_speaker
    task_stack_in_psram: ${task}

    on_play:               
        then:
        - light.turn_on:
            brightness: 100%
            red: ${red}
            green: ${green}
            blue: ${blue}
            id: led

    on_idle:              
        then:
        - light.turn_off:
            id: led            

switch:
  - platform: restart
    name: "${name} Reboot"
    id: reboot_media_player_lab_reboot

sensor:
  - platform: wifi_signal
    name: "${name} WiFi Signal Sensor"
    update_interval: 60s 

light:
  - platform: esp32_rmt_led_strip
    rgb_order: ${rgb}
    pin: ${ledpin}
    num_leds: 2
    chipset: ${chip}
    name: "${name} LED"
    id: led
    disabled_by_default: false
    #entity_category: diagnostic
    icon: mdi:led-on
    default_transition_length: 0s
    effects:
      - pulse:
          name: "Slow Pulse"
          transition_length: 150ms
          update_interval: 150ms
          min_brightness: 20%
          max_brightness: 100%
      - pulse:
          name: "Fast Pulse"
          transition_length: 150ms
          update_interval: 150ms
          min_brightness: 20%
          max_brightness: 100%

text_sensor:
  - platform: resonate
    type: title
    name: Track Title
  
  - platform: resonate
    type: artist
    name: Artist
  
  - platform: resonate
    type: album
    name: Album
  
  - platform: resonate
    type: year
    name: Year
  
  - platform: resonate
    type: track
    name: Track Number

I have tried changing a lot of setting for buffers etc but it makes little difference, I have also tried changing the sdkconfig_options with no luck.

So is anyone else trying this and could share some tips?

Could you explain why you want or need to use resonate as media player? Why not use the media player offered by the esp idf platform?

You’re likely to get more and better responsees on MA’s resonate-beta-testing discord channel.

I tried twice on the discord channel with only one reply which was of no use.

Resonate is a component for ESPHome, enabling synchronized audio playback across multiple devices.

I already use the esphome media player and have been for a long time, if you see in my yaml that player still exists and works perfectly. But it is not synchronized across players. Hence wanting to try this.

I was planning to test this.

If I get something working I will post here

thanks. I could do with some help.

As first test I installed on HAVPE
esphome 2025.12.0-dev20251123. It shows min version 2025.11.0 in example resonate file for HAVPE. I tried building on another of my devices and it could not find resonate component and I update from 11.0 to the dev12.0 version to check. I will build with 11.0 later after I test my nonHAVPE device

HAVPE.yaml
i used the file here recommended by this github post

Device shows in MusicAssistant and can be added as resonate player group
resonated media player shows in HA
works without issue

I will test a waveshare device i have and edit this post with result

Yep I know it works on vpe fine. It’s the esp and max in the title that is the issue.

It needs to be compiled in the dev branch of esphome.

With my yaml it shows in MA and can be grouped, even plays sometimes. The issue is it just reboots 9 times out of 10 when you try to play something.

plug into pc and get logs over usb

is this a question or an answer?

Yep it’s an answer, will only compile in the dev version

with my other device i get below when i try to play music with resonate. I gotta look over yaml. everything else looks OK from UI.

13:23:13.965][W][micro_wake_word:254]: Not enough free bytes in ring buffer to store incoming audio data. Resetting the ring buffer. Wake word detection accuracy will temporarily be reduced.
[13:23:13.965][D][ring_buffer:034]: Created ring buffer with size 38400
[13:23:13.973][D][ring_buffer:034]: Created ring buffer with size 38400
[13:23:14.081][D][ring_buffer:034]: Created ring buffer with size 38400
[13:23:14.082][D][ring_buffer:034]: Created ring buffer with size 38400

normal media player is OK (ring buffer 19200) so I am guessing this need to change. Need to learn how.

EDIT
reducing buffer size correct this but seems it may not have been related to my issue

I did try it with my esp32 based voice units, as well with little success. This was a few weeks ago, I don’t remember what the logs said. I then decided to concentrate on the media players as there is a lot less code. I can’t test right now as a power cut has caused my servers os to fail, maybe a day or 2 till I get back in control.

Actually it seems like HAV unit resonate media player does not playback after some time. Rebooting fixes but if that not working well I hold little hope for other devices

I finally found a bit of time to get the logs from attempting to play an album from MA.

[14:31:53]e[I][logger:121]: Log initialized
[14:31:53]
[14:31:53][C][safe_mode:084]: Unsuccessful boot attempts: 5
[14:31:53]
[14:31:53][D][esp32.preferences:149]: Writing 1 items: 0 cached, 1 written, 0 failed
[14:31:53]
[14:31:53][I][app:073]: Running through setup()
[14:31:53]
[14:31:53][C][component:173]: Setup preferences took 0ms
[14:31:53]
[14:31:53][C][component:173]: Setup esp32_rmt_led_strip.light took 1ms
[14:31:53]
[14:31:53][D][light:090]: 'kitchen-radio LED' Setting:
[14:31:53]
[14:31:53][D][light:096]:   Color mode: RGB
[14:31:53]
[14:32:08][C][component:173]: Setup [I][resonate.websocket:120][httpd]: client opened a connection
[14:32:08][I][resonate.hub:275][httpd]: Handshake done, a new connection was opened
[14:32:08][D][resonate.hub:524][httpd]: Connected to server Music Assistant with id 732a9beac173431b9c345732b67c04fe
[14:32:12][D][api:161]: Accept 192.168.1.87
[14:32:12][W][component:337]: api cleared Warning flag
[14:32:12][D][api.connection:1386]: Home Assistant 2025.11.3 (192.168.1.87) connected
[14:32:20][D][resonate.hub:132]: Trying to start decode task
[14:32:20][D][resonate.hub:712][resonate_decode]: Decode task - High water mark changed from 5304 to 4216.
[14:32:20][D][text_sensor:087][httpd]: 'Year': Sending state '1997'
[14:32:20][D][text_sensor:087][httpd]: 'Track Number': Sending state '1'
[14:32:20][D][text_sensor:087][httpd]: 'Track Title': Sending state 'All Mod Cons'
[14:32:20][D][text_sensor:087][httpd]: 'Artist': Sending state 'Jam'
[14:32:20][D][text_sensor:087][httpd]: 'Album': Sending state 'All Mod Cons'
[14:32:20][D][text_sensor:087][httpd]: 'Year': Sending state '0'
[14:32:20][D][text_sensor:087][httpd]: 'Track Number': Sending state '1'
[14:32:20][D][resonate.hub:451][httpd]: Stream Started
[14:32:20][D][resonate.hub:712][resonate_decode]: Decode task - High water mark changed from 8192 to 5304.
[14:32:20][D][text_sensor:087][httpd]: 'Track Title': Sending state 'All Mod Cons'
[14:32:20][D][text_sensor:087][httpd]: 'Artist': Sending state 'Jam'
[14:32:20][D][text_sensor:087][httpd]: 'Album': Sending state 'All Mod Cons'
[14:32:20][D][resonate.hub:162]: Decode task starting
[14:32:20][D][resonate.hub:167]: Decode task running
[14:32:20][D][resonate.media_player:219]: Starting
[14:32:20][D][resonate.media_player:223]: Started
[14:32:20][D][light:090]: 'kitchen-radio LED' Setting:
[14:32:20][D][light:103]:   State: ON
[14:32:20][D][light:078]:   Brightness: 100%
[14:32:20][D][light:114]:   Red: 100%, Green: 0%, Blue: 0%
[14:32:20][D][resonate.media_player:302]: State changed to PLAYING
[14:32:20][D][resonate.hub:712][resonate_decode]: Decode task - High water mark changed from 4200 to 4072.
[14:32:20][D][ring_buffer:034][speaker_task]: Created ring buffer with size 11520
[14:32:20][D][text_sensor:087][httpd]: 'Track Title': Sending state 'All Mod Cons'
[14:32:20][D][text_sensor:087][httpd]: 'Artist': Sending state 'Jam'
[14:32:20][D][text_sensor:087][httpd]: 'Album': Sending state 'All Mod Cons'
[14:32:20][D][text_sensor:087][httpd]: 'Year': Sending state '1997'
[14:32:20][D][text_sensor:087][httpd]: 'Track Number': Sending state '1'
[14:32:20][D][resonate.hub:712][resonate_decode]: Decode task - High water mark changed from 4216 to 4200.
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 0us. There are 0 pending frames for correction, and the deque has 0 entries
[14:32:20][D][i2s_audio.speaker:102]: Starting
[14:32:20][D][i2s_audio.speaker:106]: Started
[14:32:20][W][resonate.media_player:490][resonate_sync]: Potential buffer underflow incoming
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is -25000us. There are 1200 pending frames for correction, and the deque has 1 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is -50000us. There are 2400 pending frames for correction, and the deque has 2 entries
[14:32:20][D][resonate.media_player:572][resonate_sync]: Out of sync, muting output until corrected
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 689404us. There are 1200 pending frames for correction, and the deque has 2 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 664404us. There are 2400 pending frames for correction, and the deque has 3 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 639404us. There are 2400 pending frames for correction, and the deque has 3 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 614404us. There are 3600 pending frames for correction, and the deque has 4 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 589404us. There are 2400 pending frames for correction, and the deque has 3 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 564404us. There are 3600 pending frames for correction, and the deque has 4 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 539404us. There are 3600 pending frames for correction, and the deque has 4 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 514403us. There are 4800 pending frames for correction, and the deque has 5 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 489404us. There are 4800 pending frames for correction, and the deque has 5 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 464404us. There are 4800 pending frames for correction, and the deque has 5 entries
[14:32:20][D][resonate.media_player:612][resonate_sync]: Hard sync: adding 1200 frames of silence. Current error is 439404us. There are 6000 pending frames for correction, and the deque has 6 entries
[14:32:20]
[14:32:20]assert failed: block_locate_free tlsf_control_functions.h:618 (block_size(block) >= *size)
[14:32:20]
[14:32:20]
[14:32:20]Backtrace: 0x4037d585:0x3fcb1f90 0x4037d54d:0x3fcb1fb0 0x40385471:0x3fcb1fd0 0x403836d9:0x3fcb20f0 0x40383291:0x3fcb2110 0x40376e9f:0x3fcb2130 0x40376eb9:0x3fcb2160 0x403770e0:0x3fcb2180 0x40376b09:0x3fcb21d0 0x420e20aa:0x3fcb21f0 0x403886e1:0x3fcb2220 0x4038897f:0x3fcb2250 0x40388e29:0x3fcb2290 0x40041502:0x3fcb22d0 0x4038626e:0x3fcb2300
[14:32:20]
[14:32:20]
[14:32:20]
[14:32:20]
[14:32:20]ELF file SHA256: d1a561c19
[14:32:20]
[14:32:20]Rebooting...
[14:32:20]ESP-ROM:esp32s3-20210327
[14:32:20]Build:Mar 27 2021
[14:32:21]rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
[14:32:21]Saved PC:0x4037d72d
[14:32:21]SPIWP:0xee
[14:32:21]mode:DIO, clock div:1
[14:32:21]load:0x3fce2820,len:0x158c
[14:32:21]load:0x403c8700,len:0xc80
[14:32:21]load:0x403cb700,len:0x2f40
[14:32:21]entry 0x403c8908
[14:32:21]I (24) boot: ESP-IDF 5.5.1 2nd stage bootloader
[14:32:21]I (24) boot: compile time Nov 23 2025 09:42:11
[14:32:21]I (24) boot: Multicore bootloader
[14:32:21]I (24) boot: chip revision: v0.2
[14:32:21]I (24) boot: efuse block revision: v1.3
[14:32:21]I (25) boot.esp32s3: Boot SPI Speed : 80MHz
[14:32:21]I (25) boot.esp32s3: SPI Mode       : DIO
[14:32:21]I (25) boot.esp32s3: SPI Flash Size : 16MB
[14:32:21]I (25) boot: Enabling RNG early entropy source...
[14:32:21]I (25) boot: Partition Table:
[14:32:21]I (26) boot: ## Label            Usage          Type ST Offset   Length
[14:32:21]I (26) boot:  0 otadata          OTA data         01 00 00009000 00002000
[14:32:21]I (26) boot:  1 phy_init         RF data          01 01 0000b000 00001000
[14:32:21]I (27) boot:  2 app0             OTA app          00 10 00010000 007c0000
[14:32:21]I (27) boot:  3 app1             OTA app          00 11 007d0000 007c0000
[14:32:21]I (28) boot:  4 nvs              WiFi data        01 02 00f90000 0006d000
[14:32:21]I (28) boot: End of partition table
[14:32:21]I (28) esp_image: segment 0: paddr=007d0020 vaddr=3c0f0020 size=45a14h (285204) map
[14:32:21]I (79) esp_image: segment 1: paddr=00815a3c vaddr=3fc9b800 size=04bb8h ( 19384) load
[14:32:21]I (83) esp_image: segment 2: paddr=0081a5fc vaddr=40374000 size=05a1ch ( 23068) load
[14:32:21]I (89) esp_image: segment 3: paddr=00820020 vaddr=42000020 size=e83a8h (951208) map
[14:32:21]I (257) esp_image: segment 4: paddr=009083d0 vaddr=40379a1c size=11cf0h ( 72944) load
[14:32:21]I (273) esp_image: segment 5: paddr=0091a0c8 vaddr=50000000 size=00020h (    32) load
[14:32:21]I (283) boot: Loaded app from partition at offset 0x7d0000
[14:32:21]I (283) boot: Disabling RNG early entropy source...
[14:32:22][I][logger:121]: Log initialized
[14:32:22][C][safe_mode:084]: Unsuccessful boot attempts: 6
[14:32:22][D][esp32.preferences:149]: Writing 1 items: 0 cached, 1 written, 0 failed
[14:32:22][I][app:073]: Running through setup()
[14:32:22][C][component:173]: Setup preferences took 0ms
[14:32:22][C][component:173]: Setup esp32_rmt_led_strip.light took 1ms
[14:32:22][D][light:090]: 'kitchen-radio LED' Setting:
[14:32:22][D][light:096]:   Color mode: RGB
[14:32:22][C][component:173]: Setup light took 3ms
[14:32:22][C][component:173]: Setup psram took 0ms
[14:32:22][C][component:173]: Setup i2s_audio took 0ms
[14:32:22][C][component:173]: Setup mixer.speaker took 0ms
[14:32:22][C][component:173]: Setup mixer.speaker took 0ms
[14:32:22][C][component:173]: Setup mixer.speaker took 0ms
[14:32:22][C][component:173]: Setup mixer.speaker took 0ms
[14:32:22][C][component:173]: Setup resampler.speaker took 0ms
[14:32:22][C][component:173]: Setup resampler.speaker took 0ms
[14:32:22][C][component:173]: Setup resampler.speaker took 0ms
[14:32:22][C][component:173]: Setup restart.switch took 0ms
[14:32:22][C][component:173]: Setup resonate.text_sensor took 0ms
[14:32:22][C][component:173]: Setup resonate.text_sensor took 1ms
[14:32:22][C][component:173]: Setup resonate.text_sensor took 0ms
[14:32:22][C][component:173]: Setup resonate.text_sensor took 0ms
[14:32:22][C][component:173]: Setup resonate.text_sensor took 0ms
[14:32:22][C][component:173]: Setup i2s_audio.speaker took 0ms
[14:32:22][I][speaker_media_player:109]: Set up speaker media player
[14:32:22][C][component:173]: Setup speaker.media_player took 2ms
[14:32:22][C][wifi:345]: Starting
[14:32:22][C][wifi:345]:  Local MAC: 9C:13:9E:AB:11:2C
[14:32:22][I][wifi:305]: Starting scan
[14:32:22][D][wifi:892]: Starting scan
[14:32:22][C][component:173]: Setup wifi took 67ms
[14:32:22][C][component:173]: Setup esphome.ota took 1ms
[14:32:22][C][component:173]: Setup safe_mode took 0ms
[14:32:22][W][component:298]: api set Warning flag: unspecified
[14:32:22][C][component:173]: Setup api took 1ms
[14:32:22][C][component:173]: Setup resonate took 0ms
[14:32:22][C][component:173]: Setup wifi_signal.sensor took 0ms
[14:32:22][C][component:173]: Setup mdns took 1ms
[14:32:22][D][light:090]: 'kitchen-radio LED' Setting:
[14:32:22][C][component:173]: Setup resonate.media_player took 2ms
[14:32:22][I][app:120]: setup() finished successfully!

Can anyone offer any insights?

Update on AIOresonate from @ maximmaxim345 on github

The protocol specification is not yet fully finalized, but we are getting very close to that.
As for implementations, we will soon have:

  • A almost fully spec compliant python server library (now called aioresonate)
  • A Music Assistant Provider using aioresonate
  • A almost fully spec complaint VPE Alpha Firmware
  • A spec compliant python client (now called aioresonate-cli)
  • A minimal but spec compliant js library for players
  • Experimental Resonate Support in the Music Assistant Frontend using that js library
  • A proof of concept Google Cast implementation of Resonate, including synchronized audio
  • A highly experimental option to use Resonate for Chromecast devices in Music Assistant
2 Likes

An update.

I have changed the title to keep up with the changes to the protocol.

A major update has been committed for testing. I now have a reasonably successful attempt at a media player. It is still suffering the occasional crash. But I now have my 6 test players and 3 Chromecasts all happily syncing.

Have a look and feel free to add hints or tips for improvements, please remember a few things.

I am no expert, but will try to help if i can but can’t be held responsible for any issues.

This is in Alpha and not expected to work as you might want, there will be issues.

Here is that code

2 Likes