当前位置: 首页 > 面试题库 >

有没有办法从音频文件中获取类似分贝级别的东西,并将该信息转换为json数组?

康元凯
2023-03-14
问题内容

这样我就可以使用这些信息来协调页面动画,例如随着分贝级别越高,使元素越亮


问题答案:

这种方法将在Chrome / Safari中起作用:

+function(){



  var ctx = new AudioContext()

    , url = 'https://cf-media.sndcdn.com/OfjMZo27DlvH.128.mp3?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiKjovL2NmLW1lZGlhLnNuZGNkbi5jb20vT2ZqTVpvMjdEbHZILjEyOC5tcDMiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE1MTUwNDM5Njd9fX1dfQ__&Signature=FfmL2qUssAKs3Z7EPoYo0Yq8-SAg8rKLPs65EasXwuVkfsOB4joFqeCvVR2elpaG-lJaV4hXpXFiRCDWXNOYyAtO4Oz~sexiPwIoSk8-jWiVbGQRS8TMmUmj7TJzxemMOIj7ugWJKk6PHsrUdgqs9woDpHzxmkGCzk6sfqJEIsdeZJ4rWUFAh4iGWn9M6b0xfzTgndAJmytkNj9raCpWCBVmdr5u-r9nt~q5uF1easNSW9oaFilM4s1Hq2ei~VJye8zW9bzvrGm8idVdy-tiPeMWAKcE8J2VuaS1Ret6jRTRaHTDuiNgA5sZvgTzNpEpKtWI7UmAWI5TrqNVSlxpgQ__&Key-Pair-Id=APKAJAGZ7VMH2PFPW6UQ'

    , audio = new Audio(url)

    // 2048 sample buffer, 1 channel in, 1 channel out

    , processor = ctx.createScriptProcessor(2048, 1, 1)

    , meter = document.getElementById('meter')

    , source



  audio.crossOrigin = 'anonymous'



  audio.addEventListener('canplaythrough', function(){

    source = ctx.createMediaElementSource(audio)

    source.connect(processor)

    source.connect(ctx.destination)

    processor.connect(ctx.destination)

    audio.play()

  }, false);



  // loop through PCM data and calculate average

  // volume for a given 2048 sample buffer

  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 ) + '%'

  }



}()


#meter {

  width: 0%;

  height: 15px;

  margin: 2px 0;

  background: green;

  -webkit-transition: width .05s;

}


<div id="meter"></div>

重要的事情发生在这里:

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 ) + '%' 
}

基本上,您每隔2048个样本就获取一次原始PCM数据(值从-1到1),然后遍历它们,从而计算给定时间段内的平均信号电平。

然后,您可以使用该值制作动画。

编辑: 更新为使用RMS,正如Jason指出的那样,RMS是一种更有意义的度量。



 类似资料:
  • 我正在尝试为在jersey上构建的项目制定日志记录标准,我想提供一种简单的方法来记录请求信息和响应,以防出现异常。以下代码说明了我的想法: 问题是如何在我的ServiceException类中获得以下内容: 我试图访问,但运气不佳。 提前感谢!

  • 问题内容: 假设我们具有以下类层次结构: 如果像这样在ClassB上浏览 dict ,我只会看到bar属性: 输出为bar 我可以运用自己的方式来获取属性,不仅是指定类型,还包括其祖先。但是,我的问题是python是否已经有一种方法可以在不重新发明轮子的情况下做到这一点。 如下运行我的代码… …同时返回bar和foo。 请注意,我正在简化一些事情:名称冲突,在本例中可以使用dict时使用items

  • 我现在有这个JSON文件: 我想获取所有用户名并将其转换为ArrayList。所以我的ArrayList只有用户名、用户名1和用户名2。 我也在使用org. JSON。

  • 问题内容: 我有一个文件,称之为。 有没有一种方法可以“读取”其中的内容,并获取其中的所有类的列表作为完整的类名,包括其包,例如? 我在考虑,但是似乎找不到用于检索整个类集的方法。 问题答案: 您可以将dexlib2库用作独立库(在maven中可用),以读取dex文件并获取类列表。 请注意,类名将采用“ Ljava / lang / String;”的形式,这就是它们如何存储在dex文件(和Jav

  • 这是我的问题,有人给了我一个函数,如果我理解得很好,它会把一些声音样本放入数组列表中。 我想创建一个。wav文件的音频曲目,我真的不知道如何做到这一点。 这是代码,因为也许我根本不懂。。。 下面是示例,在上面的代码中导入。

  • 想获取 mp3 或者 wav 文件的音调信息, 那个可以量化的音调 输入一段音频 输出量化的音调, 跟随着时间, 1 秒一个, 3,3,9,2,10,13.....