📅  最后修改于: 2023-12-03 15:03:27.304000             🧑  作者: Mango
P5.js 波形函数是一个用于绘制波形的函数,能够创建出各种形状和类型的波形,并可作为交互式的可视化元素。
waveform(buffer, w, h);
参数说明:
buffer
: 必须。一个 Float32Array
类型的数组,表示波形数据采样点的值;w
: 可选。波形的宽度(像素);h
: 可选。波形的高度(像素)。该函数没有返回值,直接将波形绘制到画布上。
在 setup()
函数中先创建一个具有固定采样率的 AudioContext:
let audioCtx = new AudioContext();
然后创建一个 AnalyserNode
来分析当前音频:
let analyser = audioCtx.createAnalyser();
接下来,我们需要获取音频文件并读取其中的数据(前提是我们的音频文件需要和我们打算绘制的波形对应):
let xhr = new XMLHttpRequest();
xhr.open('GET', 'audio.ogg', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
audioCtx.decodeAudioData(xhr.response,
function(buffer) {
let data = new Float32Array(buffer.getChannelData(0));
waveform(data, 500, 200);
});
}
xhr.send();
这个例子中,我们使用了 XMLHttpRequest 对象来获取音频数据,使用 AudioContext.decodeAudioData() 去解码获得的二进制数据,然后把它加载到 Float32Array 类型的数据中,最后将该数据传递给 waveform()
函数用来生成波形。
waveform()
函数的全参数列表如下:
function waveform(buffer, w, h, color, bgcolor, lineColor, lineWidth, orientation, padding) { ... }
buffer
: 必选。用于生成波形的 Float32Array
类型的数据,因为在大部分情况下,音频数据是在以 Float32
形式进行存储和处理的。w
: 可选。波形的宽度(以像素为单位)。h
: 可选。波形的高度(以像素为单位)。color
: 可选。波形的主颜色。bgcolor
: 可选。背景颜色。lineColor
: 可选。图线颜色。lineWidth
: 可选。波形的线宽。orientation
: 可选。波形的方向,该参数可以是 "horizontal" 或 "vertical"。padding
: 可选。波形的留白大小。waveform()
函数的参数列表中,buffer
是必选参数,其他参数都是可选的。orientation
参数,该函数会默认生成一个水平(从左到右)方向的波形。p5.js
库(例如上述代码片段),你应该在头部中导入该库:<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.0/p5.js"></script>
let audioCtx = new AudioContext();
let analyser = audioCtx.createAnalyser();
let xhr = new XMLHttpRequest();
xhr.open('GET', 'audio.ogg', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
audioCtx.decodeAudioData(xhr.response,
function(buffer) {
let data = new Float32Array(buffer.getChannelData(0));
waveform(data, 500, 200, "blue", "white", "green", 1, "vertical", 20);
});
}
xhr.send();
该例子中,我们定义了一个采样率为 20Hz 的 AudioContext,并从远程读取音频文件、解码音频数据并创建一个 Float32Array 类型的数据流。最终,我们调用 waveform()
方法,用 blue
为波形设置了主颜色,将波形方向设置为 vertical
,并设置波形的留白大小为 20 (以像素为单位)。