Обнаружить звук Javascript - PullRequest
       33

Обнаружить звук Javascript

5 голосов
/ 14 февраля 2011

Есть ли какой-нибудь способ определить, издает ли определенная страница шум, используя jscript? Какая-то переменная окружения или что-то, что отслеживает состояние динамиков? Я пытаюсь написать скрипт, который помещает значок в заголовок вкладки, если эта вкладка издает звук.

Ответы [ 4 ]

1 голос
/ 14 февраля 2011

Соскоб с Кора

Большинство звуков в Интернете сделано через Flash. Flash не сообщить браузеру, когда он делает звук. То есть если два различные вкладки работают Flash, браузер не может знать, какой издавать звук.

Введение средств массовой информации HTML5 теги могут помочь в этой области, но я подозреваю звуковой индикатор, который только работал некоторое время (для не Flash страницы) будет более расстраивающим, чем нет звукового индикатора.

(Не обращайте внимания на приведенный ниже комментарий (в связанном вопросе Quora) о том, что Chrome отображает значок воспроизведения при воспроизведении звука. Это Soundcloud, изменяющий заголовок своей страницы, а не Google Chrome)

0 голосов
/ 11 февраля 2016

Это может помочь вам, fbc_array - это дешифраторный шум, используйте fbc_array[value] для получения этого шума.пример:

window.onload = function() {
  var file = document.querySelector('input');
  file.onchange = function(e) {
    var boton = e.target.files;
    var archivo = boton[0];
    if (!archivo.type.match(/audio/)) {
      alert("Seleciona un audio, por favor.");
    } else {
      var lector = new FileReader();
      lector.readAsDataURL(archivo);
      lector.addEventListener("load", initMp3Player, false);
    }
  }

  function initMp3Player(e) {
    var result = e.target.result;
    var audio = document.querySelector('audio');
    audio.src = result;
    context = new AudioContext();
    analyser = context.createAnalyser();
    source = context.createMediaElementSource(audio);
    source.connect(analyser);
    analyser.connect(context.destination);
    frameLooper();
  }

  function frameLooper() {
    window.requestAnimationFrame(frameLooper);
    fbc_array = new Uint8Array(analyser.frequencyBinCount);
    analyser.getByteFrequencyData(fbc_array);
    document.querySelector('#o1').style.transform = 'scale(' + fbc_array[1] / 75 + ')';
    document.querySelector('#o2').style.transform = 'scale(' + fbc_array[50] / 100 + ')';
    document.querySelector('#o3').style.transform = 'scale(' + fbc_array[100] / 200 + ')';
  }
}
* {
  margin: 0;
  padding: 0;
  cursor: default;
}
body {
  background: #222;
}
input {
  position: fixed;
  left: 0;
  right: 0;
  margin: auto;
  background: rgb(76, 142, 250);
  border: 0;
  border-radius: 2px;
  box-sizing: border-box;
  color: #fff;
  cursor: pointer;
  font-size: .875em;
  padding: 10px 24px;
}
#o1 {
  position: fixed;
  display: block;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100px;
  width: 100px;
  background: #333;
  margin: auto;
  border-radius: 50%;
}
#o2 {
  position: fixed;
  display: block;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100px;
  width: 100px;
  margin: auto;
  background: #0074d9;
  border-radius: 50%;
}
#o3 {
  position: fixed;
  display: block;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100px;
  width: 100px;
  margin: auto;
  background: #fff;
  border-radius: 50%;
}
<input type="file"></input>
<audio autoplay></audio>
<div id="o1"></div>
<div id="o2"></div>
<div id="o3"></div>
0 голосов
/ 14 февраля 2011

Нет, это невозможно.

Множество плагинов могут издавать звук, и все они делают это по-своему. Здесь нет ловушки для всех.

Возможно, в Vista / 7, где фактически отслеживается использование звука приложениями, и при использовании браузера, такого как Chrome, который выполняет отдельный процесс для каждой страницы, вам может повезти больше. Для этого нужно выяснить, какие процессы воспроизводят звук, а затем выяснить, какую страницу загрузил каждый процесс. Хотя через JavaScript? Ни за что.

0 голосов
/ 14 февраля 2011

Я не думаю, что вы можете определить, издают ли колонки шум в JavaScript, однако вам может и не понадобиться.

Возможно, вы могли бы отслеживать это самостоятельно, неявно. Так, например, если есть кнопка воспроизведения, при нажатии вы можете начать воспроизведение звука и показать значок. Когда пользователь нажимает кнопку «Стоп», вы останавливаете звук и скрываете значок.

...