我正在尝试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)
根据我浏览过的其他类似问题,我尝试以下方法来修复它:
sudo apt-get install libstdc++6
它的输出:libstdc++6 已经是最新版本(10.2.1-6)。
sudo apt-get dist-upgrade
其输出:0 个已升级、0 个新安装、0 个要删除、0 个未升级。
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
它的输出:GLIBCXX版本高达GLIBCXX_3.4.28
conda install libgcc在我的虚拟环境“tff_env”中
它的输出:libgcc-7.2.0安装在tff_env中
Pip 也在虚拟环境中安装了 libgcc 包。没用。
我能做些什么?
我的操作系统:Debian GNU/Linux 11(靶心)
我正在做:
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)
并且它在重建的音频信号中引入了明显的失真。我能做些什么来改善它?
我正在使用此算法来检测此音频文件的音高 .正如您所听到的,它是在吉他上播放的E2音符,背景中有一点噪音.
我正在使用上面链接的算法,如下所示:
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找到最大频率,我必须:
magnitudes[][t]数组,找到具有最大幅度的bin.f.pitches[b][t]找到属于该bin的频率?所以我想将频谱图图像提供给卷积神经网络,以尝试对各种声音进行分类。我希望每个图像都是 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)
有没有人对我如何解决这个问题有任何指示?我也试过在没有子图的情况下这样做,但是当我这样做时,它仍然保存为错误的大小并且有空白/背景。
我在 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) 我正在尝试.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) 我希望能够根据声音的音色(音调)对列表中的声音集合进行排序。这是一个玩具示例,其中我手动对我创建并上传到此存储库的 12 个声音文件的声谱图进行了排序。我知道这些已正确排序,因为每个文件生成的声音与之前文件中的声音完全相同,但添加了一个效果或过滤器。
例如,声音的正确排序x,y以及z
将会x, y, z

只需查看声谱图,我就可以看到一些视觉指示符,暗示应如何对声音进行排序,但我希望通过让计算机识别这些指示符来自动化排序过程。
上图中声音的声音文件
即使所有这些条件都不成立,我希望我的排序能够工作(但即使它不能解决这个问题,我也会接受最佳答案)
例如,在下图中
如果第一张图片中的 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) 背景
这是来自电子歌曲的歌曲剪辑视频。在视频的开头,歌曲全速播放。当您放慢歌曲速度时,您可以听到歌曲使用的所有独特声音。其中一些声音重复。
问题描述
我想要做的是创建一个像下面这样的视觉效果,其中为每个独特的声音创建一个水平轨道/行,该轨道上有一个彩色块,对应于声音播放的歌曲中的每个时间帧。音轨/行应按声音与每个音轨的相似程度排序,越相似的声音越靠近。如果声音完全相同,以至于人类无法区分它们,那么它们应该被视为相同的声音。
例如,如果下面的 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)我正在使用 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 的替代方案?
我使用Librosa库进行音高和起始检测.具体来说,我正在使用onset_detect和piptrack.
这是我的代码:
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
librosa ×10
python ×9
audio ×5
numpy ×2
anaconda ×1
eigenvector ×1
ffmpeg ×1
laplacian ×1
linux ×1
matplotlib ×1
python-3.x ×1
pytorch ×1
soundfile ×1
spectrogram ×1