gpt4 book ai didi

java - 在给定时间查找 .wav 的 'volume'

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:18 24 4
gpt4 key购买 nike

我正在为我的第四年项目(处理函数响应式编程)开发一个小示例应用程序。这个想法是创建一个简单的程序,可以播放 .wav 文件,然后显示播放歌曲当前音量的“弹跳”动画(就像在录音软件中一样)。我在 Scala 中构建它,所以主要关注 Java 库和现有解决方案。

目前,我已经设法轻松播放.wav 文件,但我似乎无法实现第二个目标。基本上有一种方法可以解码 .wav 文件,这样我就可以通过某种方式访问任何给定时间的“音量”?按体积,我想我的意思是它的振幅,但我对此可能是错误的 - 高等物理是前一段时间......

显然,我对此一无所知,所以如果有人能为我指出正确的方向,那就太好了!

最佳答案

在数字音频处理中,您通常指的是信号的瞬时峰值幅度(也称为 PPM -- peak programme metering )。根据您想要的准确度,或者您是否希望对某些标准化计量进行建模,您可以

  • 只需使用样本帧的滑动窗口(找到每个窗口的最大绝对值)
  • 实现某种峰值保持机制,在给定的持续时间内保留最后一个峰值,然后开始使该值每秒“下降”给定的分贝数。

另一种测量模式是 RMS,它是通过在特定时间窗口内积分计算得出的(将样本值的平方相加,除以窗口长度,然后取平方根,即 RMS 均方根)。这可以更好地了解信号的“能量”,移动比峰值测量更平滑,但不会捕获观察到的最大值。此模式有时称为 VU meter以及。您可以使用一种滞后(低通)滤波器对其进行近似,例如y[i] = y[i-1]*a + |x[i]|*(a-1) , 对于一些值 0 < a < 1

您通常以对数方式显示值,即在 decibels 中,因为这更符合我们对信号强度的感知,而且对于大多数信号而言,它会更规律地覆盖您的屏幕空间。

我参与的三个项目可能对你有帮助:

  • ScalaAudioFile您可以使用它从 AIFF 或 WAVE 文件中读取样本帧
  • ScalaAudioWidgets这是一个在 scala-swing 之上提供一些音频应用程序小部件的尚年轻且不完整的项目,包括 PPM View ——只需使用滑动窗口并定期设置窗口的当前峰值(以及可选的 RMS),并且该 View 将处理峰值保持时间和下降时间
  • ( ScalaCollider ,SuperCollider 声音合成系统的客户端,您可以使用它来回放声音文件并实时测量峰值和 RMS 振幅。后者可能对您的项目来说是一种矫枉过正,并且会涉及如果您从未听说过 SuperCollider,则需要一些严肃的学习曲线。优点是您无需担心将声音播放与仪表显示同步)

关于java - 在给定时间查找 .wav 的 'volume',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com