python - 使用librosa加载文件夹和子文件夹时发生类型转换错误

标签 python numpy audio librosa spectrogram

我在使用librosa进行深度学习的文件夹和子文件夹中包含WAV文件的可视化频谱图时遇到了一些麻烦。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from glob import glob
import librosa as lr
import librosa.display
import IPython.display as ipd

pathAudio = 'Sounds'
files = librosa.util.find_files(pathAudio, ext=['WAV'])
files = np.array(files, dtype=float)
sr = 22050

for y in files:


    ipd.Audio(files, rate=22050)
    scale, sr = lr.load(files)
    filter_banks = lr.filters.mel(n_fft=2048, sr=22050, n_mels=10)
    filter_banks.shape
    plt.figure(figsize=(25, 10))
    librosa.display.specshow(filter_banks,
                             sr=sr,
                             x_axis="linear")
    plt.colorbar(format="%+2.f")
    plt.show()
    mel_spectrogram = lr.feature.melspectrogram(scale, sr=sr, n_fft=2048, hop_length=512, n_mels=10)

    mel_spectrogram.shape

    log_mel_spectrogram = lr.power_to_db(mel_spectrogram)
    log_mel_spectrogram.shape

    plt.figure(figsize=(25, 10))
    librosa.display.specshow(log_mel_spectrogram,
                             x_axis="time",
                             y_axis="mel",
                             sr=sr)
    plt.colorbar(format="%+2.f")
    plt.show()
在这里,我收到一条错误消息:
files = np.array(files,dtype=float)
ValueError: could not convert string to float
我尝试将单个WAV文件的频谱图可视化,但未收到任何错误。
import librosa
import librosa.display
import IPython.display as ipd
import matplotlib.pyplot as plt

scale_file = "audio/scale.wav"

ipd.Audio(scale_file)

# load audio files with librosa
scale, sr = librosa.load(scale_file)

filter_banks = librosa.filters.mel(n_fft=2048, sr=22050, n_mels=10)

filter_banks.shape

plt.figure(figsize=(25, 10))
librosa.display.specshow(filter_banks, 
                         sr=sr, 
                         x_axis="linear")
plt.colorbar(format="%+2.f")
plt.show()

mel_spectrogram = librosa.feature.melspectrogram(scale, sr=sr, n_fft=2048, hop_length=512, n_mels=10)

mel_spectrogram.shape

log_mel_spectrogram = librosa.power_to_db(mel_spectrogram)

log_mel_spectrogram.shape

plt.figure(figsize=(25, 10))
librosa.display.specshow(log_mel_spectrogram, 
                         x_axis="time",
                         y_axis="mel", 
                         sr=sr)
plt.colorbar(format="%+2.f")
plt.show()
但是当我尝试为文件夹和子文件夹中的大量wavefiles制作mel-spectrograms时..我得到了错误!
如果有人能找到解决此问题的方法,那将是巨大的帮助。

最佳答案

首先,更换

files = np.array(files, dtype=float)
[...]
ipd.Audio(files, rate=22050)
scale, sr = lr.load(files)
files = np.asarray(files)
[...]
ipd.Audio(y, rate=22050)
scale, sr = lr.load(y)
之后可能还会发布更多。
其他question也可能有帮助。

关于python - 使用librosa加载文件夹和子文件夹时发生类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64612948/

相关文章:

python - 获取 xpath() 以返回空值

python - 获取 numpy 二维数组中与零相邻的所有元素的索引

python - 在并发.futures.ProcessPoolExecutor map() 和 Submit() 方法中使用 numpy.fromiter 和 numpy.array 的问题

javascript - 将字符串转换为JS对象

python - scipy 稀疏矩阵的对称化

python - 基类和继承类的类型注释 - Generic 和 TypeVar 是正确的方法吗?

python - 你如何使这个 Python 词典线程安全?

python - 在 Hy 中使用 numpy.nditer

flutter - FFmpeg 音频 concat/join 在 flutter 中无法正常工作

android - Xamarin交叉通知自定义声音