内容简介:Dome在这 由于兼容性的问题还没解决,建议某天在观看TED演讲该项目的实物是由来自印度的团队制作的。测试中,俾格米人表现得惟妙惟肖,就像是一群好奇而又胆小的小动物。十分可爱!
在线demo
Dome在这 由于兼容性的问题还没解决,建议 Chrome 打开。
灵感来源
某天在观看TED演讲 Aparna Rao High tech Art with a sense of humor 的时候看到里面的一个项目叫做 pygmies ,中文名叫 俾格米人 (图中的小黑人)。他们都很胆小,只要有声音就会被吓到躲到板子后面。
该项目的实物是由来自印度的团队制作的。测试中,俾格米人表现得惟妙惟肖,就像是一群好奇而又胆小的小动物。十分可爱!
于是我想用web技术似乎也能达到同样的效果。只需要浏览器调用麦克风,获取数据,作用于svg元素(当然这是最初的简单想法)。
准备svg素材
作图工具,Mac平台 sketch
主要代码
html部分
// 主要是svg代码,量比较大,请在源码中查看 复制代码
css部分
// 主要是基本的定位代码,请在源码中查看 复制代码
js部分
"use strict"; var ctx, analyser, frequencies, getByteFrequencyDataAverage, draw; // 兼容性 window.AudioContext = window.AudioContext || window.webkitAudioContext; // 获取音频上下文 ctx = new window.AudioContext(); // 用户获取stream当中的时间、频率信息 analyser = ctx.createAnalyser(); frequencies = new Uint8Array(analyser.frequencyBinCount); getByteFrequencyDataAverage = function() { // 将当前频域数据拷贝进数组 analyser.getByteFrequencyData(frequencies); // 求得频域的平均值 return ( frequencies.reduce(function(previous, current) { return previous + current; }) / analyser.frequencyBinCount ); }; // 返回 Promise 对象 navigator.mediaDevices .getUserMedia({ audio: true }) .then(function(stream) { // window.hackForMozzila = stream; ctx .createMediaStreamSource(stream) // 连接到AnalyserNode .connect(analyser); }) .catch(function(err) { console.log(err.message); }); var pygmies = []; for (let i = 0; i < 10; i++) { pygmies.push(document.getElementById(`pygmie-${i + 1}`)); } // 改变小人的位置 (draw = function() { var moveValue = getByteFrequencyDataAverage() * 10; if (moveValue >= 35) { moveValue = 35; } pygmies[0].style.transform = `translate(51.000000px, ${moveValue}px)`; console.log(getByteFrequencyDataAverage()); pygmies[1].style.transform = `translate(89.000000px, ${0.0 + moveValue}px)`; pygmies[2].style.transform = `translate(149.000000px, ${0.0 + moveValue}px)`; pygmies[3].style.transform = `translate(218.000000px, ${0.0 + moveValue}px)`; pygmies[4].style.transform = `translate(286.500000px, 51.000000px) rotate(90.000000deg) translate(-286.500000px, -51.000000px) translate(275.000000px, ${34.0 + moveValue}px)`; pygmies[5].style.transform = `translate(286.500000px, 152.000000px) rotate(90.000000deg) translate(-286.500000px, -152.000000px) translate(275.000000px, ${135.5 + moveValue}px)`; pygmies[6].style.transform = `translate(286.500000px, 196.5000000px) rotate(90.000000deg) translate(-286.500000px, -196.500000px) translate(275.000000px, ${179.5 + moveValue}px)`; pygmies[7].style.transform = `translate(17.500000px, 173.500000px) rotate(-90.000000deg) translate(-17.00000px, -173.500000px) translate(5.500000px, ${156.5 + moveValue}px)`; pygmies[8].style.transform = `translate(17.000000px, 106.500000px) rotate(-90.000000deg) translate(-17.00000px, -106.500000px) translate(5.500000px, ${89.5 + moveValue}px)`; pygmies[9].style.transform = `translate(17.00000px, 252.500000px) rotate(-90.000000deg) translate(-17.00000px, -252.500000px) translate(5.500000px, ${235.5 + moveValue}px)`; requestAnimationFrame(draw); })(); 复制代码
代码主要是做了两件事:
- 获取麦克风的音频信息
- 利用音频信息改变svg的位置信息
只不过需要不断的循环,来获取最新的信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Intel汇编语言程序设计
Kip Irvine / 电子工业出版社 / 2007-9-1 / 61.00元
《国外计算机科学教材系列•Intel汇编语言程序设计(第5版)》全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工作机制到指令集;从最基本的编译器链器的使用到高级过程、结构和宏的使用;从用纯汇编编写程序到用C/C++等最新编译器与汇编的混合接口编程;从16位实模式下BIOS、DOS实模式文本及图形程序设计到32位保护模式的Windows程序设计;从磁盘基础知识到Intel指令编码、......一起来看看 《Intel汇编语言程序设计》 这本书的介绍吧!