This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

sound on Win/PC and Android/Tablet
#21
(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
Reply
#22
(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

Reply
#23
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);
  }

});
Reply
#24
(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
Reply


Forum Jump: