Logic Machine Forum
sound on Win/PC and Android/Tablet - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: General (https://forum.logicmachine.net/forumdisplay.php?fid=2)
+--- Thread: sound on Win/PC and Android/Tablet (/showthread.php?tid=1314)

Pages: 1 2


RE: sound on Win/PC and Android/Tablet - gdimaria - 24.12.2020

(24.12.2020, 08:46)admin Wrote: This should do what you want. You can change the interval (it is 2000 milliseconds now) if needed.
Code:
  var interval;
 
  // Function to play audio by URL
  function Play_Audio(url){
    //console.log(OS_Version)
    if (OS_Version === 'Android' || OS_Version === 'U.Motion' ){
        //alert(OS_Version);
      snd.src = url;
        snd.pause();
        sndcurrentTime = 0;
      //snd.load();
      snd.play();
    } else {
      request.open("GET", url, true);
      request.responseType = "arraybuffer";
      request.onload = function(){
          ctx.decodeAudioData(request.response, onDecoded);
      }
      function onDecoded(buffer){
          var bufferSource = ctx.createBufferSource();
          bufferSource.buffer = buffer;
          bufferSource.connect(ctx.destination);
          bufferSource.start();
      }
      request.send();
    }
  };
 
  // Function to create event listeners
  function CreateListeners(groupaddr,url){
    // Make event listener to object
    if (typeof grp != 'undefined') {
      grp.listen(groupaddr, function(object, state) {
        var value = object.value;
        var enabled = grp.getvalue('32/2/1');
        clearInterval(interval);
        if (state == 'value' && value == 1 && enabled) {
          Play_Audio(url);
          interval = setInterval(function() {
            Play_Audio(url);
          }, 2000);
        }
      }, true);
    }
  }
   
  // Start creating listeners
  for (var i in AudioTable) {
    CreateListeners(AudioTable[i].address,AudioTable[i].url);
  }
});


Great! Thank you so much. And best wishes!


Peppe


RE: sound on Win/PC and Android/Tablet - gdimaria - 27.12.2020

(21.12.2020, 07:32)admin Wrote: You can use grp.taglisten(tag_name, callback_function, all_events) instead of grp.listen(group_address, callback_function, all_events) for this


I tried to use grp.taglisten instead of grp.listen... but evidently I made some mistake:

Code:
// allarme sonoro
  // Closing current script section to add elements
</script>
<audio id="SE_Audio" style="display: none;"></audio>
<script type="text/javascript"> // Starting new script section after adding elements 

$(function(){

   // Table with parameters
   var AudioTable = [
     { tag_name:"beep", url:"/scada/resources/img/beep.mp3"},
    // { address:"32/2/1", url:"/user/audio2.mp3" },
     //{ address:"32/2/2", url:"/user/audio3.mp3" },
   ];
         
   var ctx = new(window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.oAudioContext || window.msAudioContext), request = new XMLHttpRequest();
   var snd = document.getElementById("SE_Audio");
 
  function getMobileOperatingSystem() {
    var userAgent = navigator.userAgent || navigator.vendor || window.opera;
    //console.log(userAgent)
    if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {
      return 'iOS';
    } else if ( userAgent.match(/Android/i)) {
      return 'Android';
    } else if ( userAgent.match(/iKonWebTouch/i)) {
      return 'U.Motion';
    } else {
      return 'PC';
    }
  }

  var OS_Version = getMobileOperatingSystem();
 
  // Fix iOS Audio Context
  (function() {
    var fixAudioContext = function (e) {
      if (ctx) {
        // Create empty buffer
        var buffer = ctx.createBuffer(1, 1, 22050);
        var source = ctx.createBufferSource();
        source.buffer = buffer;
        // Connect to output
        source.connect(ctx.destination);
        // Play sound
        if (source.start) {
          source.start(0);
        } else if (source.play) {
          source.play(0);
        } else if (source.noteOn) {
          source.noteOn(0);
        }
      }
      // Check if document is loaded in iframe
      if (window.frameElement){
        // Remove event listeners from parent
        var thisparent = window.parent;
        thisparent.document.removeEventListener('touchstart', fixAudioContext);
        thisparent.document.removeEventListener('touchend', fixAudioContext);
      }
      // Remove events
      document.removeEventListener('touchstart', fixAudioContext);
      document.removeEventListener('touchend', fixAudioContext);
    };
    // Check if document is loaded in iframe
    if (window.frameElement){
      // Add event listeners to parent
      var thisparent = window.parent;
      // Event listener for iOS 6-8 (was previous touchstart event)
      thisparent.document.addEventListener('touchstart', fixAudioContext);
      // Event listener for iOS 9+ (is now touchend event)
      thisparent.document.addEventListener('touchend', fixAudioContext);
    }
    // Event listener for iOS 6-8 (was previous touchstart event)
    document.addEventListener('touchstart', fixAudioContext);
    // Event listener for iOS 9+ (is now touchend event)
    document.addEventListener('touchend', fixAudioContext);
  })();
 
var interval;
 
  // Function to play audio by URL
  function Play_Audio(url){
    //console.log(OS_Version)
    if (OS_Version === 'Android' || OS_Version === 'U.Motion' ){
        //alert(OS_Version);
      snd.src = url;
        snd.pause();
        sndcurrentTime = 0;
      //snd.load();
      snd.play();
    } else {
      request.open("GET", url, true);
      request.responseType = "arraybuffer";
      request.onload = function(){
          ctx.decodeAudioData(request.response, onDecoded);
      }
      function onDecoded(buffer){
          var bufferSource = ctx.createBufferSource();
          bufferSource.buffer = buffer;
          bufferSource.connect(ctx.destination);
          bufferSource.start();
      }
      request.send();
    }
  };
 
  // Function to create event listeners
  function CreateListeners(tag_name,url){
    // Make event listener to object
    if (typeof grp != 'undefined') {
      grp.taglisten(tag_name, function(object, state) {
        var value = object.value;
        var enabled = grp.getvalue('32/1/21');
        clearInterval(interval);
        if (state == 'value' && value == 1 && enabled) {
          Play_Audio(url);
          interval = setInterval(function() {
            Play_Audio(url);
          }, 2000);
        }
      }, true);
    }
  }
   
  // Start creating listeners
  for (var i in AudioTable) {
    CreateListeners(AudioTable[i].tag_name,AudioTable[i].url);
  }
});

