标签: librosa

在 conda 虚拟环境中找不到 librosa 的“GLIBCXX_3.4.30”(在尝试了很多解决方案之后)?

我正在尝试import librosa,但我遇到了这个错误:

/home/lakshya/anaconda3/envs/tff_env/lib/python3.9/site-packages/zmq/backend/cython/../../../../.././libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /home/lakshya/anaconda3/envs/tff_env/lib/python3.9/site-packages/scipy/fft/_pocketfft/pypocketfft.cpython-39-x86_64-linux-gnu.so)
Run Code Online (Sandbox Code Playgroud)

根据我浏览过的其他类似问题,我尝试以下方法来修复它:

  1. sudo apt-get install libstdc++6

    它的输出:libstdc++6 已经是最新版本(10.2.1-6)。

  2. sudo apt-get dist-upgrade

    其输出:0 个已升级、0 个新安装、0 个要删除、0 个未升级。

  3. strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

    它的输出:GLIBCXX版本高达GLIBCXX_3.4.28

  4. conda install libgcc在我的虚拟环境“tff_env”中

    它的输出:libgcc-7.2.0安装在tff_env中

  5. Pip 也在虚拟环境中安装了 libgcc 包。没用。

我能做些什么?

我的操作系统:Debian GNU/Linux 11(靶心)

linux anaconda librosa

48
推荐指数
5
解决办法
7万
查看次数

如何消除由 librosa griffin lim 引入的失真?

我正在做:

import librosa


D = librosa.stft(samples, n_fft=nperseg, 
                 hop_length=overlap, win_length=nperseg,
                 window=scipy.signal.windows.hamming)

spect, _ = librosa.magphase(D)

audio_signal = librosa.griffinlim(spect, n_iter=1024, 
                                  win_length=nperseg, hop_length=overlap, 
                                  window=signal.windows.hamming)
print(audio_signal, audio_signal.shape)
sf.write('test.wav', audio_signal, sample_rate)
Run Code Online (Sandbox Code Playgroud)

并且它在重建的音频信号中引入了明显的失真。我能做些什么来改善它?

python librosa soundfile

32
推荐指数
1
解决办法
740
查看次数

Librosa音高跟踪 - STFT

我正在使用算法来检测音频文件的音高 .正如您所听到的,它是在吉他上播放的E2音符,背景中有一点噪音.

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

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

y, sr = librosa.load(filename, sr=40000)
pitches, magnitudes = librosa.core.piptrack(y=y, sr=sr, fmin=75, fmax=1600)

np.set_printoptions(threshold=np.nan)
print pitches[np.nonzero(pitches)]
Run Code Online (Sandbox Code Playgroud)

结果,我fmin和我之间几乎可以获得所有可能的频率fmax.我该如何处理piptrack方法的输出以发现时间范围的基本频率?

UPDATE

不过,我仍然不确定这些2D数组代表什么.假设我想知道第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. 找到pitches[b][t]找到属于该bin的频率?

python signal-processing pitch-tracking librosa

13
推荐指数
2
解决办法
5013
查看次数

如何将 Librosa 光谱图保存为特定大小的图像?

所以我想将频谱图图像提供给卷积神经网络,以尝试对各种声音进行分类。我希望每个图像都是 384x128 像素。但是,当我实际保存图像时,它只有 297x98。这是我的代码:

