试图通过javascript从音频文件中获取分贝级别

Posted

技术标签:

【中文标题】试图通过javascript从音频文件中获取分贝级别【英文标题】:Trying to get decibel levels from an audio file through javascript 【发布时间】:2014-11-21 21:38:46 【问题描述】:

我一直在看这里的信息:

Is there a way get something like decibel levels from an audio file and transform that information into a json array?

但是当我尝试在这里运行 JSBin 时:

<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8 />
    <title>Get Audio Data</title>
    <link rel="stylesheet" type="text/css" href="index.css">
    <script type="text/javascript" src="music.js"></script>
  </head>
  <body>
    <div id=meter></div>
  </body>
</html>

#meter 
    width: 500px;
    height: 15px;
    margin: 2px 0;
    background: green;
    -webkit-transition;
    width .05s;


function() 
    var ctx = new webkitAudioContext(),
    url = 'test.mp3',
    audio = new Audio(url),
    processor = ctx.createJavaScriptNode(2048, 1, 1),
    meter = document.getElementById('meter'),
    source;

    audio.addEventListener('canplaythrough', function() 
        source = ctx.createMediaElementSource(audio);
        source.connect(processor);
        source.connect(ctx.destination);
        processor.connect(ctx.destination);
        audio.play();
    , false);

    processor.onaudioprocess = function(evt) 
        var input = evt.inputBuffer.getChannelData(0),
        len = input.length,
        total = i = 0,
        rms;
        while(i<len)
            total += Math.abs(input[i++]);
        rms = Math.sqrt(total/len);
        meter.style.width = (rms*100) + '%';
    ;
;

我不太确定它在做什么。谁能给我更多信息?

【问题讨论】:

我不是在网上四处寻找您的代码。请看How to Ask 点击一个链接并不能真正构成在互联网上追逐......但我会编辑这个问题。 您是否只是要求某人解释代码在做什么,或者您是否期望它应该做一些它没有做的事情?你的问题不是很清楚。 【参考方案1】:

替换失效的 API 调用后,您的代码会生成 RMS 输出

old    webkitAudioContext
new    


try 

    window.AudioContext = window.AudioContext ||
        window.webkitAudioContext ||
        window.mozAudioContext ||
        window.oAudioContext ||
        window.msAudioContext;

    ctx = new AudioContext();

    console.log("cool audio context established ... ctx ");

 catch (e) 

    alert("Web Audio API is not supported by this browser\n ... http://caniuse.com/#feat=audio-api");

old    createJavaScriptNode
new    createScriptProcessor

【讨论】:

以上是关于试图通过javascript从音频文件中获取分贝级别的主要内容,如果未能解决你的问题,请参考以下文章

基于AudioTrack、AudioRecord获取分贝值、录制时长、PCM解码与编码

使用 HTML5/javascript 校正音频音量输出分贝,关闭预处理

MediaRecorder和AudioRecorder,录音和获取分贝

C#获取话筒主峰值(实时音频输出分贝量)

Android 获取麦克风的音量(分贝)

从 Windows Phone 上的轨道检测音频电平