这段时间给GitHub Recorder开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些);趁热打铁写了一个音频可视化相关扩展测试代码,下面这张就是测试Gif截图,看起来还算过得去,测试地址

上面这些波形、频率的计算和显示都是由纯js代码编写的,并未用到浏览器专有特性,因此可以方便的移植到其他语言实现,比如移植到Android、IOS原生实现。

FrequencyHistogramView音频可视化频率直方图显示

此功能源码:frequency.histogram.view.js + lib.fft.js 12kb大小源码,音频可视化频率直方图显示;外观为上面Gif图最后一行,可通过参数配置绘制成不同的外观。

此扩展核心算法参考Java开源库jmp123的代码编写的,jmp123版本0.3;直方图我特意优化主要显示0-5khz语音部分,其他高频显示区域较小,不适合用来展示音乐频谱。

要获得PCM频率信息,需要将PCM由时域转换成频域,这里就用到了FFT算法快速傅里叶变换,里面水很深我就没有深入研究了,这里直接用的jmp123里面的FFT实现,纯js代码实现100行不到。我们只管使用就ok了,假设有44100hz采样率的16位PCM数据,取1024个采样数据经过FFT变换后,会输出512个频率信息点,每个点之间的频率间隔为44100/2/512=43hz,0hz是第1个点,1khz是第1000/43个点,以此类推,最高能识别到22050hz,有了这些频率点信息就能绘制不同频率下的音量幅度了,或者获得需要的频率分信号。

通过FFT获得了频率信息,我们就可以绘制直方图了,将所有频率点按照我们需要绘制的直方图柱子数量平均划分成频段(jmp123里面采用的非线性划分,没看懂是什么原理,就采用更多人使用的线性划分),每个频段内取最大值并转换成音量,音量计算公式:dB=20*Math.log10(maxValue),然后计算实际的绘制高度:DrawMaxHeight * dB / MaxDB,DrawMaxHeight是你最大绘制高度(画布高度),MaxDB为最大音量等于20*Math.log10(0x7FFF)。

按照你想要的样子绘制完成后,通过实时数据驱动,一个可视化频率直方图就完工了。

WaveSurferView音频可视化波形显示

此功能源码:wavesurfer.view.js,7kb大小源码,音频可视化波形显示;外观为上面Gif图第二行,可通过参数配置绘制成不同的外观。

外观和名称来源于wavesurfer.js,这个波形的绘制直接简单的使用16位PCM的采样数值大小来进行线条的绘制,同一段音频绘制出的波形和Audition内显示的波形外观上几乎没有差异。

由于是直接简单的用PCM的值大小来绘制线条,因此没有什么复杂的逻辑;对于绘制这种前进式的动画,无需每次都绘制所有线条,只需往另外一块画布上不断的在后面绘制即可,然后再绘制回显示的画布并移动位置,就能实现不断前进的动画,并且性能有保障。

WaveView动态显示波形

此功能源码:waveview.js,4kb大小源码,录音时动态显示波形;外观为上面Gif图第一行,可通过参数配置绘制成不同的外观。

这个是这个库最原始的一款可视化波形,参考MCVoiceWave库编写的,简单用用还可以,就是代码里面相位计算不太懂,波形的显示难控制和优化,微调一下参数波形就乱套。

别说,这个波形还是很耐看的,相比其他可视化界面各有特色吧。

使用

这些可视化波形、频谱要动起来就需要实时的输入pcm数据,输入源可以是麦克风实时录音数据块,也可以是音频文件解码的实时播放数据块。

虽然目前只用在了我的H5录音库里面当做实时的音频展示,但移植到别的语言还是很轻松的,因为他们的源码都没有用到浏览器特有的东西。

完.

