javascript - 将 .wav 加载到音频缓冲区
问题描述
我正在尝试在 javascript 中创建一个小网络应用程序,它通过同时为每个音符播放多个音频文件来播放一些随机和弦。
我发现如果我使用普通的“音频”类,这不起作用,因为它们不会同时播放。(不可靠)因此我想使用 Web Audio API。但是在这里我遇到了一个问题:如何将我的“Audio()”对象(或任何“.wav”文件)转换为 AudioBuffer?
const AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
var audioElement = new Audio("sounds/cut/24.wav");
myArrayBuffer = someUnknownFunction(audioElement);
//Alternative: myArrayBuffer = someOtherUnknownFunction("sounds/cut/24.wav")
var track = audioCtx.createBufferSource();
track.buffer = myArrayBuffer;
track.connect(audioCtx.destination);
track.start(0);
有谁知道,这个“someUnknownFuntion(Audio)”可能是什么?
解决方案
您可能想阅读BaseAudioContext.decodeAudioData()
基本上,您需要使用以下BaseAudioContext.decodeAudioData()
函数指定源:
const AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
var audioFile = fetch("sounds/cut/24.wav").then(response => response.arrayBuffer()).then(buffer => audioCtx.decodeAudioData(buffer)).then(buffer => {
var track = audioCtx.createBufferSource();
track.buffer = buffer;
track.connect(audioCtx.destination);
track.start(0);
});
fetch
我从这个问题中偷了。
推荐阅读
- machine-learning - 对非语言概念使用嵌入?
- android - 将意图从活动发送到片段
- javascript - 不确定我是否有语法错误或代码错误
- java - 渲染 TIFF 文件时的 AWT-EventQueue-0
- python-3.x - 有没有办法使用 mlfow 从 AWS Glue 作业记录统计信息/工件?
- javascript - UnhandledPromiseRejectionWarning:错误:无法处理 ISO 14443-4 标记,因为未设置 AID
- ios - 如何从 captureOutput (didDrop samplebuffer) 中提取图像缓冲区?
- c++ - 如何使用转发将右值转换为左值引用?
- python-3.x - 未考虑覆盖 CorpusView.read_block()
- java - 使用 SWT 在带有新会话和 cookie 的新浏览器中打开 URL