audioop.rms() - 为什么它与正常的 RMS 不同?

2024-03-01

我正在编写一个 python 函数来返回 .wav 文件的响度。 RMS 似乎是最好的衡量标准,用python检测并记录声音 https://stackoverflow.com/questions/2668442/detect-and-record-a-sound-with-python. audioop.rms()可以解决问题,但我想避免将 audioop 作为依赖项,并且我已经导入了 numpy.但我没有得到相同的 RMS 值,并且希望能帮助您了解正在发生的情况。

来自音频页面 http://docs.python.org/library/audioop.html,它表示 rms 计算正是您所期望的,即sqrt(sum(S_i^2)/n), 在哪里,S_i is the i-th 声音样本。看起来这不是火箭科学。

要使用 numpy,我首先将声音转换为 numpy 数组,并且始终看到相同的最小值/最大值以及相同的数据长度(因此转换看起来很好)。

>>> d = np.frombuffer(data, np.int16)
>>> print (min(d), max(d)), audioop.minmax(data,2)
(-2593, 2749) (-2593, 2749)

但我得到的 RMS 值非常不同,甚至没有接近:

>>> numpy_rms = np.sqrt(sum(d*d)/len(d))
>>> print numpy_rms, audioop.rms(data, 2)
41.708703254716383, 120

它们之间的差异是可变的,我看不到明显的模式,例如,我也得到:

63.786714248938772, 402
62.779300661773405, 148

我的 numpy RMS 代码提供与此处相同的输出:信号的 Numpy 均方根 (RMS) 平滑 https://stackoverflow.com/questions/8245687/numpy-root-mean-squared-rms-smoothing-of-a-signal

我不知道哪里出了问题,但有些地方不对劲。非常感谢任何帮助。


编辑/更新:

如果它有用,这是我最终得到的代码。它不像audioop那么快,但仍然足够快,足以满足我的目的。值得注意的是,使用 np.mean() 比我使用 python sum() 的版本快得多(~100 倍)。

