HTML5 WebAudioAPI(四)--绘制频谱图2
绘制分析器数组所有数据。本文内容,承接上文
1.800宽度绘制
var url='../content/audio/海阔天空.mp3';
if (!window.AudioContext) {
alert('您的浏览器不支持AudioContext');
} else {
//创建上下文
var atx = new AudioContext();
var source = null;
//使用Ajax获取音频文件
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';//配置数据的返回类型
//加载完成
request.onload = function () {
var arraybuffer = request.response;
atx.decodeAudioData(arraybuffer, function (buffer) {
//创建分析器
var analyser = atx.createAnalyser();
source = atx.createBufferSource();
//将source与分析器链接
source.connect(analyser);
//将分析器与destination链接,这样才能形成到达扬声器的通路
analyser.connect(atx.destination);
//将解码后的buffer数据复制给source
source.buffer = buffer;
//播放
source.start(0); //开始绘制频谱图
var canvas = document.getElementById('canvas'),
cwidth = canvas.width,
cheight = canvas.height ;
var ctx = canvas.getContext('2d');
//定义一个渐变样式用于画图
var gradient = ctx.createLinearGradient(0, 0, 0, 300);
gradient.addColorStop(1, '#0f0');
gradient.addColorStop(0.5, '#ff0');
gradient.addColorStop(0, '#f00');
ctx.fillStyle = gradient;
//绘制频谱图
function drawSpectrum() {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
//清理画布
ctx.clearRect(0, 0, cwidth, cheight);
//只绘制出当前宽度内的线
/*
*从频率分布数据中可以看到数组中大于800的数据都是0
*/
for (var i = 0; i < cwidth; i++) {
var value = array[i];
ctx.fillRect(i, cheight - value, 1, cheight);
}
requestAnimationFrame(drawSpectrum);
}
requestAnimationFrame(drawSpectrum);
}, function (e) {
console.info('处理出错');
}); }
request.send();
//绑定播放按钮
$('#playBtn').click(function () {
var icon = $(this).find('i');;
icon.toggleClass('glyphicon-play').toggleClass('glyphicon-pause');
//停止播放
source.stop();
});
}

2.1024宽度绘制
var url = '../content/audio/海阔天空.mp3';
if (!window.AudioContext) {
alert('您的浏览器不支持AudioContext');
} else {
//创建上下文
var atx = new AudioContext();
var source = null;
//使用Ajax获取音频文件
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';//配置数据的返回类型
//加载完成
request.onload = function () {
var arraybuffer = request.response;
atx.decodeAudioData(arraybuffer, function (buffer) {
//创建分析器
var analyser = atx.createAnalyser();
source = atx.createBufferSource();
//将source与分析器链接
source.connect(analyser);
//将分析器与destination链接,这样才能形成到达扬声器的通路
analyser.connect(atx.destination);
//将解码后的buffer数据复制给source
source.buffer = buffer;
//播放
source.start(0); //开始绘制频谱图
var canvas = document.getElementById('canvas'),
cwidth = canvas.width,
cheight = canvas.height - 2;
ctx = canvas.getContext('2d'),
gradient = ctx.createLinearGradient(0, 0, 0, 300);
gradient.addColorStop(1, '#0f0');
gradient.addColorStop(0.5, '#ff0');
gradient.addColorStop(0, '#f00');
var drawMeter = function () {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
ctx.clearRect(0, 0, cwidth, cheight);
number++;
if (number > 1000 && number < 1003) {
console.info(array);
}
if (array[1020] > 0) {
console.info(array);
}
for (var i = 0; i < array.length; i++) {
var value = array[i];
ctx.fillStyle = gradient;
ctx.fillRect(i, cheight - value, 1, cheight);
}
requestAnimationFrame(drawMeter);
}
requestAnimationFrame(drawMeter); }, function (e) {
console.info('处理出错');
}); }
request.send();
var number = 0;
//绑定播放按钮
$('#playBtn').click(function () {
var icon = $(this).find('i');;
icon.toggleClass('glyphicon-play').toggleClass('glyphicon-pause');
//停止播放
source.stop();
});
}

