问题标签 [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.
python - 如何从采样率为 8000Hz 的音频中提取 CQT(librosa)
如何从采样率为 8000 Hz (librosa) 的音频中提取 CQT
我写了以下代码。
但是出现了错误。
我想从采样率为 8000 Hz 的音频中提取 CQT 特征。
python - Librosa 音高跟踪 - STFT
我正在使用这个算法来检测 这个音频文件的音高。正如你所听到的,这是用吉他演奏的 E2 音符,背景中有一点噪音。
我正在使用上面链接的算法,如下所示:
结果,我几乎得到了我fmin
和之间所有可能的频率fmax
。我与该piptrack
方法的输出有什么关系来发现时间框架的基频?
更新
不过,我仍然不确定那些二维数组代表什么。假设我想知道第 5 帧中 82Hz 的强度有多大。我可以使用 STFT 函数来做到这一点,该函数只返回一个 2D 矩阵(用于绘制频谱图)。
但是,piptrack
做了一些其他可能有用的事情,我真的不明白是什么。pitches[f, t] contains instantaneous frequency at bin f, time t
. 这是否意味着,如果我想在时间帧 t 找到最大频率,我必须:
- 转到
magnitudes[][t]
数组,找到最大量级的 bin。 - 将 bin 分配给一个变量
f
。 - Find
pitches[b][t]
找到属于该 bin 的频率?
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 的随机值:
这是整个信号的频谱图:
如您所见,切片已正确完成。但是有几个问题。首先,频谱图中存在八度音阶问题。我期待一些问题。然而,我从上面提到的 3 种方法得到的结果非常奇怪。
这是我的信号处理理解或我的代码的问题吗?
python - 一个音符的录制音频会产生多个起始时间
我正在使用Librosa库进行音高和起始检测。具体来说,我正在使用onset_detect
and piptrack
。
这是我的代码:
在录音棚中录制的吉他音频样本上运行此程序时,因此样本没有噪音(像这样),我在这两个功能中都得到了非常好的结果。开始时间是正确的,频率几乎总是正确的(有时会出现一些八度音阶错误)。
然而,当我尝试用我便宜的麦克风录制自己的吉他声音时,出现了一个大问题。我得到带有噪音的音频文件,例如this。该onset_detect
算法感到困惑,并认为噪声包含起始时间。因此,我得到了非常糟糕的结果。即使我的音频文件由一个音符组成,我也会有很多次发作。
这是两个波形。第一个是在录音室录制的 B3 音符的吉他样本,而第二个是我录制的 E2 音符。
第一个的结果是正确的 B3(检测到一个起始时间)。第二个的结果是一个包含7 个元素的数组,这意味着检测到 7 个起始时间,而不是 1 个!其中一个元素是正确的开始时间,其他元素只是噪声部分的随机峰值。
另一个例子是这个包含音符 B3、C4、D4、E4 的音频文件:
如您所见,噪声很清晰,我的高通滤波器没有帮助(这是应用滤波器后的波形)。
我认为这是一个噪音问题,因为这些文件之间的区别就在那里。如果是,我能做些什么来减少它?我尝试过使用高通滤波器,但没有任何变化。
python - `matplotlib` 如何将绘图调整为图形大小?
如何matplotlib
确保数据集可以在指定大小的图中。
我如何从存储为 numpy 的图中读取像素的颜色,说明数据点 (0,4) - 在图中。
例子:
第一个情节是:
第二个情节是:
所以第一个已调整大小以绘制大小 12,4,其中最后一个基本上绘制相同的数据,但只是使用数据形状作为大小......我该如何改变它?
Librosa 只是根据GitHub 源码执行 pcolormesh
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 的最小工作示例 - (真实数据):
python-3.x - 单声道中的 librosa write_wav?
我想重新采样以 40.000 Hz 到 44100 Hz 录制的单声道录音。
下面的代码有效,但 librosa 似乎以立体声保存,使文件大小增加了一倍,这是不需要的,我有很多样本要处理。
所以我需要将结果保存为单声道。
代码:
问题:我想以单声道保存重新采样的文件,我得到立体声并且没有选项只能保存单声道...