230Echarts - 3D 柱状图(Music Visualization)

简介: 230Echarts - 3D 柱状图(Music Visualization)
效果图

源代码
var UPDATE_DURATION = 100;
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();
var oReq = new XMLHttpRequest();
oReq.open('GET', 'data/asset/sound/roll-it-up.mp3', true);
oReq.responseType = 'arraybuffer';
oReq.onload = function(e) {
    audioContext.decodeAudioData(oReq.response, initVisualizer);
};
oReq.send();
function initVisualizer(audioBuffer) {
    inited = true;
    var source = audioContext.createBufferSource();
    source.buffer = audioBuffer;
    // Must invoked right after click event
    if (source.noteOn) {
        source.noteOn(0);
    }
    else {
        source.start(0);
    }
    var analyzer = audioContext.createAnalyser();
    var gainNode = audioContext.createGain();
    analyzer.fftSize = 4096;
    gainNode.gain.value = 1;
    source.connect(gainNode);
    gainNode.connect(analyzer);
    analyzer.connect(audioContext.destination);
    var frequencyBinCount = analyzer.frequencyBinCount;
    var dataArray = new Uint8Array(frequencyBinCount);
    var beta = 0;
    function update() {
        analyzer.getByteFrequencyData(dataArray);
        var item = [];
        var size = 50;
        var dataProvider = [];
        for (var i = 0; i < size * size; i++) {
            var x = i % size;
            var y = Math.floor(i / size);
            var dx = x - size / 2;
            var dy = y - size / 2;
            var angle = Math.atan2(dy, dx);
            if (angle < 0) {
                angle = Math.PI * 2 + angle;
            }
            var dist = Math.sqrt(dx * dx + dy * dy);
            var idx = Math.min(
                frequencyBinCount - 1, Math.round(angle / Math.PI / 2 * 60 + dist * 60) + 100
            );
            var val = Math.pow(dataArray[idx] / 100, 3);
            dataProvider.push([x, y, Math.max(val, 0.1)]);
        }
        myChart.setOption({
            grid3D: {
                viewControl: {
                    beta: beta,
                    alpha: Math.sin(beta / 10 + 40) * (beta % 10 + 5) / 15 * 30 + 30,
                    distance: Math.cos(beta / 50 + 20) * (beta % 10 + 5) / 15 * 50 + 80,
                    animationDurationUpdate: UPDATE_DURATION,
                    animationEasingUpdate: 'linear'
                }
            },
            series: [{
                data: dataProvider
            }]
        });
        beta += 2;
        setTimeout(update, UPDATE_DURATION);
    };
    update();
}
option = {
    tooltip: {},
    visualMap: {
        show: false,
        min: 0.1,
        max: 4,
        inRange: {
            color: ['#010103', '#2f490c', '#b0b70f', '#fdff44', '#fff']
        }
    },
    xAxis3D: {
        type: 'value'
    },
    yAxis3D: {
        type: 'value'
    },
    zAxis3D: {
        type: 'value',
        min: -6,
        max: 6
    },
    grid3D: {
        show: false,
        environment: '#000',
        viewControl: {
            distance: 100
        },
        postEffect: {
            enable: true,
            FXAA: {
                enable: true
            }
        },
        light: {
            main: {
                shadow: true,
                intensity: 10,
                quality: 'high'
            },
            ambientCubemap: {
                texture: 'data-gl/asset/canyon.hdr',
                exposure: 0,
                diffuseIntensity: 0.2
            }
        }
    },
    series: [{
        type: 'bar3D',
        silent: true,
        shading: 'lambert',
        data: [],
        barSize: 1,
        lineStyle: {
            width: 4
        },
        // animation: false,
        animationDurationUpdate: UPDATE_DURATION
    }]
}
目录
相关文章
|
6月前
echarts 柱状图/折线图x轴坐标间隔
echarts 柱状图/折线图x轴坐标间隔
211 0
|
12月前
|
JSON 前端开发 数据格式
【前端统计图】echarts实现简单柱状图
【前端统计图】echarts实现简单柱状图
84 0
|
14天前
|
JSON JavaScript 前端开发
vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
218 0
|
3月前
Echarts——饼图折线图柱状图相互转换
Echarts——饼图折线图柱状图相互转换
125 0
|
4月前
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
327 0
|
5月前
|
数据可视化 JavaScript 前端开发
使用 ECharts 绘制3D饼图,立体效果华丽渲染!
使用 ECharts 绘制3D饼图,立体效果华丽渲染!
|
5月前
|
JavaScript Apache 容器
如何使用ECharts制作一个简单的柱状图
如何使用ECharts制作一个简单的柱状图
66 0
|
6月前
|
JSON 程序员 定位技术
使用echarts+echarts-gl绘制3d地图,实现地图轮播效果
记录一下大屏开发中使用到的echarts-gl 大屏的页面根据需求前前后后改了几个版本了,地图的样式也改了又改 这里记录一下,因为echarts属性用到的比较多也比较杂,防止以后需要用到忘记了
|
12月前
echarts设置柱状图柱状图粗细大小
echarts设置柱状图柱状图粗细大小
214 1
|
12月前
|
BI
echarts柱状图实现颜色渐变效果
echarts柱状图实现颜色渐变效果
210 1

热门文章

最新文章