JSFiddle - React, Tailwind, and code Playground

by StepBaro

HTML

<script type="text/javascript">
  // NOTA: Se il file audio è su un dominio o sottodominio diverso non funzionerà su mobile.
  // Utilizzare la path relativa come sotto. (Senza "http://nomedominio.ext")
  var mp3 = '/wp-content/uploads/2020/01/PROVA-AUDIO-NUOVO-PLAYER.mp3';
  var mp3_mobile = '/wp-content/uploads/2017/07/musica-sito-Ultima.mp3';

  var iFrameBackup;
  var SoundState = true;

  jQuery(document).ready(function() {
    jQuery('#iframeAudio').attr('src', mp3);
    jQuery('#sound').attr('src', mp3);
    if (!isMobile()) {

    }
  });

  jQuery(window).load(function() {
    var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
    if (isMobile()) {
      jQuery('#iframeAudio').remove();
      jQuery('#sound').remove();

      // FOR MOBILE
      var isLoaded = false;
      var audioCtx = new(window.AudioContext || window.webkitAudioContext)();
      var source = audioCtx.createBufferSource();
      var xhr = new XMLHttpRequest();
      xhr.open('GET', mp3_mobile);
      xhr.responseType = 'arraybuffer';
      xhr.addEventListener('load', function(r) {
        audioCtx.decodeAudioData(
          xhr.response,
          function(buffer) {
            source.buffer = buffer;
            source.connect(audioCtx.destination);
            source.loop = true;
          });
        source.start(0);
        isLoaded = true;
      });
      xhr.send();

      jQuery('#sound_button').on('click', function() {
        if (!isLoaded) return false;

        SoundState = !SoundState

        if (!SoundState) { // Sound off

          jQuery('#sound_button').html("<img alt='Music Off' title='Music Off' src='http://www.gaetanosicaridj.it/wp-content/uploads/2016/01/audio_no.png' />");
          audioCtx.suspend();
        } else { // Sound on

          jQuery('#sound_button').html("<img alt='Riproduci' title='Music On' src='http://www.gaetanosicaridj.it/wp-content/uploads/2016/01/audio_si.png' />");
          audioCtx.resume();
     ...