Python:时间拉伸波形文件 - 三种方法之间的比较

2024-01-03

我正在对语音数据集进行一些数据增强,并且我想在时域中拉伸/压缩每个音频文件。

我找到了以下三种方法来做到这一点,但我不确定哪一种是最好的或更优化的方法:

dimension = int(len(signal) * speed)
res = librosa.effects.time_stretch(signal, speed)
res = cv2.resize(signal, (1, dimension)).squeeze()
res = skimage.transform.resize(signal, (dimension, 1)).squeeze()

然而,我发现librosa.effects.time_stretch在信号中添加不需要的回声(或类似的东西)。

所以,我的问题是:这三种方式的主要区别是什么?还有更好的方法吗?


librosa.effects.time_stretch(信号, 速度) (docs https://librosa.github.io/librosa/generated/librosa.effects.time_stretch.html)

本质上,这种方法使用stft (短时傅立叶变换 https://en.wikipedia.org/wiki/Short-time_Fourier_transform),使用相位声码器 https://en.wikipedia.org/wiki/Phase_vocoder并使用逆stft重建时域信号。通常,当这样做时,会引入一点“相位”,即金属叮当声,因为相位无法 100% 重建。这可能就是您所认为的“回声”。

请注意,虽然这种方法有效地在时域中拉伸音频(即输入和输出都在时域中),但工作实际上是在频域中完成的。

cv2.resize(信号, (1, 维度)).squeeze() (docs https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20resize(InputArray%20src,%20OutputArray%20dst,%20Size%20dsize,%20double%20fx,%20double%20fy,%20int%20interpolation))

这种方法所做的就是使用内插给定信号双线性插值 https://en.wikipedia.org/wiki/Bilinear_interpolation。这种方法适用于图像,但我认为不适合音频信号。你听过结果了吗?它听起来和原始信号一样,只是更快/更慢吗?我认为不仅节奏会改变,频率也会改变,也许还有其他影响。

skimage.transform.resize(信号, (维度, 1)).squeeze() (docs https://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.resize)

再次强调,这适用于图像,而不是声音。除了插值之外(样条插值 https://en.wikipedia.org/wiki/Spline_interpolation与订单1默认情况下),此函数还可以对图像进行抗锯齿处理。请注意,这有nothing与避免音频混叠效应有关(奈奎斯特/混叠 https://en.wikipedia.org/wiki/Nyquist_frequency#Aliasing),因此你可能应该通过传递来关闭它anti_aliasing=False。同样,我假设结果可能不完全是您想要的(改变频率、其他伪影)。

该怎么办?

IMO,你有多种选择。

  1. 如果您输入 ML 算法的内容最终类似于 Mel 频谱图,您可以简单地将其视为图像并使用 skimage 或 opencv 方法对其进行拉伸。频率范围将被保留。我已经成功地使用了这种方法这张音乐节奏估计纸 https://www.researchgate.net/profile/Hendrik_Schreiber/publication/328028453_A_Single-Step_Approach_to_Musical_Tempo_Estimation_Using_a_Convolutional_Neural_Network/links/5bb3933692851ca9ed349cf7/A-Single-Step-Approach-to-Musical-Tempo-Estimation-Using-a-Convolutional-Neural-Network.pdf.

  2. 使用更好的 time_stretch 库,例如橡皮筋 https://pyrubberband.readthedocs.io/en/stable/generated/pyrubberband.pyrb.time_stretch.html#pyrubberband.pyrb.time_stretch。 librosa 很棒,但其当前的时间尺度修改(TSM)算法并不是最先进的。有关 TSM 算法的回顾,请参见示例本文 https://www.mdpi.com/2076-3417/6/2/57/pdf.

  3. 忽略频率变化的事实,只需定期向信号添加 0 个样本或定期从信号中删除样本(就像图像插值一样)。如果您不延伸得太远,它仍然可以用于数据增强目的。毕竟,如果音频内容具有更高或更低的频率,则单词内容不会改变。

  4. 将信号重新采样到另一个采样频率,例如44100 Hz -> 43000 Hz or 44100 Hz -> 46000 Hz使用像这样的库resampy https://github.com/bmcfee/resampy进而pretend仍然是 44100 Hz。这仍然会改变频率,但至少您可以获得 resampy 对结果进行适当过滤的好处,这样您就可以避免上述情况aliasing https://en.wikipedia.org/wiki/Nyquist_frequency#Aliasing,否则会发生这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:时间拉伸波形文件 - 三种方法之间的比较 的相关文章

  • 从 scikit_learn 反转 MinMaxScaler

    为了为我的生成神经网络提供数据 我需要将一些数据标准化在 1 和 1 之间 我用MinMaxScaler来自 Sklearn 效果很好 现在 我的生成器将输出 1 到 1 之间的数据 如何恢复MinMaxScaler获得真实数据 让我们首先
  • 如何加速 svm.predict?

    我正在编写一个滑动窗口来提取特征并将其输入到 CvSVM 的预测函数中 然而 我偶然发现 svm predict 函数相对较慢 基本上 窗口以固定的步幅长度在图像比例上滑动穿过图像 遍历图像加上提取每个图像特征的速度 窗口大约需要 1000
  • 使用卡尔曼滤波器跟踪位置和速度

    我正在使用卡尔曼滤波器 恒定速度模型 来跟踪物体的位置和速度 我测量对象的 x y 并跟踪 x y vx vy 这是有效的 但是如果在传感器读数 x y vx vy 上添加 20 mm 的高斯噪声 即使该点没有移动 只是噪声也会发生波动 对
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 为什么我们应该在 Keras 中对深度学习数据进行标准化?

    我正在 Keras 中测试一些网络架构 以对 MNIST 数据集进行分类 我已经实现了一个类似于 LeNet 的方法 我看到在网上找到的例子中 有一个数据标准化的步骤 例如 X train 255 我在没有这种标准化的情况下进行了测试 我发
  • 使用 OpenCV 进行图像模糊检测

    我正在研究图像的模糊检测 我已经用过拉普拉斯方法的方差在 OpenCV 中 img cv2 imread imgPath gray cv2 cvtColor img cv2 COLOR BGR2GRAY value cv2 Laplacia
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • 旋转矩阵openCV

    我想知道如何找到框架中一组特征的旋转矩阵 我会更具体 我有 2 个具有 20 个特征的帧 假设第 1 帧和第 2 帧 我可以估计两个帧中特征的位置 例如 假设位置 x y 处的某个第 1 帧特征 并且我确切地知道它在哪里 所以假设为 x y
  • 如何从图像生成 tiff/box 文件以在 Windows 中训练 Tesseract

    我正在尝试在 Windows 中训练 Tesseract 为此我需要一对 tiff box 文件 并且我正在尝试使用 jTessBoxEditor 创建它 但它不接受图像作为输入 我也尝试过 boxFactory 但它无法正常运行 有谁知道
  • C++ OpenCV 3.4 / FFMPEG 3.4.1 VideoWriter 和 MP4 输出文件格式

    我正在运行 Linux 内核 4 9 35 ti r44 的 ARM BeagleBone X 15 Debian 机器 在我的 C Qt 5 应用程序中 我想将 cv Mat 帧保存为 MP4 格式视频 我安装了 libx264 并从头开
  • OpenCV Sobel 滤波器 - 为什么它看起来这么糟糕,尤其是与 Gimp 相比?

    我正在尝试使用 OpenCV 重建一些我之前在 Gimp 中完成的预处理 第一级是用于边缘检测的 Sobel 滤波器 它在 Gimp 中运行得很好 现在这是我对 OpenCV 的尝试 opencv imgproc Sobel src sca
  • Google Colab 使用 Transformers 和 PyTorch 微调 BERT Base Case 时出现间歇性“RuntimeError: CUDA out of memory”错误

    我正在运行以下代码来微调 Google Colab 中的 BERT Base Cased 模型 有时代码第一次运行良好 没有错误 其他时候 相同的代码使用相同的数据 会导致 CUDA 内存不足 错误 以前 重新启动运行时或退出笔记本 返回笔
  • 尝试使使用 OpenCV 的 java 应用程序(可执行 Jar)可移植。出现不满意的链接错误

    我制作了一个应用程序 用于从网络摄像头抓取视频并使用 OpenCV 和 JavaCV 检测运动 我正在尝试使用 eclipse 导出为可执行 jar 该程序在 eclipse 中运行良好 就像我编写该程序的计算机上的 exe jar 一样
  • 使用xgboost进行分类时如何获得置信区间或预测离散度的度量?

    使用xgboost进行分类时如何获得置信区间或预测离散度的度量 例如 如果 xgboost 预测某个事件的概率为 0 9 如何获得该概率的置信度 这种置信度是否也被认为是异方差的 要为 xgboost 模型生成置信区间 您应该训练多个模型
  • Haar级联正例图像大小调整

    我正在迈出第一步 为自定义对象识别创建 haar 级联 我花了时间获取大量数据并编写了一些预处理脚本以将视频转换为帧 我的下一步是裁剪感兴趣的对象 以创建一些积极的训练示例 我有几个问题 我确实在网上寻找答案 我有点困惑 我读到我应该致力于
  • CV_MAT_ELEM 中的编译错误

    调用estimateRigidTransform 的结果是我得到一个名为 trans 的cv Mat 对象 为了检索其包含的矩阵 我尝试以这种方式访问 其元素 for i 0 i lt 2 i for j 0 j lt 3 j mtx j
  • 使用张量流导出神经网络的权重

    我使用张量流工具编写了神经网络 一切正常 现在我想导出神经网络的最终权重以制定单一的预测方法 我怎样才能做到这一点 您需要在训练结束时使用以下命令保存模型tf train Saver https www tensorflow org ver
  • 无法将 librosa 与 python 3 一起使用

    我已经在 Windows 上的 ubuntu 子系统上使用 pip3 正确安装了 librosa 但是当我尝试执行像这样的简单程序时 import librosa data sr librosa load sound mp3 print d

随机推荐

  • 构造函数中的对象参数

    首先 如果我的问题难以理解 我深表歉意 我很难准确地解释我需要帮助的内容 我对 Java 和按引用传递等概念很陌生 基本上 我需要知道为什么下面的代码不正确 如何告诉 Java 使用作为构造函数参数传入的对象的方法 再次致歉 感谢您的阅读
  • .net 异常捕获块

    以下 catch 块有什么区别 try catch and try catch Exception 我意识到 在任何一种情况下 异常实例都不可用 但是我可以用一个实例做一些其他实例做不到的事情吗 他们是almost相同 来自 C 语言规范
  • 如何在 Xcode 4.3 下用 Objective C 制作 9*9 网格视图?

    i have searched Xcode controls but doesn t found anything that makes a GridView like the one in the lecture below so how
  • 如何在 C# 中从二维数组中获取完整的行或列

    我不想使用锯齿状数组 并且我有一个二维数组 并且我想获得完整的列或行而不循环遍历它 有谁知道如何做到这一点 1 2 3 4 5 6 double array new double 2 3 Out 1 2 3 or 2 5 要从多维数组中获取
  • 验证 int 和 float64 的 Reflect.Type 的其他方法

    在golang中 JSON消息中的数字总是被解析为float64 为了检测它是否实际上是整数 我使用reflect TypeOf 检查其类型 不幸的是没有常数代表reflect Type intType reflect TypeOf 0 f
  • 将 DateTimeOffset 转换为 DateTime 并向该 DateTime 添加偏移量

    I have 日期时间偏移量 DateTimeOffset myDTO DateTimeOffset ParseExact 2015 01 15 17 37 00 0500 yyyy MM dd HH mm ss zzz CultureIn
  • 从头开始重新开发应用程序?

    这不是一个编程问题 但我觉得 SO 是放置它的正确位置 市场上有一个安卓应用程序 我们的工作是大幅升级应用程序 有太多需要改变的地方 以至于我们决定从头开始一个新项目 我的问题是 为了能够替换 升级 Play 商店中现有的应用程序 我们应该
  • 解码引用的可打印正确

    我有以下字符串 utf 8 Q 5Bproconact 2D Verbesserung 23 32 37 39 5D 28Neu 29 Stellvertretungen Benutzerrecht 2D andere k C3 B6nne
  • 在 NodeJS 后端使用 JWT 和 Active Directory 身份验证

    我正在构建一个由 Angular 前端和 Node JS 后端组成的 Intranet Web 应用程序 应用程序需要使用企业Active Directory 进行身份验证和授权 我正在考虑如何以安全的方式最好地实现这一点 我打算使用Act
  • 无法在 asp.net core 中使用 MSAL 1.1.0-preview 通过授权代码获取 AccessToken

    我按照以下官方步骤尝试了该场景 Web 应用程序在 Azure Ad B2C 中调用 Web API https learn microsoft com en us azure active directory b2c active dir
  • 获取多个嵌入的 Youtube 视频以按顺序自动播放

    有没有什么简单的方法可以在一个页面上嵌入多个 YouTube 视频 并在页面打开时立即开始播放 并且在第一个视频播放完毕后开始播放第二个视频 我希望这样的事情会起作用
  • 检测滚动结束/结束

    我想检测用户何时停止滚动页面 元素 这可能很棘手 因为最近对 OSX 滚动行为的增强会产生这种新的惯性效应 是否有事件被触发 我能想到的唯一其他解决方案是使用间隔在页面 元素的滚动位置不再更改时进行拾取 例如 var element el
  • 尝试制作一个名为“List”的 CodeIgniter 控制器

    我在controllers list php中有以下代码 但是 尝试访问它会出现以下 PHP 错误 解析错误 语法错误 意外的 T LIST 期望 T STRING var www sitename htdocs system applic
  • Jenkins蓝海更改github访问令牌

    Jenkins蓝海非常酷的持续集成工具 但我遇到了以下问题 在主页上 按照要求 我插入了我的GitHub access token 之后我意识到那是不正确来自另一家公司的令牌 现在我想更改为另一个令牌 但没有选项可以做到这一点 我总是看到以
  • 如何使用MonoTouch为iPhone应用程序使用多语言?

    如何在 iPhone 应用程序中使用多语言 目前我只使用英语 但将来我想使用大约 20 到 30 种语言 如何在iPhone开发中使用MonoTouch使用它 您必须以 language lproj 格式为您使用的每种语言创建一个文件夹 例
  • 用 Python 编写的反向 shell 脚本在 Rust 中的等价物是什么?

    Python 中的反向 shell 脚本通常如下所示 import socket subprocess os s socket socket socket AF INET socket SOCK STREAM s connect 192 1
  • 在同一个包中导入类

    我浏览了一些主题 但没有找到合适的答案 我正在尝试将课程导入其他课程 但我得到了 无法解析导入 classname 错误 这两个类都在同一个包中 什么可能导致问题 我还尝试清理我的项目 如果这两个类位于同一个包中 则不必导入它
  • 如何在 R 中查找 Unicode 字符串中的“真实”字符数

    我知道如何在 R 中找到非 Unicode 字符串的长度 nchar ABC 感谢所有在这里回答问题的人 如何在R中找到字符串的长度 https stackoverflow com questions 11134812 how to fin
  • Objective C - 使用委托传回字符串值

    我想使用委托将 UITextField nameText 从 GreenViewController 传递到 ViewController 中的 UILabel nameValue 我做了委托 调用了ViewController中的onSa
  • Python:时间拉伸波形文件 - 三种方法之间的比较

    我正在对语音数据集进行一些数据增强 并且我想在时域中拉伸 压缩每个音频文件 我找到了以下三种方法来做到这一点 但我不确定哪一种是最好的或更优化的方法 dimension int len signal speed res librosa ef