javascript - 基本网络音频 API 不播放声音

标签 javascript html web-audio-api

我正在尝试通过拼凑示例来学习在线教程。我觉得这应该是播放mp3文件。我使用的是 Chrome 浏览器,它是最新的。我在控制台上没有收到任何错误。我不确定我需要更改或添加什么才能使这项工作正常进行。

   <html>

<head>
<script type="text/javascript">
var context;

var sound1Buffer = null;
var url  = 'https://dl.dropboxusercontent.com/u/1957768/SrtV2.mp3';


function init(){
    try {
        window.AudioContext = window.AudioContext || window.webkitAudioContext;
        context = new AudioContext();
    }

    catch(e) {
        alert("web Audio api is not supported!");
    }
}

window.addEventListener('load', init, false);

function loadDogSound(url){

    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.responseType = 'arrayBuffer';

    //decode asynchronously
    request.onload = function(){
        context.decodeAudioData(request.response, function(buffer){
            sound1Buffer = buffer;

        }, onError);
    }
    request.send();
}


function playSound(sound1Buffer){
     var source = context.createBufferSource();
     source.sound1Buffer = sound1Buffer;

     source.connect(context.destination);     
     source.start(0);
}

</script>
</head>
 <body>
</body>
</html>

最佳答案

您永远不会调用 loadDogSound。如果你调用它,你会发现你确实得到了一个错误:

Uncaught ReferenceError: onError is not defined 

此外,您永远不会调用 playSound

这是一个工作示例:

<html>
<head>
<script type="text/javascript">
  //That one url you wanted.
  var url  = 'https://dl.dropboxusercontent.com/u/1957768/SrtV2.mp3';

  /* --- set up web audio --- */
  //create the context
  var context = new webkitAudioContext();
  //...and the source
  var source = context.createBufferSource();
  //connect it to the destination so you can hear it.
  source.connect(context.destination);

  /* --- load up that buffer ---  */
  //Basic start to ajax! (I say basic, yet i don't know it well.)
  var request = new XMLHttpRequest();
  //open the request...?
  request.open('GET', url, true); 
  //I don't even know.
  request.responseType = 'arraybuffer';
  //Once the request has completed... do this
  request.onload = function() {
    context.decodeAudioData(request.response, function(response) {
      /* --- play the sound AFTER we've gotten the buffer loaded --- */
      //set the buffer to the response we just received.
      source.buffer = response;
      //And off we go! .start(0) should play asap.
      source.start(0);
    }, function () { console.error('The request failed.'); } );
  }
  //Now that the request has been defined, actually make the request. (send it)
  request.send();
</script>
</head>
 <body>
</body>
</html>

关于javascript - 基本网络音频 API 不播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310411/

相关文章:

javascript - 使用一个 JavaScript 文件加载不同的内容到模态框

javascript - 如何确定 WebAudio 振​​荡器是否静音?

javascript - Google Chrome 上 WebAudio API 的不同行为

javascript - 如何在 Javascript 中创建动态文件+下载链接?

javascript - jquery 遍历元素并将事件绑定(bind)到每个元素

javascript - 如何在 Meteor 登录按钮上设置 float

html - 格式化 html 表格内容以用于 iframe

php - 关于 php 中的进度条

audio - 缓冲区和网络音频 API

javascript - 如何使用 javascript 限制输入值?