javascript - Web 音频 API 获取 <audio> 元素的 AudioBuffer

标签 javascript audio html5-audio web-audio-api

我有一个音频元素

var audioSrc = 'https://mfbx9da4.github.io/assets/audio/dope-drum-loop_C_major.wav'
var audio = document.createElement('audio')
audio.src = audioSrc

我需要 AudioBufferbeat detection所以我尝试在加载音频时访问缓冲区:

audio.oncanplaythrough = () => {
  console.info('loaded');
  var source = context.createMediaElementSource(audio);
  source.connect(context.destination);
  console.info('source.buffer', source.buffer);
  source.start()
}

但是,上面的代码片段日志

> loaded
> source.buffer undefined

最佳答案

似乎最好的方法是避免 <audio>标记并通过 XHR 加载音频:

const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const audioSrc =
  "https://davidalbertoadler.com/assets/audio/dope-drum-loop_C_major.wav";

const audioData = await fetchAudio(audioSrc);
audioContext.decodeAudioData(audioData, onDecoded, onDecodeError);

function fetchAudio(url) {
  return new Promise((resolve, reject) => {
    const request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.responseType = "arraybuffer";
    request.onload = () => resolve(request.response);
    request.onerror = (e) => reject(e);
    request.send();
  });
}

function onDecoded(buffer) {
  // Play the song
  console.log("Got the decoded buffer now play the song", buffer);
  const source = audioContext.createBufferSource();
  source.buffer = buffer;
  source.connect(audioContext.destination);
  source.loop = true;
  source.start();
}

function onDecodeError(e) {
  console.log("Error decoding buffer: " + e.message);
  console.log(e);
}

关于javascript - Web 音频 API 获取 <audio> 元素的 AudioBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856331/

相关文章:

video - 我有哪些照片/视频/音频编码和存储 API 选项?

javascript - 将序号字符串转换为其编号

javascript - 页面中的返回按钮

javascript - 使用 React/Socket.IO 无法读取未定义错误的属性 'emit'

python - librosa 不会规范化 [-1, 1] 之间的 wave 文件

javascript - 防止同时播放 HTML5 视频和音频元素

php - 将音频文件从我的家用电脑流式传输到我的网站

html - 带有 HTML5 音频标签的自定义一键播放器

javascript - 如何删除包含所有空值的数组列?

HTML5 音频无法在移动设备上播放