Web应用实例:音频可视化
准备
语言:TypeScript
小明告诉我,他希望打开一个网页,立即听到他喜欢的音乐,如果有视觉特效就更棒了。
第一节 本地音频
“可是我的电脑里没有 MP3 文件!”
“为什么需要打开一个本地文件?”小明问。
“我不知道你喜欢听什么。”
“...既没有音频资源的版权。”
“...也没有足够的服务器带宽。”
“...更无法向你解释什么是跨域访问限制。”
...
“总之,你只能先去其他网站下载一个 MP3 文件,然后拖进来。”我说。
“那我为什么不直接在其他网站听???”他困惑道。
“听起来不错。”

图1-1 启动视图
第二节 频谱变换
通过傅里叶变换将时域数据变换到频域。
“无所谓了,我最希望的是有炫酷的视效。”小明说。
“什么是炫酷?”
“听听你的想法。”小明回答。
“下一代,未来,前所未有的。”
“感觉还行,你会怎么呈现视觉效果呢?”小明接着问。
“自由地绘制。”
“什么意思?”
“通俗点讲,想怎么画就怎么画。”
“......”

图2-1 时域数据

图2-2 频域数据
第三节 历史轨迹
像素保留历史,并向四周弥散。
“这就是你说的下一代?”小明有些失望。
“不是。下一代总是建立在已有的设计上,然后小心翼翼地加入一些变化。”
“哦,那会有什么变化呢?”
“我已经掌握了一种成熟的变化技巧。”
“整体效果像是石头抛入平静的水面,水波逐渐蔓延开来。”
“有没有合适的名字,我可不喜欢《下一代频谱》。”
“当然,‘下一代’只是我们的内部代号,它叫《水波粼粼》。”

图3-1 扩散示例一

图3-2 扩散示例二

图3-3 扩散示例三
第四节 旋转
将旋转矩阵作用于整个画面。
“你刚才提到小心翼翼,有没有大胆的设计呢?”
“有的,我管它们叫‘实验性质的特性’。”
“首先是旋转,让整个画面旋转起来。”
“有的人不喜欢旋转,那会让他感到眩晕。”小明质疑道。
“是的,对用户来说,这就像 EDM 和轻音乐的区别。”
“还有吗?”
“把任意两个场景混在一起。我有个飞鸟场景,鸟儿随音乐起舞,是不是很棒?”
“我不看好它,这有些难以理解。”
“如果用户不喜欢,你会移掉它们的对吗?”小明接着问。
“很敏锐,实验性质的特性只会有两个结果。”
“...即在未来的版本中得到加强,或者彻底移除。”

图4-1 旋转