Best Wishes

Peppe




RE: sound on Win/PC and Android/Tablet - Erwin van der Zwart - 27.12.2020

This should work:
Code:
// Closing current script section to add elements
</script>
<audio id="SE_Audio" style="display: none;"></audio>
<script type="text/javascript"> // Starting new script section after adding elements 

$(function(){
         
  var ctx = new(window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.oAudioContext || window.msAudioContext), request = new XMLHttpRequest();
  var snd = document.getElementById("SE_Audio");
 
  function getMobileOperatingSystem() {
    var userAgent = navigator.userAgent || navigator.vendor || window.opera;
    //console.log(userAgent)
    if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {
      return 'iOS';
    } else if ( userAgent.match(/Android/i)) {
      return 'Android';
    } else if ( userAgent.match(/iKonWebTouch/i)) {
      return 'U.Motion';
    } else {
      return 'PC';
    }
  }

  var OS_Version = getMobileOperatingSystem();
 
  // Fix iOS Audio Context
  (function() {
    var fixAudioContext = function (e) {
      if (ctx) {
        // Create empty buffer
        var buffer = ctx.createBuffer(1, 1, 22050);
        var source = ctx.createBufferSource();
        source.buffer = buffer;
        // Connect to output
        source.connect(ctx.destination);
        // Play sound
        if (source.start) {
          source.start(0);
        } else if (source.play) {
          source.play(0);
        } else if (source.noteOn) {
          source.noteOn(0);
        }
      }
      // Check if document is loaded in iframe
      if (window.frameElement){
        // Remove event listeners from parent
        var thisparent = window.parent;
        thisparent.document.removeEventListener('touchstart', fixAudioContext);
        thisparent.document.removeEventListener('touchend', fixAudioContext);
      }
      // Remove events
      document.removeEventListener('touchstart', fixAudioContext);
      document.removeEventListener('touchend', fixAudioContext);
    };
    // Check if document is loaded in iframe
    if (window.frameElement){
      // Add event listeners to parent
      var thisparent = window.parent;
      // Event listener for iOS 6-8 (was previous touchstart event)
      thisparent.document.addEventListener('touchstart', fixAudioContext);
      // Event listener for iOS 9+ (is now touchend event)
      thisparent.document.addEventListener('touchend', fixAudioContext);
    }
    // Event listener for iOS 6-8 (was previous touchstart event)
    document.addEventListener('touchstart', fixAudioContext);
    // Event listener for iOS 9+ (is now touchend event)
    document.addEventListener('touchend', fixAudioContext);
  })();
 
var interval;
 
  // Function to play audio by URL
  function Play_Audio(url){
    //console.log('play activated')
    if (OS_Version === 'Android' || OS_Version === 'U.Motion' ){
      snd.src = url;
        snd.pause();
        sndcurrentTime = 0;
      snd.play();
    } else {
      request.open("GET", url, true);
      request.responseType = "arraybuffer";
      request.onload = function(){
         ctx.decodeAudioData(request.response, onDecoded);
      }
      function onDecoded(buffer){
          var bufferSource = ctx.createBufferSource();
          bufferSource.buffer = buffer;
          bufferSource.connect(ctx.destination);
          bufferSource.start();
      }
      request.send();
    }
  };

  // Make event listener to object
  if (typeof grp != 'undefined') {
    grp.taglisten("beep", function(object, state) {
      var value = object.value;
      var enabled = grp.getvalue('32/1/21');
      // Enable for testing
      //enabled = true;
      clearInterval(interval);
      if (state == 'value' && value == 1 && enabled) {
        Play_Audio("/scada/resources/img/beep.mp3");
        interval = setInterval(function() {
          Play_Audio("/scada/resources/img/beep.mp3");
        }, 2000);
      }
    }, true);
  }

});



