【问题标题】:Why does my audio buffer doesn't play any sound? [Web Audio API]为什么我的音频缓冲区不播放任何声音? [网络音频 API]
【发布时间】:2018-10-11 13:54:44
【问题描述】:

我的音频缓冲区似乎不起作用,我不知道为什么。我已经尝试在 Chrome 和 Safari 中打开它,但没有任何反应。我还检查了我的音频文件“Audio2.mp3”是否一切正常。

"use strict"

//Create the Audio Context, compatible with older Firefox and Chrome browsers
function audioContextCheck(){
    if (typeof AudioContext !== "undefined"){
        return new AudioContext();
    }
    else if (typeof webkitAudioContext !== "undefined") {
        return new webkitAudioContext();
    }
    else if (typeof mozAudioContext !== "undefined") {
        return new mozAudioContext();
    }
    else {
        throw new Error('AudioContext not supported');
    }
}

var audioContext = audioContextCheck();


//Create audio buffer to the audio file with the XMLHttpRequest
var audioBuffer;

var getSound = new XMLHttpRequest();
getSound.open("get", "Audio2.mp3", true);
getSound.responseType = "arraybuffer";

getSound.onload = function(){
    audioContext.decodeAudioData(getSound.response, function(buffer) {
        audioBuffer = buffer;
    });
};

getSound.send();

//EventListener

window.addEventListener("load", playback);

//Now create the function necessary to play back the audio buffer

function playback(){
    var playSound = audioContext.createBufferSource();
    playSound.buffer = audioBuffer;
    playSound.connect(audioContext.destination);
    playSound.start(audioContext.currentTime);
}

【问题讨论】:

    标签: javascript audio buffer web-audio-api


    【解决方案1】:

    因为,您在定义 audioBuffer 之前触发了 playback()

    尝试等待音频xhr完全加载,分配audioBuffer然后执行playback(),它会按预期工作。

    例如

    //Create the Audio Context, compatible with older Firefox and Chrome browsers
    function audioContextCheck() {
      if (typeof AudioContext !== "undefined") {
        return new AudioContext();
      } else if (typeof webkitAudioContext !== "undefined") {
        return new webkitAudioContext();
      } else if (typeof mozAudioContext !== "undefined") {
        return new mozAudioContext();
      } else {
        throw new Error('AudioContext not supported');
      }
    }
    
    var audioContext = audioContextCheck();
    
    
    //Create audio buffer to the audio file with the XMLHttpRequest
    var audioBuffer;
    
    var getSound = new XMLHttpRequest();
    getSound.open("get", "https://cdn.rawgit.com/devildrey33/devildrey33/ddb01d71/Ejemplos/BannerTest/Canciones/LevenRain_-_ActionMan_Versus_The_CyberParasites.mp3", true);
    getSound.responseType = "arraybuffer";
    
    getSound.onload = function() {
      document.getElementById("xhrStatus").textContent = "Loaded";
      audioContext.decodeAudioData(getSound.response, function(buffer) {
        audioBuffer = buffer;
        playback(); // <--- Start the playback after `audioBuffer` is defined.
      });
    };
    
    getSound.send();
    
    //EventListener
    
    // window.addEventListener("load", playback);
    
    //Now create the function necessary to play back the audio buffer
    
    function playback() {
      var playSound = audioContext.createBufferSource();
      playSound.buffer = audioBuffer;
      playSound.connect(audioContext.destination);
      playSound.start(audioContext.currentTime);
    }
    &lt;p id="xhrStatus"&gt; Loading the audio.. &lt;/p&gt;

    【讨论】:

    • @IsaiasHerrera 上面的示例虽然有效。或者问题可能出在其他地方,例如移动浏览器中的音频权限。
    • 成功了!这是我的问题:stackoverflow.com/questions/10752055/…
    • 我喜欢这首歌
    猜你喜欢
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多