def np_audioop_rms(data, width):
    """audioop.rms() using numpy; avoids another dependency for app"""
    #_checkParameters(data, width)
    if len(data) == 0: return None
    fromType = (np.int8, np.int16, np.int32)[width//2]
    d = np.frombuffer(data, fromType).astype(np.float)
    rms = np.sqrt( np.mean(d**2) )
    return int( rms )

使用执行计算double as in audioop.rms() code http://hg.python.org/cpython/file/2.7/Modules/audioop.c#l410:

d = np.frombuffer(data, np.int16).astype(np.float)

Example

>>> import audioop, numpy as np
>>> data = 'abcdefgh'
>>> audioop.rms(data, 2)
25962
>>> d = np.frombuffer(data, np.int16)
>>> np.sqrt((d*d).sum()/(1.*len(d)))
80.131142510262507
>>> d = np.frombuffer(data, np.int16).astype(np.float)
>>> np.sqrt((d*d).sum()/len(d))
25962.360851817772
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

audioop.rms() - 为什么它与正常的 RMS 不同? 的相关文章

  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 更改 `base_compiledir` 以将编译后的文件保存在另一个目录中

    theano base compiledir指编译后的文件存放的目录 有没有办法可以永久设置theano base compiledir到不同的位置 也许通过修改一些内部 Theano 文件的内容 http deeplearning net
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • 使用 Firefox 绕过弹出窗口下载文件:Selenium Python

    我正在使用 selenium 和 python 来从中下载某些文件web page http www oceanenergyireland com testfacility corkharbour observations 我之前一直使用设
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M

随机推荐

  • 进程监控 CreateProcessNotifyRoutineEx

    我正在开发一个用于监视进程创建的驱动程序 我编写了一个简单的代码来完成它 我用PsSetCreateProcessNotifyRoutineEx 但这行不通 我完全遵循微软的帮助在这个链接上 http msdn microsoft com
  • Boost Beast 在关闭后重新连接 websocket 连接

    我正在使用 boost beast 创建 websocket 连接 到目前为止它似乎工作正常 但我无法弄清楚断开连接后是否应该替换 websocket stream 变量 即我有一个变量 boost beast websocket stre
  • 有没有办法在 C 中使用具有常量索引的常量数组作为 switch case 标签?

    我有一些常量值和数组定义它们的标签和哈希码 例如 define LABEL A 0 or const int LABEL A 0 define LABEL B 1 define LABEL C 2 define LABEL D 3 cons
  • 获取 Google 表单脚本生成的电子邮件以将数据传输到响应表中

    我目前正在尝试设置审批工作流程 对于这些事情 我还相当初级 但到目前为止 在示例的帮助下 它已经达到了可观的水平 可以满足我们的需求 我正在使用来自的模板 示例使用 Google 脚本和表单进行电子邮件批准 https sites goog
  • 无法删除 S3 存储桶 - 错误未找到数据

    我无法摆脱 S3 中的五个桶 AWS 控制台中的每个屏幕都会显示 未找到错误数据 即概述 属性 权限 管理 访问点 我无法设置生命周期删除对象的规则 但存储桶中从未有过任何内容 而且版本控制也从未启用 我也尝试过在我的终端中强制它 aws
  • Qt 4.8 beta 和 Mac OSX Lion,Phonon 错误

    成功安装 mac OS 10 7 后 我尝试编译我的 qt 4 7 项目 我收到了很多 不支持的 mac os x 版本 的警告 因此我决定使用 Qt 4 8 beta 现在所有警告都消失了 但是 我现在使用 Phonon 时遇到链接器问题
  • 为什么window.width小于媒体查询中设置的视口宽度

    我很困惑 仍然不知道如何用合适的语言解释这一点 到目前为止 我已经使用断点并设置了媒体查询 使用的断点变量如下所示 menustatictofixed min width 900px breakpoint to ems 设置为 true 我
  • 错误:“...”未命名类型

    我有一个工作项目 重新安排一些代码后 我尝试重新编译我的项目 然后奇怪的事情开始发生 看一下编译器输出的摘录 我正在使用 MinGW G 从 Windows 上的 Eclipse 进行编译 Build of configuration De
  • 术语“Scaffold-DbContext”未被识别为 cmdlet 的名称

    我有一个包含两个项目的解决方案 一个是主项目 第二个是使用 EF Core 10 0 RC2 的项目 在第二个项目中 我使用这三个命令来安装 EF Core 并运行此 nuget 命令来安装它 Install Package Microso
  • 查找列表列表中项目的部分匹配

    我有这样的列表 l 08 00 09 00 60 False 1 0 09 00 10 00 60 False 0 3 12 00 13 00 60 False 2 0 我想检查是否有列表l有一个元素但我不知道最后一个元素的值float 我
  • 如何在 R 中使用 readHTMLTable 读取注释掉的 HTML 表

    过去 我已经能够使用 R 中的 readHTMLTable 来获取一些足球统计数据 当今年再次尝试这样做时 表格没有显示 即使它们在网页上可见 这是一个例子 http www pro football reference com boxsc
  • 从控制器构造函数中的 URL 获取参数

    我需要编写一些代码来在项目数据库中查找 ID 用户耦合到一个项目 并且所有项目都与其他对象 例如会话 有很多连接 现在 我需要在运行任何操作之前检查尝试访问会话的用户是否连接到与会话连接的同一项目 为此 我想在操作上使用 属性 MVC 创建
  • MySQL:仅在满足条件时更新字段

    是否可以在 MySQL 上执行 UPDATE 查询 仅在满足特定条件时才更新字段值 像这样的事情 UPDATE test SET CASE WHEN true THEN field 1 END WHERE id 123 换句话说 字段 仅在
  • maven antrun 插件

    我的 pom 中有以下内容
  • React Hooks 中的 Push 方法(useState)?

    如何将元素推送到 useState 数组 React hook 中 这是反应状态下的旧方法吗 或者新的东西 E g setState 推送示例 https stackoverflow com questions 41052598 react
  • 默认情况下,Spring Boot 期望视图存储在哪里?

    我正在尝试使用 Spring Boot 重写我的配置繁重的普通 Spring MVC 项目 我使用 Spring Boot Initiaizer 在 IntelliJ 中启动了一个全新的 Spring Boot 项目 并且我将采用基于 Ja
  • pandas groupby 一次用于多个数据帧/文件

    我有多个巨大的 tsv 文件 我正在尝试使用 pandas 处理它们 我想按 col3 和 col5 分组 我试过这个 import pandas as pd df pd read csv filename txt sep t g2 df
  • Web API 将对象传递给 Get 方法

    有没有办法在 Web API 的 Get 方法中将对象作为参数传递 我有以下案例 在我的 Web API 项目中 Get 方法如下所示 public IEnumerable
  • 可以在事件处理函数中删除 POSIX 计时器吗?

    问题 如果我打电话create timer与SIGEV THREAD常量存储在sigev notify我的领域sigevent结构 那么当计时器事件发生时 我的sigev notify function回调将被调用 调用是否有任何隐藏的含义
  • audioop.rms() - 为什么它与正常的 RMS 不同?

    我正在编写一个 python 函数来返回 wav 文件的响度 RMS 似乎是最好的衡量标准 用python检测并记录声音 https stackoverflow com questions 2668442 detect and record