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的情况还是经常遇到的,这是就可以 ...
随机推荐
- Netflix工程总监眼中的分类算法:深度学习优先级最低
Netflix工程总监眼中的分类算法:深度学习优先级最低 摘要:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain根据奥卡姆剃刀原理依次推荐了逻辑回归.SVM.决策树 ...
- 浅谈JS DDoS攻击原理与防御
分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击.Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师.近日,他撰文介绍了攻击者如何利用恶意 ...
- 【Database】MySQL各版本的区别
MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Server 社区版本,开源免费, ...
- JVM相关参数配置和问题诊断<转>
原文连接:http://blog.csdn.net/chjttony/article/details/6240457 1.Websphere JVM相关问题诊断: 由JVM引起的Websphere问题 ...
- php的ob实现页面静态化
php页面静态化的原理,用最少的代码解释页面静态化 如何应用:在插入或更新数据到数据库时,就执行一下代码是一种比较好的方法.比如:php执行add()方法时(就是插入数据时) //开启缓存 Ob_st ...
- Extjs4开发中的一些问题
1. 子frame刷新的问题 一般在jsp里面,要实现界面跳转,有很多方法,最典型的就是window.location.href="href",但是在嵌套有iframe框架的页面 ...
- [XenServer] XenServer修改IP 以及 root密码
A.修改IP以及DNS 1. root用户登录console 2.输入命令获得UUID xe pif-list 3.利用UUID查看之前的IP,注意替换下面的1111111111 xe pif-pa ...
- java多线程编程(2)交替输出数字和字母
mark一下,不停的看看notify和wait的没有理解 class Printer { int index=0; //输出奇数 public synchronized void printA(int ...
- 关于View和VIewController的关系和理解
之前看过关老师的视频之后就有写关于视图切换的程序,不过那是很久之前了,那时候也不知道什么是View,什么是VIewController,就知道照着写.这次项目的时候,我又碰到了这个问题,我自以为比较能 ...
- 部署MongoDB扩展并测试使用php简单连接操作之
1,下载MongoDB数据库扩展介质 wget http://pecl.php.net/get/mongo-1.5.1.tgz 2,tar zxvf mongo-1.5.1.tgz &&am ...