def save_spectrogram(num):
  dpi = 128
  x_pixels = 384
  y_pixels = 128
  samples, sr = load_wave(num)
  stft = np.absolute(librosa.stft(samples))
  db = librosa.amplitude_to_db(stft, ref=np.max)
  fig = plt.figure(figsize=(x_pixels//dpi, y_pixels//dpi), dpi=dpi, frameon=False)
  ax = fig.add_subplot(111)
  ax.axes.get_xaxis().set_visible(False)
  ax.axes.get_yaxis().set_visible(False)
  ax.set_frame_on(False)
  librosa.display.specshow(db, y_axis='linear')
  plt.savefig(TRAIN_IMG+str(num)+'.jpg', bbox_inches='tight', pad_inches=0, dpi=dpi)
Run Code Online (Sandbox Code Playgroud)

有没有人对我如何解决这个问题有任何指示?我也试过在没有子图的情况下这样做,但是当我这样做时,它仍然保存为错误的大小并且有空白/背景。

python audio matplotlib librosa

13
推荐指数
1
解决办法
9572
查看次数

属性错误:模块“librosa”没有属性“输出”

我在 anaconda 中使用 librosa 0.6 并且我也安装了 ffmpeg 但我仍然收到此错误

代码是

a = np.exp(spectrum) - 1
    p = 2 * np.pi * np.random.random_sample(spectrum.shape) - np.pi
    for i in range(50):
        S = a * np.exp(1j * p)
        x = librosa.istft(S)
        p = np.angle(librosa.stft(x, N_FFT))
    librosa.output.write_wav(outfile, x, sr)

Run Code Online (Sandbox Code Playgroud)

python audio ffmpeg python-3.x librosa

13
推荐指数
2
解决办法
1万
查看次数

在python中计算.wav文件的频谱图

我正在尝试.wav使用Python 从文件中计算出频谱图。为了做到这一点,我遵循此处的说明。我首先.wav使用librosa库读取文件。在链接中找到的代码可以正常工作。该代码是:

sig, rate = librosa.load(file, sr = None)
sig = buf_to_int(sig, n_bytes=2)
spectrogram = sig2spec(rate, sig)
Run Code Online (Sandbox Code Playgroud)

和功能sig2spec:

def sig2spec(signal, sample_rate):

# Read the file.
# sample_rate, signal = scipy.io.wavfile.read(filename)
# signal = signal[0:int(1.5 * sample_rate)]  # Keep the first 3.5 seconds
# plt.plot(signal)
# plt.show()

# Pre-emphasis step: Amplification of the high frequencies (HF)
# (1) balance the frequency spectrum since HF usually have smaller magnitudes compared to LF
# (2) avoid numerical …
Run Code Online (Sandbox Code Playgroud)

python audio numpy spectrogram librosa

10
推荐指数
1
解决办法
1579
查看次数

根据音色(音调)按相似度对声音进行排序

解释

我希望能够根据声音的音色(音调)对列表中的声音集合进行排序。这是一个玩具示例,其中我手动对我创建并上传到此存储库的 12 个声音文件的声谱图进行了排序。我知道这些已正确排序,因为每个文件生成的声音与之前文件中的声音完全相同,但添加了一个效果或过滤器。

例如,声音的正确排序xy以及z

  • 声音x和y是相同的,但y有失真效果
  • 声音 y 和 z 是相同的,但 z 过滤掉高频
  • 声音x和z是一样的,但是z有失真效果,z过滤掉高频

将会x, y, z

只需查看声谱图,我就可以看到一些视觉指示符,暗示应如何对声音进行排序,但我希望通过让计算机识别这些指示符来自动化排序过程。


上图中声音的声音文件

  • 长度都相同
  • 所有相同的音符/音调
  • 一切都在同一时间开始。
  • 所有相同的幅度(响度级别)

即使所有这些条件都不成立,我希望我的排序能够工作但即使它不能解决这个问题,我也会接受最佳答案)

例如,在下图中

  • 与第一幅图像中的 MFCC_8 相比,MFCC_8 的开头发生了偏移
  • MFCC_9 与第一张图像中的 MFCC_9 相同,但有重复(因此长度是其两倍)

如果第一张图片中的 MFCC_8 和 MFCC_9 替换为下图中的 MFCC_8 和 MFCC_9,我希望声音的排序保持完全相同。

对于我的真实程序,我打算通过像这样的声音更改来分解 mp3 文件


到目前为止我的计划

这是生成本文中第一张图像的程序。我需要将函数中的代码sort_sound_files替换为一些实际上根据音色对声音文件进行排序的代码。需要完成的部分位于该存储库的底部附近和声音文件我的jupyter 笔记本中也有这段代码,其中还包括第二个示例,该示例更类似于我实际希望该程序执行的操作

import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
import math …
Run Code Online (Sandbox Code Playgroud)

python audio signal-processing librosa numpy-ndarray

10
推荐指数
3
解决办法
2848
查看次数

绘制歌曲中每个独特声音循环的时间范围,使用 python Librosa 按声音相似度对行进行排序

背景

这是来自电子歌曲的歌曲剪辑视频。在视频的开头,歌曲全速播放。当您放慢歌曲速度时,您可以听到歌曲使用的所有独特声音。其中一些声音重复。

问题描述

我想要做的是创建一个像下面这样的视觉效果,其中为每个独特的声音创建一个水平轨道/行,该轨道上有一个彩色块,对应于声音播放的歌曲中的每个时间帧。音轨/行应按声音与每个音轨的相似程度排序,越相似的声音越靠近。如果声音完全相同,以至于人类无法区分它们,那么它们应该被视为相同的声音。

  • 如果它通常可以满足我的要求,我会接受一个不完美的解决方案

在此处输入图片说明

  • 观看上面链接的视频,了解我所说的内容。它包括一个我手动创建的视觉网格,它几乎与我试图生成的网格相匹配。

例如,如果下面的 5 个波中的每一个都代表声音产生的声波,则这些声音中的每一个都将被视为相似,并且将在网格上垂直放置在一起。

在此处输入图片说明


尝试

我一直在看一个例子拉普拉斯分割librosa。标记为结构组件的图形看起来可能正是我所需要的。从阅读论文来看,他们似乎试图将歌曲分解为合唱、诗歌、桥段等片段……但我实际上是在尝试将歌曲分解为 1 或 2 个节拍片段。


这是拉普拉斯分割的代码(如果您愿意,也可以使用Jupyter Notebook)。

# -*- coding: utf-8 -*-
"""
======================
Laplacian segmentation
======================

This notebook implements the laplacian segmentation method of
`McFee and Ellis, 2014 <http://bmcfee.github.io/papers/ismir2014_spectral.pdf>`_,
with a couple of minor stability improvements.

Throughout the example, we will refer to equations in the paper by number, so it will be
helpful …
Run Code Online (Sandbox Code Playgroud)

python audio eigenvector librosa laplacian

10
推荐指数
1
解决办法
415
查看次数

如何解决pytorch RuntimeError: Numpy is not available without Upgrade numpy to the最新版本,因为其他依赖项

我正在使用 Pytorch 在 Python 3.9.2(64 位)上的 Raspberry Pi 4 上运行一个简单的 CNN,进行一些音频分类。对于所需的音频操作,我使用 librosa。librosa 依赖于 numba 包,该包仅与 numpy 版本 <= 1.20 兼容。

运行我的代码时,该行

spect_tensor = torch.from_numpy(spect).double()
Run Code Online (Sandbox Code Playgroud)

抛出运行时错误:

RuntimeError: Numpy is not available
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索解决方案时,我发现将 Numpy 升级到最新版本以解决该特定错误,但抛出另一个错误,因为 Numba 仅适用于 Numpy <= 1.20。

是否有解决此问题的方法,其中不包括寻找使用 librosa 的替代方案?

python numpy librosa pytorch

10
推荐指数
2
解决办法
3万
查看次数

录制的一个音符的音频会产生多个开始时间

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

这是我的代码:

def detect_pitch(y, sr, onset_offset=5, fmin=75, fmax=1400):
  y = highpass_filter(y, sr)

  onset_frames = librosa.onset.onset_detect(y=y, sr=sr)
  pitches, magnitudes = librosa.piptrack(y=y, sr=sr, fmin=fmin, fmax=fmax)

  notes = []

  for i in range(0, len(onset_frames)):
    onset = onset_frames[i] + onset_offset
    index = magnitudes[:, onset].argmax()
    pitch = pitches[index, onset]
    if (pitch != 0):
      notes.append(librosa.hz_to_note(pitch))

  return notes

def highpass_filter(y, sr):
  filter_stop_freq = 70  # Hz
  filter_pass_freq = 100  # Hz
  filter_order = 1001

  # High-pass filter
  nyquist_rate = sr / …
Run Code Online (Sandbox Code Playgroud)

python signal-processing pitch-tracking librosa onset-detection

8
推荐指数
1
解决办法
737
查看次数