检测声音Javascript

时间:2011-02-14 17:58:02

标签: javascript audio system

有没有办法检测某个页面是否使用jscript发出噪音?某种环境变量或跟踪扬声器状态的东西?我正在尝试编写一个脚本,如果该标签发出声音,则会在标题标题上放置一个图标。

4 个答案:

答案 0 :(得分:1)

Quora

中删除
  

网络上的大部分声音都是   通过Flash完成。 Flash没有   在浏览器制作时通知浏览器   声音。也就是说,如果两个   不同的标签正在运行Flash,   浏览器无法知道哪一个   发声。

     

HTML5媒体的介绍   标签可以帮助这个领域,但我   怀疑只有音频指示器   有些时候工作(对于非Flash   页面)比沮丧更令人沮丧   没有音频指示灯。

(不要注意以下评论(在链接的Quora问题中),说明Chrome在播放声音时会显示“播放”图标。这是Soundcloud更改其自己页面的标题,而不是Google Chrome)

答案 1 :(得分:0)

我认为您无法检测扬声器是否在JavaScript中发出噪音,但您可能不必这样做。

也许你可以隐含地自己跟踪这个。因此,例如,如果有播放按钮,则在点击时您可以开始播放音频并显示图标。用户单击停止按钮后,您将停止音频并隐藏图标。

答案 2 :(得分:0)

不,这是不可能的。

许多插件可以发出声音,而且它们都以自己的方式完成。这里没有任何一切。

也许在Vista / 7上,应用程序的声音使用情况实际上是跟踪的,当使用像Chrome这样的浏览器为每个页面制作单独的进程时,您可能会有更多的运气。它将涉及确定哪些进程正在播放声音,然后确定每个进程加载的页面。通过JavaScript虽然?没办法。

答案 3 :(得分:0)

这可以帮助您,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>
&#13;
&#13;
&#13;