傅里叶变换音频可视化_H5录音音频可视化-实时波形频谱绘制、频率直方图相关推荐

  1. java音频频谱_H5录音音频可视化-实时波形频谱绘制、频率直方图

    这段时间给GitHub Recorder开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些):趁热打铁写了一个音频可视化相关扩展测试代码,下面 ...

  2. 「音频可视化」 波形频谱和频率直方图

    1. 前言 项目中需要实现音频智能控制以及根据音乐转换色彩功能,WaveView 完全满足目前需求,完美实现需求,该库还有另外 WaveSurferView 和 FrequencyHistogramV ...

  3. java h5在线音频_H5 录音音频可视化

    这段时间给 GitHub Recorder 开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些):趁热打铁写了一个音频可视化相关扩展测试代码, ...

  4. ios android mid音频文件,iOS 录音 音频 视频 控制中心

    录音 最近项目中需要录音功能,为此在写了一个录音的小模块. 首先需要添加AVFoundation.framework lame.h 帮助链接 下面直接上代码 #import #import #impo ...

  5. amr音频格式手机录音音频转MP3的方法

    我也是在网上兜兜转转下载了一大圈软件,都不能amr转mp3,浪费了不少时间,所以这里做一个小经验的分享,希望能帮到需要的朋友. 1.其他网上下载的软件都不靠谱.下载"格式化工厂" ...

  6. 第五章. 可视化数据分析图表—常用图表的绘制2—直方图,饼形图

    第五章. 可视化数据分析图 5.3 常用图表的绘制2-直方图,饼形图 本节主要介绍常用图表的绘制,主要包括直方图,饼形图. 1.直方图(matplotlib.pyplot.hist) 直方图,又称质量 ...

  7. java 音频可视化_OpenGL ES 实现可视化实时音频

    该原创文章首发于微信公众号字节流动 可视化实时音频 音频数据的采集 OpenGL 实现可视化实时音频的思路比较清晰,可以利用 Java 层的 API AudioRecorder 采集到未编码的音频裸数 ...

  8. android 音频切换分析,Android音频可视化操作

    在我们使用各大音乐软件时,会发现,很多软件都会有一个音频的特效--鲸云特效,而鲸云特效,实际上就是对音频的一种可视化处理. 音频可视化,顾名思义就是将声音以视觉的方式呈现出来.那么怎么实现音频可视化呢 ...

  9. 前端如何查看音频的长度_Android音频可视化

    本文作者:熊鋆洋 (网易云音乐大前端团队) 前言 音频可视化,顾名思义就是将声音以视觉的方式呈现出来.如何将音频信号绘制出来?如何将声音的变化在视觉上清晰的表现出来,让视觉和听觉上的感受一致?这些在 ...

最新文章

  1. MySQL组内排序取最大值
  2. 宽屏图片轮播html,jQuery实现宽屏图片轮播实例教程
  3. SAP 选择屏幕的收起与展开(Collapse and Expand)
  4. python计算2的平方代码_python – NumPy计算向量的范数2的平方
  5. UNIX再学习 -- 文件描述符
  6. 裸眼 3D 是什么效果?
  7. Redis 再牛逼,也得设置密码
  8. 大型企业网络系统传输负载测试及分析
  9. maven-resources-plugin插件使用
  10. python 100实例_[Python] Python 100例
  11. shell使用sshpass自动验证root密码
  12. install ubuntu from a usb disk
  13. 关于Boost的Asio的信号灯超时时间已到错误
  14. 泛微:移动办公专家 未来OA引爆京城
  15. openstack镜像格式转换
  16. 共享编辑文档系统dzzoffice安装
  17. shopnc route.php,shopnc商城专题页的伪静态支持
  18. Axure教程:用中继器制作调查问卷/考试试卷
  19. skfuzzy.cmeans与sklearn.KMeans聚类效果对比以及使用方法
  20. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

热门文章

  1. 超酷的界面原型设计工具Balsamiq Mockups
  2. 高并发架构系列:Redis缓存和MySQL数据一致性方案详解
  3. matlab scope 怎么调出,Matlab Figure图形保存以及Simulink中Scope窗口调出figure菜单
  4. oracle 存档终点修改,Oracle 归档模式与非归档模式的切换
  5. hash ruby 定义 嵌套_【译】rails的嵌套属性(Nested Attributes)使用
  6. 使用rem进行页面适配
  7. python和CSV
  8. Springboot集成BeanValidation扩展二:加载jar中的资源文件
  9. keyboard键盘demo
  10. 【Win10应用开发】自定义磁贴通知的排版