图4-2 场景混叠
第五节 移动端适配
限于移动端的硬件水准,对此不要抱有太多幻想。
“移动端是潮流,还有其他特性吗?”
“本地化支持。界面上的文字和使用习惯根据浏览器语言调整。”
“我有个想法,这个网站可以支持听力障碍的人群。”小明灵机一动。
“你是指听音乐的网站,对听觉障碍者做可访问性支持?”我怀疑自己听错了。
“是音画网站!用户可以观看画面。”
“......”
“特性不是越多越好,现在让我们回到起点。”
“你希望打开一个网页,自动播放喜欢的音乐?”我提问。
“似乎只能手动播放。”看起来小明并不介意这一点。
“炫酷的视觉效果?”
“基本满意。”
“那么,还有其他问题吗?”
...
“我的手机里也没有 MP3 文件!”
附录
在线演示:Audio Visualizer
Github 开源:general-engine
Web应用实例:音频可视化的更多相关文章
- HTML5 ——web audio API 音乐可视化(二)
上一篇 web audio API 音乐可视化(一)介绍了一些基本的API,以及如何简单的播放一个音频,本篇介绍一下怎么对获取到的音频进行分析,并将分析后的数据绘制成图像. 最终效果请戳这里; 完整版 ...
- HTML5 ——web audio API 音乐可视化(一)
使用Web Audio API可以对音频进行分析和操作,最终实现一个音频可视化程序. 最终效果请戳这里; 完整版代码请戳这里,如果还看得过眼,请给一个start⭐ 一.API AudioContext ...
- 用webAudio和canvas实现音频可视化
前两天遇到了要显示音频波形图的需求,因为时间紧,就直接用了wavesufer.js,这两天有空,就研究了一下怎么用webAudio实现音频的可视化. 大致流程是对音源进行解析,解析得到的数据是个频谱数 ...
- [C#] NAudio 库的各种常用使用方式: 播放 录制 转码 音频可视化
概述 在 NAudio 中, 常用类型有 WaveIn, WaveOut, WaveStream, WaveFileWriter, WaveFileReader 以及接口: IWaveProvider ...
- 推荐35个新鲜出炉的响应式 Web 设计实例
响应式设计的准则在于根据用户使用的屏幕的分辨率来改变网站的的布局.因此,视频或图像的大小和文本的数量,可以被视为是一个明显的变化.让你即使从智能手机浏览一个网站的时候能轻松地看到网站上的重要内容.今天 ...
- 19 Zabbix web监控实例
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 9 Zabbix web监控实例 通过前面的介绍你已经了解Web scenario的配置,下面我们 ...
- MAMP和WAMP搭建Web环境,数据库,数据分布可视化
MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...
- mvc结合web应用实例分析
Mvc的web应用实例分析 Login.jsp——视图部分的输入文件success.jsp——视图部分的输出文件failure.jsp——视图部分的输出文件LoginBean.java——模型部分Lo ...
- 使用eclipse搭建第一个python+Django的web开发实例
python+Django的web开发实例 一.创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置.也就是通过自动生成代码来建立一个Django项目--一个Django项目的 ...
- devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务
使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...
随机推荐
- 06-OpenLDAP密码策略
阅读视图 openldap密码策略 OpenLDAP服务端定制密码策略 客户端策划策略实例 定义用户第一次登录就修改密码 问题排查手册 重点推荐官方文档 备注:本文依然承接系列文. 1. openld ...
- MSSQL一种取代游标的方案
今天看到一篇文章写的自己整理记录下,据说比用游标快. DECLARE @字段1 数据类型; DECLARE @字段2 数据类型; DECLARE @TMP_WHILE_ID INT; ,),TMP_W ...
- Linux 内存池【转】
内存池(Memery Pool)技术是在真正使用内存之前,先申请分配一定数量的.大小相等(一般情况下)的内存块留作备用.当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存 ...
- linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$
解决办法: 其实就是普通用户的家目录缺少配置文件导致: [root@xxx ~]# su - oldboy -bash-4.1$ 原因是普通用户的家目录下缺少文件: [root@xxx ~]# ls ...
- ssh登陆慢的问题
识别主机名时卡一下,关掉DNS选项: root@ns-virtual-machine:~# grep -i dns /etc/ssh/sshd_config UseDNS no 如果还有问题,打开ve ...
- 服务器较稳妥的磁盘阵列方案:RAID5+热备盘
最近公司这边要整个数据中心,但是我们这边磁盘阵列的方案选择方面需要做好万全的测试 内部测试的服务器当初损坏的磁盘1个做的raid5直接换个新磁盘做替换rebuild就行了 但是现在想的方法是5+1的方 ...
- kettle用mysql创建资源库执行sql代码报错
一.原因: sql语句里边使用 'Y' 'N' 给boolean类型的赋值产生sql失败 二.解决方法:将insert语句中‘Y’或‘N’ 改成TRUE或FALSE即可,共两张表3个地方 ...
- Linux 小知识翻译 - 「别名」
实际上,「别名」被用在多种场合下.比如「命令的别名」,「邮件地址的别名」等等. 所以,单独说「别名」的时候,根据不用的场合,代表的意思也不一样. 一般来说,「别名」是指意思差不多的东西. 「别名」的英 ...
- Linux 小知识翻译 - 「Linux」怎么读?
主要讨论日语中的读法,所以没有完全按照原文来翻译. 「linux」的读法有很多(这里指在日语中),代表性的读法有以下几种: A). 李纳苦思 B). 李奴苦思 C). 纳依纳苦思 A和B相同的是将 l ...
- MATLAB矩阵的LU分解及在解线性方程组中的应用
作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 三.实验程序 五.解答(按如下顺序提交电子版) 1.(程序) (1)LU分解源程序: function [ ...