如何获得视频元素的当前响度级别

 liuluoyu 发布于 2023-02-08 11:37

我知道如何设置或获得常识中的音量.就像你设置的总体积一样.因此,如果声音很大并且你降低了音量,整个剪辑的音量就会缩小,所以响亮的声音会变得更安静,而且已经发出的声音甚至更低了.

我正在尝试制作动画,其中,画布,圆圈的大小会根据视频,音频或麦克风的音量而变化,而不是基于总音量.我没有制作体积计.

所以基本上是视频元素的声音可视化器.

但是,我找不到视频元素的属性.这就像我找不到合适的词,当前的响度?!

有用的链接:

http://jcla1.com/blog/2012/03/11/web-audio-api-overview-part1/

https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AnalyserNode-section

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays

http://www.html5rocks.com/en/tutorials/webaudio/intro/

http://chimera.labs.oreilly.com/books/1234000001552/index.html

http://webaudioapi.com/samples/

经过大量的尝试和帮助形成链接,我已经做了这个......但是大部分时间响度似乎都是不完整的,不确定这是不是真的.

http://jsfiddle.net/d4Xqm/10/

http://jsfiddle.net/techsin/d4Xqm/19/

http://jsfiddle.net/techsin/d4Xqm/18/

var v= document.getElementById('v'),
    ctx= new webkitAudioContext(),
    src= ctx.createMediaElementSource(v),
    alyz= ctx.createAnalyser(),
    arr= null, l=0, i=0,
    t=true, p=$('.l');


v.addEventListener('play',update);
v.addEventListener('ended',function(){t=false;});

src.connect(alyz);
alyz.connect(ctx.destination);
arr= new Uint8Array(alyz.frequencyBinCount);

function update(){
    if(t) requestAnimationFrame(update);
    alyz.getByteFrequencyData(arr);
    l=0;
    for(i=0; i

MarijnS95.. 12

我的理解是你要制作一个vu米,但用圆圈而不是条形.您首先需要做的是从分析仪获得所有频率的平均音量.然后只需使用该值作为绘制圆的半径.

我用代码和解释注释为你做了一个jsfiddle.要获得平均值:

var array = new Uint8Array(analyser.fftSize);
analyser.getByteTimeDomainData(array);
var average = 0;
var max = 0;
for (var a of array) {
    a = Math.abs(a - 128);
    average += a;
    max = Math.max(max, a);
}

average /= array.length;

希望这可以帮助!

1 个回答
  • 我的理解是你要制作一个vu米,但用圆圈而不是条形.您首先需要做的是从分析仪获得所有频率的平均音量.然后只需使用该值作为绘制圆的半径.

    我用代码和解释注释为你做了一个jsfiddle.要获得平均值:

    var array = new Uint8Array(analyser.fftSize);
    analyser.getByteTimeDomainData(array);
    var average = 0;
    var max = 0;
    for (var a of array) {
        a = Math.abs(a - 128);
        average += a;
        max = Math.max(max, a);
    }
    
    average /= array.length;
    

    希望这可以帮助!

    2023-02-08 11:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有