更多参考:
HTML5 WebAudioAPI(四)--绘制频谱图2的更多相关文章
- HTML5 WebAudioAPI(三)--绘制频谱图
HTML <style> #canvas { background: black; } </style> <div class="container" ...
- HTML5 随音乐节奏变化的频谱图动画
这里将要介绍的HTML5 音频处理接口与Audio标签是不一样的.页面上的Audio标签只是HTML5更语义化的一个表现,而HTML5提供给JavaScript编程用的Audio API则让我们有能力 ...
- html5绘制折线图
html5绘制折线图详细代码 <html> <canvas id="a_canvas" width="1000" height="7 ...
- php中用GD绘制折线图
php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...
- 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图
原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...
- 【带着canvas去流浪(7)】绘制水球图
目录 一. 任务说明 二. 重点提示 三. 示例代码 四. 文字淹水效果的实现 五. 关于canvas抗锯齿 六. 小结 示例代码托管在:http://www.github.com/dashnowor ...
- 【带着canvas去流浪】(2)绘制折线图
目录 一. 任务说明 二. 重点提示 三. 示例代码 3.1 一般折线图 3.2 用贝塞尔曲线绘制平滑折线图 四. 大数据量场景 示例代码托管在:https://github.com/dashnowo ...
- R绘图 第六篇:绘制线图(ggplot2)
线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...
- R语言绘制花瓣图flower plot
R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...
随机推荐
- UIImageView之我的动画为什么停了?UIImageView, highLighted,animationImages
如果你的动画总是停了!停了!停了!不管你想不想都停,这里有个参考,你可以看看!这只是一种可能性!!! 受最近看到段子影响,画风略诡异,不喜勿喷. 最近在“刻”动画!!! 为什么是“刻”,动画写了3周啊 ...
- 要将PYTHON应用于工作啦
分析同事在线答疑的数据,考评模型还未最终给出: import time import sys import optparse #操作代码和同事名对应的文件 opfile = 'op_name.txt' ...
- 从 mian 函数开始一步一步分析 nginx 执行流程(三)
如不做特殊说明,本博客所使用的 nginx 源码版本是 1.0.14,[] 中是代码所在的文件! 这一节我们分析ngx_start_worker_processes(),该函数代码比较少,因为它通过调 ...
- git入门超详细(转载)
转自:http://www.cnblogs.com/tugenhua0707/p/4050072.html Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SV ...
- Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)
1.基本概念介绍: 首先得简单介绍下UDP. UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层, ...
- 《Numerical Methods》-chaper4-一元非线性方程的解
在许多生产时间问题中,我们根据已知条件往往会列出一个一元非线性方程,一个最典型的例子就是银行存款的问题,由于其利息需要基于前一年的本息和,因此列出来的方程x的指数往往是高次的.还有物理问题当中一系列用 ...
- hdu 2546 典型01背包
分析:每种菜仅仅可以购买一次,但是低于5元不可消费,求剩余金额的最小值问题..其实也就是最接近5元(>=5)时, 购买还没有买过的蔡中最大值问题,当然还有一些临界情况 1.当余额充足时,可以随意 ...
- hdu 4280 最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4280 #pragma comment(linker, "/STACK:1024000000, ...
- JavaScript之闭包与高阶函数(一)
JavaScript虽是一门面向对象的编程语言,但同时也有许多函数式编程的特性,如Lambda表达式,闭包,高阶函数等. 函数式编程是种编程范式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 ...
- Oracle RAC中的投票算法
RAC集群中有三台机器,A,B,C A,B,C都会有3票,假设这是A的心跳线出现问题,整个RAC集群就划分为两个paritition, 一个是只有A的partition,一个是B,C组成的partit ...