小编kuu*_*kuu的帖子

通过Blob URL加载音频在Safari中失败

以下代码适用于Chrome(22.0)但不适用于Safari(6.0)

<!DOCTYPE html>
<html>
<head>
<script>
function onGo(e) {
  var fr = new FileReader();
  var file = document.getElementById("file").files[0];
  fr.onload = function(e) {
      var data = new Uint8Array(e.target.result);
      var blob = new Blob([data], {type: 'audio/mpeg'});
      var audio = document.createElement('audio'); 
      audio.addEventListener('loadeddata', function(e) { 
          audio.play();
        }, false);
      audio.addEventListener('error', function(e) {
          console.log('error!', e);
        }, false);
      audio.src = webkitURL.createObjectURL(blob);    
    };
  fr.readAsArrayBuffer(file);
}
</script>
</head>
<body>
  <input type="file" id="file" name="file" />
  <input type="submit" id="go" onclick="onGo()" value="Go" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在Safari中,既不调用回调(loadeddata也不错误).使用的内容是一个mp3文件,通常用音频标签回放.Safari需要特别小心吗?

safari blob html5-audio

11
推荐指数
3
解决办法
3262
查看次数

Chrome:onaudioprocess在一段时间后停止调用

我正在使用ScriptProcessorNode的onaudioprocess回调来处理麦克风输入.通过将MediaStreamSourceNode连接到ScriptProcessorNode,我可以在onaudioprocess回调函数中获取原始音频数据.但是,在大约30秒后(这在10到35秒之间变化),浏览器停止调用onaudioprocess.在以下代码中,console.log输出('>>')总是在大约30秒后停止.

var ctx = new AudioContext();
var BUFFER_LENGTH = 4096;
console.log('Buffer length is + ' + BUFFER_LENGTH);
navigator.webkitGetUserMedia({audio: true}, function (stream) {
    var mediaStreamSource = ctx.createMediaStreamSource(stream);
    var scriptProcessor = ctx.createScriptProcessor(BUFFER_LENGTH, 1, 1);
    scriptProcessor.onaudioprocess = function (e) {
      console.log('>>');
    };
    scriptProcessor.connect(ctx.destination);
}, function(e) {
  console.error('Unable to get audio input source.');
});
Run Code Online (Sandbox Code Playgroud)

我尝试了所有可能的BUFFER_LENGTH(256,512,1024,2048,4096,8192,16384),但情况没有改变(30秒后停止记录.)我在最新的Chrome版本(版本35.0)中观察到了这个问题. 1916.153)和Canary(版本37.0.2060.3 canary.)有没有人知道任何变通方法?

google-chrome getusermedia web-audio-api

7
推荐指数
1
解决办法
1921
查看次数

是否可以从Chrome Developer Tools窗口将JavaScript注入当前加载的页面?

我想在Chrome devtools窗口中添加一个面板UI,并显示有关当前加载页面的一些信息.为了获取信息,我想在页面加载之前注入一些JavaScript代码,这样我就可以改变某些方法的行为.

我测试了以下代码:

的manifest.json

{
  "name": "Test Dev Panel",
  "version": "0.1",
  "description": "Extends the Developer Tools, replacing Array.toString() with a bogus one.",
  "devtools_page": "devtools.html",
  "manifest_version": 2,
  "permissions": ["<all_urls>"],
  "content_scripts": [{
    "matches": ["http://*/*"],
    "js": ["bogusarray.js"],
    "run_at": "document_start"
  }]
}
Run Code Online (Sandbox Code Playgroud)

devtools.js

chrome.devtools.panels.create("Text Dev Panel",
                          "img/iconDev.png",
                          "panel.html");
Run Code Online (Sandbox Code Playgroud)

bogusarray.js

Array.prototype.toString = function () {
    return 'Injected!';
  };
Run Code Online (Sandbox Code Playgroud)

但是,由于Array.toString()的行为没有改变,JavaScript(bogusarray.js)似乎从未注入到加载的页面中.对此有什么建议吗?

google-chrome-extension google-chrome-devtools

4
推荐指数
1
解决办法
1万
查看次数