RE: sound on Win/PC and Android/Tablet - gdimaria - 27.12.2020

(27.12.2020, 12:14)Erwin van der Zwart Wrote: This should work:
Code:
// Closing current script section to add elements
</script>
<audio id="SE_Audio" style="display: none;"></audio>
<script type="text/javascript"> // Starting new script section after adding elements 

$(function(){
        
  var ctx = new(window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.oAudioContext || window.msAudioContext), request = new XMLHttpRequest();
  var snd = document.getElementById("SE_Audio");
 
  function getMobileOperatingSystem() {
    var userAgent = navigator.userAgent || navigator.vendor || window.opera;
    //console.log(userAgent)
    if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {
      return 'iOS';
    } else if ( userAgent.match(/Android/i)) {
      return 'Android';
    } else if ( userAgent.match(/iKonWebTouch/i)) {
      return 'U.Motion';
    } else {
      return 'PC';
    }
  }

  var OS_Version = getMobileOperatingSystem();
 
  // Fix iOS Audio Context
  (function() {
    var fixAudioContext = function (e) {
      if (ctx) {
        // Create empty buffer
        var buffer = ctx.createBuffer(1, 1, 22050);
        var source = ctx.createBufferSource();
        source.buffer = buffer;
        // Connect to output
        source.connect(ctx.destination);
        // Play sound
        if (source.start) {
          source.start(0);
        } else if (source.play) {
          source.play(0);
        } else if (source.noteOn) {
          source.noteOn(0);
        }
      }
      // Check if document is loaded in iframe
      if (window.frameElement){
        // Remove event listeners from parent
        var thisparent = window.parent;
        thisparent.document.removeEventListener('touchstart', fixAudioContext);
        thisparent.document.removeEventListener('touchend', fixAudioContext);
      }
      // Remove events
      document.removeEventListener('touchstart', fixAudioContext);
      document.removeEventListener('touchend', fixAudioContext);
    };
    // Check if document is loaded in iframe
    if (window.frameElement){
      // Add event listeners to parent
      var thisparent = window.parent;
      // Event listener for iOS 6-8 (was previous touchstart event)
      thisparent.document.addEventListener('touchstart', fixAudioContext);
      // Event listener for iOS 9+ (is now touchend event)
      thisparent.document.addEventListener('touchend', fixAudioContext);
    }
    // Event listener for iOS 6-8 (was previous touchstart event)
    document.addEventListener('touchstart', fixAudioContext);
    // Event listener for iOS 9+ (is now touchend event)
    document.addEventListener('touchend', fixAudioContext);
  })();
 
var interval;
 
  // Function to play audio by URL
  function Play_Audio(url){
    //console.log('play activated')
    if (OS_Version === 'Android' || OS_Version === 'U.Motion' ){
      snd.src = url;
        snd.pause();
        sndcurrentTime = 0;
      snd.play();
    } else {
      request.open("GET", url, true);
      request.responseType = "arraybuffer";
      request.onload = function(){
         ctx.decodeAudioData(request.response, onDecoded);
      }
      function onDecoded(buffer){
          var bufferSource = ctx.createBufferSource();
          bufferSource.buffer = buffer;
          bufferSource.connect(ctx.destination);
          bufferSource.start();
      }
      request.send();
    }
  };

  // Make event listener to object
  if (typeof grp != 'undefined') {
    grp.taglisten("beep", function(object, state) {
      var value = object.value;
      var enabled = grp.getvalue('32/1/21');
      // Enable for testing
      //enabled = true;
      clearInterval(interval);
      if (state == 'value' && value == 1 && enabled) {
        Play_Audio("/scada/resources/img/beep.mp3");
        interval = setInterval(function() {
          Play_Audio("/scada/resources/img/beep.mp3");
        }, 2000);
      }
    }, true);
  }

});



Ok, sorry... I re-tested it..  now it's working fine!

Thank you so much!

Peppe


RE: sound on Win/PC and Android/Tablet - AngelesTR - 21.11.2023

HI:
I'm trying to use this function but no sound is reproduced.
If I try to execute the file in the explorer edge iI see only text not sound. The same file in my PC I do.
"ID3#TSSELavf58.76.100ÿó`Ĉ±ðIH 2ᶈ ‚ ‚dé…A!pL7!@¡0@11Z=Q;t£º08àA؁ÒïƒáöâppŸXñþƒù@AØ!ð@p 8>} ‡L‡åÃõƒàÌ¸>ƒàø …*h¤*„D†1l‹¢Ööa!qòždX#åFäk „ÿóbÄ 'Z®Î_h;TÀ(:wƒO‚BH Ðd*A¸C£,¦É›‚-`¬†!#ôÏ¢K’ã€Ol@„Ü SDÜú&é‰QØ–$L‡2TÊY7CðRÖ0¥æ šÍWÿÿ/š©h¤Èº¹‚Ó¹’*uÿÿöDù¢‚Ïê. 4Oÿÿôâ•­Ä€$“»×"  "“‚ÿób..... it is like this

What is the reason?
thanks in advance.