傅里叶变换音频可视化_HTML5如何实现音频可视化频谱跳动

本篇教程探讨了HTML5如何实现音频可视化频谱跳动,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 。

<

html>

HTML5音频可视化频谱跳动代码

* {

margin: 0;

padding: 0;

}

#canvas {

display: block;

background: linear-gradient(135deg, rgb(142, 13, 133) 0%, rgb(230, 132, 110) 100%);

}

window.onload = function () {

var oAudio = document.getElementById(‘myaudio‘);

window.οnclick=function(){

if(oAudio.paused){

oAudio.play();

}else{

oAudio.pause();

}

}

// 创建音频上下文对象

var oCtx = new AudioContext();

// console.log(oCtx);

// 创建媒体源,除了audio本身可以获取,也可以通过oCtx对象提供的api进行媒体源操作

var audioSrc = oCtx.createMediaElementSource(oAudio);

// 创建分析机

var analyser = oCtx.createAnalyser();

// 媒体源与分析机连接

audioSrc.connect(analyser);

// 输出的目标:将分析机分析出来的处理结果与目标点(耳机/扬声器)连接

analyser.connect(oCtx.destination);

// 效果(实现的具体方法)

// 绘制音频图的条数(fftSize)

/*

根据分析音频的数据去获取音频频次界定音频图的高度

放在与音频频次等长的8位无符号字节数组

Uint8Array:初始化默认值为1024

*/

// 利用cancas渐变进行音频绘制

var ctx = canvas.getContext(‘2d‘);

canvas.width = window.innerWidth;

canvas.height = window.innerHeight;

var oW = canvas.width;

var oH = canvas.height;

var color = ctx.createLinearGradient(oW / 2, oH *2/ 3 - 30, oW / 2, oH *2/ 3 - 100);

color.addColorStop(0, ‘#000‘);

color.addColorStop(.5, ‘#069‘);

color.addColorStop(1, ‘#f6f‘);

// 音频图的条数

var count = 150;

// 缓冲区:进行数据的缓冲处理,转换成二进制数据

var voiceHeight = new Uint8Array(analyser.frequencyBinCount);

// console.log(voiceHeight);

function draw() {

// 将当前的频率数据复制到传入的无符号字节数组中,做到实时连接

analyser.getByteFrequencyData(voiceHeight);

// console.log(voiceHeight);

// 自定义获取数组里边数据的频步

var step = Math.round(voiceHeight.length / count);

ctx.clearRect(0, 0, oW, oH);

for (var i = 0; i 

var audioHeight = voiceHeight[step * i];

ctx.fillStyle = color;

ctx.fillRect(oW / 2 + (i * 10), oH *2/ 3, 7, -audioHeight);

ctx.fillRect(oW / 2 - (i * 10), oH *2/ 3, 7, -audioHeight);

}

window.requestAnimationFrame(draw);

}

draw();

/*

analyserNode 提供了时时频率以及时间域的分析信息

允许你获取实时的数据,并进行音频可视化

analyserNode接口的fftSize属性

fftSize:无符号长整型值,用于确定频域的FFT(快速傅里叶变换)

ffiSize属性值是从32位到32768范围内的2的非零幂,默认值是2048

*/

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标WEB前端HTML5/CSS3频道!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android websocket封装,Android WebSocket 方案选型OkHttp

目前Android WebSocket 框架 主要包括:SocketIOJava-WebSocketOkHttp WebSocket一开始我首选的是采用SocketIO方案&#xff0c;因为考虑该方案封装接口好&#xff0c;提供异步回调机制&#xff0c;但和后端同事沟通发现目前客户端的SocketIO不支持ws wss协议, 所以无奈只能放弃…

关于Word中审阅的一个问题!

前两天&#xff0c;在帮一个杂志撰稿的过程中&#xff0c;有一个关于Word审阅的问题。&#xff08;以下内容以Word2007为例&#xff09; 本身&#xff0c;审阅的应用不算困难。 我们可以为文章添加“批注”&#xff0c;或是你的上级对文章进行修改&#xff0c;他们可以开启“审…

ASP.NET Core - 在ActionFilter中使用依赖注入

上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的&#xff0c;所以花了点时间仔细阅读了微软的官方文档。发现除了IActionFilter、IAsyncActionFilter的问题&#xff0c;还有一个就是依赖注入在ActionFilter上的使用也是需要注意的…

魏尔斯特拉斯函数与分形图形的动画演示

一般人会直觉上认为连续的函数必然是近乎可导的。即使不可导&#xff0c;所谓不可导的点也必然只占整体的一小部分。根据魏尔斯特拉斯在他的论文中所描述&#xff0c;早期的许多数学家&#xff0c;包括高斯&#xff0c;都曾经假定连续函数不可导的部分是有限或可数的。这可能是…

大脚战场插件怎么关闭_PM工具栏插件:HonmToolBar

视频演示&#xff1a;问&#xff1a;HonmToolBar是一款什么样的插件&#xff1f;答&#xff1a;HonmToolBar是一款高度自由化的插件&#xff0c;用户可以自己增加宏文件按钮或者宏命令按钮。该插件类似工具栏&#xff0c;有水平和垂直两个工具栏。插件悬浮在PM图形窗口左上角&a…

android 导航 美国,变美了 Android N或用全新虚拟导航按键

原标题&#xff1a;变美了 Android N或用全新虚拟导航按键变美了 Android N或用全新虚拟导航按键【IT168 资讯】虽然距离谷歌Android N系统的发布已经有一段时间了&#xff0c;不过该系统目前仍旧属于内测阶段&#xff0c;短时间内仍难以迅速推广。另外也正是由于Android N正式…

唐骏的商业模式

唐骏曾把商业模式比作谈恋爱&#xff0c;其要抓住三个要点&#xff1a; 1、简单&#xff1a; 太多的环节很难让人接受&#xff0c;并且容易潜藏缺陷&#xff0c;一目了然最好不过&#xff01; 2、有创意&#xff1a; 一定要有自己独特的创意&#xff0c;一位跟随别人&#xff0…

python特性和属性_Python面向对象-类的特性及公私有属性 | 【韩涛博客】

构造函数 __init__ self.name name #属性&#xff0c;成员变量&#xff0c;字段 def sayhi() #方法&#xff0c;动态属性 公有属性 在类中直接定义的属性&#xff0c;大家都可以用 私有属性 __两个下划线定义&#xff0c;外部不可以访问&#xff0c;内部可以访问 class Role(o…

[Abp 源码分析]自动审计记录

点击上方蓝字关注我们0.简介Abp 框架为我们自带了审计日志功能&#xff0c;审计日志可以方便地查看每次请求接口所耗的时间&#xff0c;能够帮助我们快速定位到某些性能有问题的接口。除此之外&#xff0c;审计日志信息还包含有每次调用接口时客户端请求的参数信息&#xff0c;…

我的老公是枚码农

前两天看到一篇写程序员的爆文&#xff0c;虽然略显夸张&#xff0c;但也着实有趣。忽然想到身边人也是一枚码农&#xff0c;浑身上下也是浓厚的码农气息&#xff0c;遂也胡乱写了几笔&#xff0c;博君一笑&#xff0c;为了方便起见&#xff0c;就称其为“码农哥”。 1 码农哥还…

如何修复硬盘坏道?

首先需要先确认硬盘的坏道是逻辑坏道还是物理坏道。 方法很简单&#xff0c;在电脑刚启动时按“F8”键&#xff0c;选择“Command Prompt only”进入DOS模式。这种方法的操作系统必须为Windows95/98&#xff0c;若为Windows2000/XP/2003&#xff0c;请使用DOS启动盘启动。然后执…

c++11 string u8_深入理解C++11:C++11新

一.数据对齐在了解为什么数据需要对齐之前&#xff0c;我们可以回顾一下打印结构体的大小这个C/C中的经典案例。先看代码&#xff1a;#include using namespace std;struct HowManyBytes{char a;int b;};int main(){cout<>endl;cout<>endl;cout<>endl;cout&l…

harmonyos con,鸿蒙HarmonyOS系统中的JS开发框架

HarmonyOS开源至今已经一个多月&#xff0c;源码托管在国内知名开源平台码云上&#xff0c;https://gitee.com/openharmony 。我最感兴趣的就是JS 框架 ace_lite_jsfwk&#xff0c;从名字中可以看出来这是一个非常轻量级的框架&#xff0c;官方介绍说是“轻量级 JS 核心开发框架…

python公式_Python读取excel文件中带公式的值的实现

在进行excel文件读取的时候&#xff0c;我自己设置了部分直接从公式获取单元格的值 但是用之前的读取方法进行读取的时候&#xff0c;返回值为空 import os import xlrd from xlutils.copy import copy file_path os.path.abspath(os.path.dirname(__file__)) # 获取当前文件目…

.NET工资低?那肯定是你打开的方式不正确

点击上方蓝字关注我们因为工作的关系&#xff0c;本人总是会接触到一些刚踏入社会没多久的.NET开发小伙伴。尤其是年关将近&#xff0c;这时候想要跳槽的人特别多&#xff0c;所以收到一些小伙伴的迷茫求解。今天就拿其中一个来说&#xff0c;我们暂且称他为A同学吧。A同学是一…

10分钟读懂人工智能、机器学习到底有什么关系

文末彩蛋&#xff0c;错过哭一年。。。。 人工智能的浪潮正在席卷全球&#xff0c;诸多词汇时刻萦绕在我们耳边&#xff1a;人工智能&#xff08;Artificial Intelligence&#xff09;、机器学习&#xff08;Machine Learning&#xff09;。不少人对这些高频词汇的含义及其背后…

复制Oracle表的结构

概述&#xff1a; 复制表的结构(只复制表结构,源表名&#xff1a;b_Jkpt_Oaxt_Trafficaccident 新表名&#xff1a;Test_OAXT_TrafficAccident) Oralce语句: create table Test_OAXT_TrafficAccident as select * from b_Jkpt_Oaxt_Trafficaccident where 12

Web API实现微信公众平台开发-接收数据Post

介绍当普通微信用户向公众账号发消息时&#xff0c;微信服务器将POST消息的XML数据包到开发者填写的URL上。在微信用户和公众号产生交互的过程中&#xff0c;用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址&#xff0c;从而开发…

gbdt 算法比随机森林容易_随机森林与GBDT

Bagging策略1.总样本数量是n个&#xff0c;从样本中重采样(有放回的)选出n个样本 &#xff0c;会有约33.2%的样本不会被抽到2.在所有属性上对这n个样本建立分类器(比如决策树&#xff0c;svm&#xff0c;lr)3.重复步骤1和2m次&#xff0c;建立了m个分类器4.将数据放在这m个分类…

苏泊尔搭载华为鸿蒙系统,华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额...

原标题&#xff1a;华为鸿蒙打算在一年内跨过生死线&#xff0c;拿下16%的市场份额华为鸿蒙操作系统发布已经有一段时间了&#xff0c;这个操作系统直到上个月月底才开启了公测&#xff0c;很多用户都已经使用上了华为的这个鸿蒙操作系统。根据不少用户的反馈情况来看&#xff…