准备

  语言:TypeScript

  工具:Visual Studio Code

  演示:Audio Visualiazer

  小明告诉我,他希望打开一个网页,立即听到他喜欢的音乐,如果有视觉特效就更棒了。

第一节 本地音频

  “可是我的电脑里没有 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应用实例:音频可视化的更多相关文章

  1. HTML5 ——web audio API 音乐可视化(二)

    上一篇 web audio API 音乐可视化(一)介绍了一些基本的API,以及如何简单的播放一个音频,本篇介绍一下怎么对获取到的音频进行分析,并将分析后的数据绘制成图像. 最终效果请戳这里; 完整版 ...

  2. HTML5 ——web audio API 音乐可视化(一)

    使用Web Audio API可以对音频进行分析和操作,最终实现一个音频可视化程序. 最终效果请戳这里; 完整版代码请戳这里,如果还看得过眼,请给一个start⭐ 一.API AudioContext ...

  3. 用webAudio和canvas实现音频可视化

    前两天遇到了要显示音频波形图的需求,因为时间紧,就直接用了wavesufer.js,这两天有空,就研究了一下怎么用webAudio实现音频的可视化. 大致流程是对音源进行解析,解析得到的数据是个频谱数 ...

  4. [C#] NAudio 库的各种常用使用方式: 播放 录制 转码 音频可视化

    概述 在 NAudio 中, 常用类型有 WaveIn, WaveOut, WaveStream, WaveFileWriter, WaveFileReader 以及接口: IWaveProvider ...

  5. 推荐35个新鲜出炉的响应式 Web 设计实例

    响应式设计的准则在于根据用户使用的屏幕的分辨率来改变网站的的布局.因此,视频或图像的大小和文本的数量,可以被视为是一个明显的变化.让你即使从智能手机浏览一个网站的时候能轻松地看到网站上的重要内容.今天 ...

  6. 19 Zabbix web监控实例

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 9 Zabbix web监控实例 通过前面的介绍你已经了解Web scenario的配置,下面我们 ...

  7. MAMP和WAMP搭建Web环境,数据库,数据分布可视化

    MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...

  8. mvc结合web应用实例分析

    Mvc的web应用实例分析 Login.jsp——视图部分的输入文件success.jsp——视图部分的输出文件failure.jsp——视图部分的输出文件LoginBean.java——模型部分Lo ...

  9. 使用eclipse搭建第一个python+Django的web开发实例

    python+Django的web开发实例   一.创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置.也就是通过自动生成代码来建立一个Django项目--一个Django项目的 ...

  10. devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务

    使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...

随机推荐

  1. Django 知识总结(一)

    Django已经学过的知识点: 1. Urls.py 路由系统: 正则 分组匹配 --> 位置参数 分组命名匹配 --> 关键字参数 分级路由 include 给路由起别名 name=&q ...

  2. AOP缓存实现

    输入参数索引作为缓存键的实现 using MJD.Framework.CrossCutting; using MJD.Framework.ICache; using System; using Sys ...

  3. [20180730]exadata与行链接.txt

    [20180730]exadata与行链接.txt --//最近一段时间在看<expert oracle exadata>,智能扫描的三大优化方法是:字段投影,谓词过滤,存储索引.大多数智 ...

  4. 针对需要使用T3协议的Weblogic2628漏洞解决方案

    针对需要使用T3协议的Weblogic2628漏洞解决方案 前几天用户的服务器中检查到了Weblogic2628l漏洞,并且打过Oracle官方补丁后还是能检测到. 针对此问题,去网上查找了一些资料. ...

  5. js,ajax,layer笔记(弹出层,在弹出一个弹框)

    整体认识: 因为作用域的问题,js 在页面初次加载时已近加载好了,所以要有第二次弹窗的效果,必须得在第一次成功之后再次让他加载js 代码: /*shaun*/showdetailsPag: funct ...

  6. wordpress使用rsync加openvpn进行同步和备份

    目录 wordpress使用rsync加openvpn进行同步和备份 环境 普通同步策略的弊端 改良的同步方案 从头细说起 备份数据 打包wordpress项目和备份 服务端安装rsync 服务端配置 ...

  7. nginx服务器开启缓存、反向代理

    一.反向代理配置 1.反向代理服务器配置如下 反向代理就是需要这一行proxy_pass来完成.当我们要访问后端web服务器的时候,我们只需要访问代理服务器就可以了,此时代理服务器就充当后端web服务 ...

  8. Linux运维之如何查看目录被哪些进程所占用,lsof命令、fuser命令

    之前将一块硬盘挂载到某个目录下,但是现在我想卸载掉这块硬盘,无论如何都umount不了,有些同学可能说需要加上 -f 参数强制卸载,理论上是可以的,但是在我这里依然不起作用,比如: [root@:vg ...

  9. win7 系统中的加密文件打不开了

    网友提问:我原来安装的时候win7 32位 旗舰版系统,因为想电脑达到最大运行速度,所以决定把系统重装为64位的win 7系统.[了解win 7 32位于64位的区别]因为重装前未解密bitlocke ...

  10. 第 16 章 C 预处理器和 C 库(可变参数:stdarg.h)

    /*------------------------------------------------- varargs.c -- use variable number of arguments -- ...