查找给定时间 .wav 的“音量”

2023-12-30

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

目前,我已经成功地播放了 .wav 文件,但我似乎无法实现第二个目标。基本上有没有一种方法可以解码 .wav 文件,以便我可以通过某种方式访问 任何给定时间的“音量”?就体积而言,我想我的意思是它的振幅,但我可能是错的 - 高等物理学是不久前......

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


在数字音频处理中,您通常指的是信号的瞬时峰值幅度(也称为PPM-- 峰值节目计量 http://en.wikipedia.org/wiki/Peak_programme_meter)。根据您想要的准确程度或者您是否希望对某些标准化计量进行建模,您可以

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

另一种测量模式是 RMS,它是通过在某个时间窗口内积分来计算的(将采样值的平方相加,除以窗口长度,然后取平方根,即均方根 RMS)。这可以更好地了解信号的“能量”,比峰值测量更平滑,但不会捕获观察到的最大值。这种模式有时被称为VU meter http://en.wikipedia.org/wiki/VU_meter以及。您可以使用一种滞后(低通)滤波器来近似这一点,例如y[i] = y[i-1]*a + |x[i]|*(a-1),对于某个值0 < a < 1

通常以对数方式显示值,即decibels http://en.wikipedia.org/wiki/Decibel,因为这更符合我们对信号强度的感知,而且对于大多数信号来说,它会更规则地覆盖您的屏幕空间。

我参与的三个项目可能会对您有所帮助:

  • Scala音频文件 https://github.com/Sciss/ScalaAudioFile您可以使用它从 AIFF 或 WAVE 文件中读取示例帧
  • ScalaAudioWidgets https://github.com/Sciss/ScalaAudioWidgets这是一个仍然年轻且不完整的项目,旨在在 scala-swing 之上提供一些音频应用程序小部件,包括 PPM 视图——只需使用滑动窗口并定期设置窗口的当前峰值(以及可选的 RMS),以及该视图将处理峰值保持和下降时间
  • (斯卡拉碰撞器 https://github.com/Sciss/ScalaCollider,SuperCollider 声音合成系统的客户端,您可以使用它来播放声音文件并实时测量峰值和 RMS 幅度。后者对于您的项目来说可能有点大材小用,并且如果您从未听说过 SuperCollider,则会涉及一些严重的学习曲线。优点是您无需担心声音播放与仪表显示的同步)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找给定时间 .wav 的“音量” 的相关文章

随机推荐

  • 如何从 Ansible 设置模块的输出中获取列表的第一个元素?

    我从设置模块收到以下数据 ansible nodename 3d734bc2a391 ansible os family RedHat ansible pkg mgr yum ansible processor AuthenticAMD A
  • 检查页面上是否存在Javascript脚本

    我制作了一个书签 它将脚本从我的服务器加载到用户当前页面上 但是 我在脚本中进行了 if 检查 如果不满足条件 则不采取任何操作 但是 如果用户满足该条件 则代码将运行 但会导致将两组脚本插入到其页面中 我可以阻止这个吗 a href Bo
  • 如何在 Winforms Designer 中设置组合框的默认值?

    Locked 有对该问题内容的争议 help locked posts此时正在解决 目前不接受新的答案或互动 我正在使用 Visual Studio 2010 用 C 编写一个 Windows 窗体应用程序 它有一个组合框 我已经设置了Dr
  • 如何在 Gradle 中设置 Kotlin 源编码?

    使用 Gradle 构建 Java 或 Groovy 时 可以像这样定义源编码 compileJava options encoding UTF 8 compileTestJava options encoding UTF 8 compil
  • 如何限制对 Elmah 的远程访问?

    在我们的开发 Web 服务器上安装 Elmah 后 我们可以限制谁远程访问它吗 即使我们对用户名 密码进行硬编码 散列 还是仅通过 IP 有两种设置 一种是在
  • 在构造函数重载的情况下如何调用 super(...) 和 this(...) ?

    我以前从未需要这样做 但由于两者都必须是构造函数中的 第一 行 应该如何处理它 对于这种情况 最好的重构是什么 这是一个示例 public class Agreement extends Postable public Agreement
  • 使 LinearLayout 像 Button 一样工作

    我有一个LinearLayout我设计得看起来像button 它包含一些文本 ImageView 元素 我想做整体LinearLayout表现得像一个button 特别是赋予它在 a 中定义的状态 以便在按下时它具有不同的背景 有没有比制作
  • 浏览器窗口中的所有选项卡是否共享一个 JavaScript 线程?

    一般来说 浏览器中的 JavaScript 执行被认为是单线程的 这个单一线程是否适用于浏览器窗口中打开的所有选项卡 换句话说 如果 不同的 JavaScript 代码在不同的选项卡中运行 它们都是使用单个线程执行的吗 此外 当您打开同一浏
  • 将seaborn图例移动到不同的位置

    我在用着factorplot kind bar 与海博恩 情节很好 只是图例放错了位置 太靠右 文本超出了情节的阴影区域 如何让seaborn将图例放在其他地方 例如左上角而不是右中 基于 user308827的答案 你可以使用legend
  • 我可以在 Facebook 应用程序上设置页面选项卡高度吗?

    我使用以下命令创建了一个 Facebook 页面选项卡应用程序Heroku 托管选项 https devcenter heroku com articles facebook 我看到一个用于将 页面选项卡 宽度设置为 正常 810 像素 或
  • Raphaël 对象:模拟点击

    是否可以模拟拉斐尔对象上的点击 我已经尝试过了 object click Error click is not a function or object dispatchEvent click Error Could not convert
  • 使用 java Mapreduce 处理 JSON

    我是 hadoop mapreduce 新手 我输入了文本文件 其中数据已存储如下 这里只有几个元组 data txt author Shari f Qa sim book al Rabi al manshu d author Na s i
  • 传递给 Rust WebAssembly 模块时 JavaScript 字符串为空

    当将字符串传递给 Rust WASM 模块时 传递的数据显示为空白 根据模式匹配real code compute功能 以下代码是我尝试过的 我不知道这是否与它的返回方式有关 但是当我传递硬编码时 str 效果很好 但是 那JsIntero
  • 验证:仅字母、数字和 -

    我想验证我的用户 因此他们只能在用户名中使用 a z 和 validates format of username with gt a z 然而这条规则也允许空格 Username should use only letters numbe
  • Oauth 错误 invalid_request:redirect_uri 未列入白名单

    我正在尝试基于此使用 React 和 Node 开发一个应用程序文档 https developers shopify com tutorials build a shopify app with node and react 我一步步按照
  • ListenableWorker 不删除通知图标

    我正在使用 ListenableWorker 执行后台任务 另外我希望操作系统了解我的服务重要性 所以我打电话 setForegroundAsync new ForegroundInfo WorkerConstants NOTIFICATI
  • 文本变量不起作用

    我正在尝试从 Tkinter 中的 Entry 小部件中获取文本 它适用于 Entry1 get 但不适用于 textvariable 我究竟做错了什么 from Tkinter import master Tk v StringVar d
  • 龙卷风“@run_on_executor”正在阻塞

    我想问一下如何龙卷风 concurrent run on executor https tornado readthedocs org en latest concurrent html tornado concurrent run on
  • django-registration 激活 url 中的等号

    我正在使用 django registration 由于某种原因 当它发送激活电子邮件时 它会在倒数第三个字符中插入一个等号 如下所示 http example com accounts activate a65b4aca5156211bc
  • 查找给定时间 .wav 的“音量”

    我正在为我的第四年项目 处理函数反应式编程 开发一个小型示例应用程序 我们的想法是创建一个简单的程序 可以播放 wav 文件 然后显示正在播放歌曲的当前音量的 弹跳 动画 就像在录音软件中一样 我正在 Scala 中构建它 因此主要关注 J