【发布时间】:2021-04-09 08:03:28
【问题描述】:
我不明白这个https://github.com/bbc/peaks.js/blob/master/demo/TOL_6min_720p_download.json 怎么能变成带有峰值的波形可视化。
我看到该文件中的数据是一个扁平的数字数组。我正在尝试了解如何将这些数字转换为对视觉绘图有意义的东西。
查看此小提琴以更深入地了解代码https://codesandbox.io/s/cool-dijkstra-fyw25?file=/src/App.js
目标是创建看起来像图像的高低峰。我假设每 2 个索引代表一个峰值,但我不想假设任何事情。
我正在提取 JSON 并将其传递给这样的绘图函数
const peaksReq = await fetch(
"https://raw.githubusercontent.com/bbc/peaks.js/master/demo/TOL_6min_720p_download.json"
);
const peaksData = await peaksReq.json();
const peaks = peaksData.data;
// peaks is now a flat array of numbers
目标是将平峰阵列变成如上图所示的条形。第一组数据是一堆 0,最终是一个有意义的序列,看起来像这样[-7,5,-27,25,-30,26,-29,30,-24,26]
我的理解——猜测是将其转换为像 [[-7,5],[-27,25],[-30,26],[-29,30],[-24,26]] 这样的二维数组,然后将这些数字转换为适合边界的 px。 -7, 5 会相对于中心公理上下波动。
我不太明白如何解决的问题是,如果它在 40px 元素内,我们如何保持这些数字相对。即 40px 的中心是 20px。条形在距其中心 40px 的空间内向上移动而不会超出界限的最大值为 20px,您可以添加一个 5px 的缓冲区,例如 15px。
【问题讨论】:
-
听起来像简单的数学......从数字数组中获取最大值和最小值,这些将是您的相对最大值和最小值,其他所有内容都是其中的百分比。
-
是的,但我很笨,需要向我解释或参考
-
大声笑,你不傻,我之前帮过你一个类似的问题:stackoverflow.com/questions/61903270/… ...让我们看看我能不能把这个放在代码示例中
标签: javascript html math audio canvas