问题标签 [librosa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3457 浏览

python - 在 matplotlib 中绘制来自 librosa 的音频

我正在尝试在 Python 中绘制音频文件的波形。

这是我的代码(我正在使用 Librosa 库):

plot.py 文件在哪里:

奇怪的是,即使我得到一个看起来像有效波形的图: 波形

音频文件只有 5 秒长。因此,我不明白 x 轴在说什么;好像涨到了90000?

谢谢

0 投票
1 回答
1004 浏览

python - 如何从采样率为 8000Hz 的音频中提取 CQT(librosa)

如何从采样率为 8000 Hz (librosa) 的音频中提取 CQT

我写了以下代码。

但是出现了错误。

我想从采样率为 8000 Hz 的音频中提取 CQT 特征。

0 投票
2 回答
11934 浏览

python - Librosa 音高跟踪 - STFT

我正在使用这个算法来检测 这个音频文件的音高。正如你所听到的,这是用吉他演奏的 E2 音符,背景中有一点噪音。

我使用 STFT 生成了这个频谱图:频谱图

我正在使用上面链接的算法,如下所示:

结果,我几乎得到了我fmin和之间所有可能的频率fmax。我与该piptrack方法的输出有什么关系来发现时间框架的基频?

更新

不过,我仍然不确定那些二维数组代表什么。假设我想知道第 5 帧中 82Hz 的强度有多大。我可以使用 STFT 函数来做到这一点,该函数只返回一个 2D 矩阵(用于绘制频谱图)。

但是,piptrack做了一些其他可能有用的事情,我真的不明白是什么。pitches[f, t] contains instantaneous frequency at bin f, time t. 这是否意味着,如果我想在时间帧 t 找到最大频率,我必须:

  1. 转到magnitudes[][t]数组,找到最大量级的 bin。
  2. 将 bin 分配给一个变量f
  3. Findpitches[b][t]找到属于该 bin 的频率?
0 投票
1 回答
1937 浏览

python - 切片音频信号以检测音高

我正在使用Librosa转录单声道吉他音频信号。

我认为,根据开始时间“分割”信号,以在正确的时间检测音符变化,这将是一个好的开始。

Librosa 提供了一个功能,可以在开始时间之前检测局部最小值。我检查了这些时间,它们是正确的。

这是原始信号的波形和最小值的时间。

波形

演奏的旋律是 E4, F4, F#4 ..., B4。

因此,理想的结果应该是:330Hz、350Hz、...、493Hz(大约)。

如您所见,minima数组中的时间表示音符播放前的时间。

然而,在一个切片信号上(10-12 秒,每个切片只有一个音符),我的频率检测方法的结果非常糟糕。我很困惑,因为我在我的代码中看不到任何错误:

其中freq_from函数直接取自这里

我认为这只是方法的精度差,但我得到了一些疯狂的结果。具体来说,freq_from_hps返回:

这些值应该是 8 个相应切片的 8 个音高(以赫兹为单位!)。

freq_from_fft返回相似的值,同时freq_from_autocorr返回一些更“正常”的值,但也返回一些接近 10000Hz 的随机值:

这是整个信号的频谱图:

全谱图

例如,这是切片 1 的频谱图(E4 音符): 频谱图4

如您所见,切片已正确完成。但是有几个问题。首先,频谱图中存在八度音阶问题。我期待一些问题。然而,我从上面提到的 3 种方法得到的结果非常奇怪。

这是我的信号处理理解或我的代码的问题吗?

0 投票
1 回答
1200 浏览

python - 为什么图像存储和显示不同?

我在将我显示为 numpy ndarays 的图像保存时遇到了一些问题。

例子:

这段代码:

将显示如下图像:

在此处输入图像描述

但是当我将图像存储到一个 numpy ndarray 中,然后尝试绘制它时,我得到了这样的东西..

给我看一张图片:

在此处输入图像描述

发生了什么事?.. 为什么我不能存储相同的图像,并以相同的方式查看它?

最小的工作示例:

第一个情节是:

在此处输入图像描述

第二个情节是:

在此处输入图像描述

规范化数据集并不能修复第二张图像。

0 投票
2 回答
1428 浏览

python - 一个音符的录制音频会产生多个起始时间

我正在使用Librosa库进行音高和起始检测。具体来说,我正在使用onset_detectand piptrack

这是我的代码:

在录音棚中录制的吉他音频样本上运行此程序时,因此样本没有噪音(像这样),我在这两个功能中都得到了非常好的结果。开始时间是正确的,频率几乎总是正确的(有时会出现一些八度音阶错误)。

然而,当我尝试用我便宜的麦克风录制自己的吉他声音时,出现了一个大问题。我得到带有噪音的音频文件,例如this。该onset_detect算法感到困惑,并认为噪声包含起始时间。因此,我得到了非常糟糕的结果。即使我的音频文件由一个音符组成,我也会有很多次发作。

这是两个波形。第一个是在录音室录制的 B3 音符的吉他样本,而第二个是我录制的 E2 音符。

工作室 记录

第一个的结果是正确的 B3(检测到一个起始时间)。第二个的结果是一个包含7 个元素的数组,这意味着检测到 7 个起始时间,而不是 1 个!其中一个元素是正确的开始时间,其他元素只是噪声部分的随机峰值。

另一个例子是这个包含音符 B3、C4、D4、E4 的音频文件:

b3-e4

如您所见,噪声很清晰,我的高通滤波器没有帮助(这是应用滤波器后的波形)。

我认为这是一个噪音问题,因为这些文件之间的区别就在那里。如果是,我能做些什么来减少它?我尝试过使用高通滤波器,但没有任何变化。

0 投票
1 回答
2081 浏览

python - `matplotlib` 如何将绘图调整为图形大小?

如何matplotlib确保数据集可以在指定大小的图中。

我如何从存储为 numpy 的图中读取像素的颜色,说明数据点 (0,4) - 在图中。

例子:

第一个情节是:

在此处输入图像描述

第二个情节是:

在此处输入图像描述

所以第一个已调整大小以绘制大小 12,4,其中最后一个基本上绘制相同的数据,但只是使用数据形状作为大小......我该如何改变它?

Librosa 只是根据GitHub 源码执行 pcolormesh

0 投票
1 回答
739 浏览

python - 我可以信任哪个工具?

我似乎不得不确定我可以信任的工具......

我一直在测试的工具是 Librosa 和 Kaldi,用于创建数据集,用于绘制音频文件的 40 个滤波器组能量的可视化。

在 kaldi 中使用这些配置提取滤波器组能量。

fbank.conf

librosa使用plot绘制提取的数据。Librosa使用matplotlib pcolormesh,这意味着除了librosa提供更易于使用的 API 之外,应该没有任何区别。

输出:

在此处输入图像描述

在 Librosa 中创建的类似图如下:

输出这个:

在此处输入图像描述

尽管颜色不同,两者都显示出相似的图,但能量范围似乎有点不同。

Kaldi 的最小值/最大值为 -1.828067/22.70058

Librosa 的最小值/最大值为 -84.6796661558/-4.67966615584

问题是我试图将这些图存储为 numpy 数组,以便进一步处理。

这似乎创建了一个不同的图。使用 Librosa 数据,我将图创建为:

在此处输入图像描述

这是完美的......它类似于原始数据集......

但是对于 Kaldi,我从这段代码中得到了这个情节:

在此处输入图像描述

我从之前的帖子中发现,出现红色的原因可能是由于范围,并且之前的标准化会有所帮助 - 但这导致了这个:

在此处输入图像描述

但这绝不会与 Kaldi 情节中的原始情节有关……那么为什么会这样呢?.. 为什么我可以用从 Librosa 提取的能量而不是从 Kaldi 提取的能量来绘制它?

Librosa 的最小工作示例:

kaldi 的最小工作示例 - (真实数据):

0 投票
1 回答
867 浏览

python - 使用 Librosa 进行动态时间规整的最小距离

当使用 Librosa 库计算两个时间序列之间的动态时间扭曲矩阵时,如何获得两个信号之间的最小距离?在Matlab中,第一个返回的参数是这个距离。在Librosa中,返回值是累积成本矩阵,并带有注释“D[N,M] 是总对齐成本”。

这是否意味着D矩阵的右下条目是两个时间序列之间的最小距离,就像Matlab中的返回值一样?如果不是,我如何获得与返回矩阵的距离?

0 投票
1 回答
4842 浏览

python-3.x - 单声道中的 librosa write_wav?

我想重新采样以 40.000 Hz 到 44100 Hz 录制的单声道录音。

下面的代码有效,但 librosa 似乎以立体声保存,使文件大小增加了一倍,这是不需要的,我有很多样本要处理。

所以我需要将结果保存为单声道。

代码:

问题:我想以单声道保存重新采样的文件,我得到立体声并且没有选项只能保存单声道...