entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Reproducir sonido en chrome mobile

Hola a todos:

Estoy haciendo una pequeña pagina que activa/desactiva un checkbox por mensajes mediante socket.io.
Ahora necesitaria que cuando el checkbox esté activo suene una alarma y cuando se desactive se apague.
La parte de mensajes y activar, desactivar el checkbox la tengo funcionando, la parte de reproducir es sonido es la que me está costando, ya que aunque por consola veo que la funcion alarma.play() se ejecuta no suena nada, sin embargo si pongo un boton que lance el play si suena.

 <body>
    <div id="S1" class="control">
      <div class="titulo">Alarma</div>
      <div class="switch">
        <input type="checkbox" onclick="send()">
        <label></label>
      </div>
    </div>

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  var estado = 0;
  var alarma = new Audio("alarma.mp3");
  alarma.play();
  alarma.preload = "auto";
  alarma.loop = true;
  var socket = io();
  var valores = {S1:false};

  function send(){        
    valores.S1 = $('#S1 input').prop("checked");
    socket.emit('cSalidas', valores);
    return false;
  };

  socket.on('cSalidas', function(valores){
    $('#S1 input').prop("checked", valores.S1);
    if(valores.S1 && estado==0){
      alarma.play();
      estado = 1;

      console.log('play');
    } else if(!valores.S1 && estado==1) {
      alarma.pause();
      estado = 0;

      console.log('paused');
    }
  });

  socket.emit('cSalidasInit');
</script>

<button onclick="alarma.play()">Reproducir</button>

</body>

2 Respuestas

0voto

white Puntos75880

lamentablemente es cierto lo que mencionas en tu respuesta, https://code.google.com/p/chromium/issues/detail?id=138132
Tal ves una posible solucion es crear e inyectar el elemento <audio>, otra podria ser usar web audio api tambien puedes deshabilitar la opcion para chrome en android (chrome://flags/#disable-gesture-requirement-for-media-playback).
Ahora si el target es iphone pues no hay remedio.

http://www.html5rocks.com/en/tutorials/webaudio/intro/
http://caniuse.com/#feat=audio-api

1voto

arodriguez Puntos240

Despues de darle mil vueltas he encontrado la posible explicación y la solución (por favor corregidme si me equivoco!), al parecer tanto android como ios necesitan la entrada de usuario para iniciar la reproducción del sonido, por eso el boton que lanza la reproducción funciona, pero una vez lanzado se puede controlar mediante codigo la pausa y reproducción del mismo.
Asi pues lo que que voy a usar es un inicializador lanzado por el usuario, no es lo más deseable pero bueno...:

   <script>
  var estado = 0;
  var alarma = new Audio("alarma.mp3");
  alarma.preload = "auto";
  alarma.loop = true;

  var socket = io();
  var valores = {S1:false};

  function send(){        
    valores.S1 = $('#S1 input').prop("checked");
    socket.emit('cSalidas', valores);
    return false;
  };

  function alarmaInit(){
    alarma.play();
    if(estado==0) alarma.pause();
    $('#lanzador').hide();
  };

  socket.on('cSalidas', function(valores){
    $('#S1 input').prop("checked", valores.S1);
    if(valores.S1 && estado==0){
      alarma.play();
      estado = 1;
    } else if(!valores.S1 && estado==1) {
      alarma.pause();
      estado = 0;
    }
  });

  socket.emit('cSalidasInit');

</script>

<button id="lanzador" onclick="alarmaInit()">Habilitar Sonido</button>

0voto

Leonardo-Tadei comentado

Si esta es la solución correcta, por favor seleccionát u propia respuesta como la solución.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta