librosa.display.waveplot(np.array(f),sr=22050)-----AttributeError: 'module' object has no attribute

May 2024 ยท 2 minute read

Referring to this link: https://aqibsaeed.github.io/2016-09-03-urban-sound-classification-part-1/, I am trying to make the same waveplot figure, however,i run the code through .py, there is the error:

(tensorflow) yyydeMacBook-Pro:~ yyy$ python /Users/yyy/Desktop/1.py Traceback (most recent call last): File "/Users/yyy/Desktop/1.py", line 82, in <module> plot_waves(sound_names,raw_sounds) File "/Users/yyy/Desktop/1.py", line 42, in plot_waves librosa.display.waveplot(np.array(f),sr=22050) AttributeError: 'module' object has no attribute 'display' 
2

6 Answers

From this github issue I read that it is now necessary to import librosa.display.

[Update 2022] Apparently now also waveplot needs to be changed to waveshow, like below: (thanks to Hammad Hassan in comments!)

import librosa.display plt.figure(figsize=(12, 4)) librosa.display.waveshow(data, sr=sampling_rate) 
2

If you are running librosa 0.9.0 you will run into following Error using waveplot:

AttributeError: module 'librosa.display' has no attribute 'waveplot' 

instead: import librosa.display and use waveshow

path = "sample.wav" data, sampling_rate = librosa.load(path) librosa.display.waveshow(data, sr=sampling_rate) 

just import the display

import librosa.display plt.figure(figsize=(12, 4)) librosa.display.waveplot(data, sr=sampling_rate) 

output

Because of the changes in version 0.6.0 of librosa you are getting those errors. I have fixed all the issues in http://aqibsaeed.github.io/2016-09-03-urban-sound-classification-part-1/ and made it work on Python 3, librosa=0.6.0

import glob import os import librosa import librosa.display import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from matplotlib.pyplot import specgram %matplotlib inline def load_sound_files(file_paths): raw_sounds = [] for fp in file_paths: X,sr = librosa.load(fp) raw_sounds.append(X) return raw_sounds def plot_waves(sound_names,raw_sounds): i = 1 #fig = plt.figure(figsize=(25,60), dpi = 900) fig = plt.figure(figsize=(25,60)) for n,f in zip(sound_names,raw_sounds): plt.subplot(10,1,i) librosa.display.waveplot(np.array(f),sr=22050) plt.title(n.title()) i += 1 plt.suptitle("Figure 1: Waveplot",x=0.5, y=0.915,fontsize=18) plt.show() def plot_specgram(sound_names,raw_sounds): i = 1 #fig = plt.figure(figsize=(25,60), dpi = 900) fig = plt.figure(figsize=(25,60)) for n,f in zip(sound_names,raw_sounds): plt.subplot(10,1,i) specgram(np.array(f), Fs=22050) plt.title(n.title()) i += 1 plt.suptitle("Figure 2: Spectrogram",x=0.5, y=0.915,fontsize=18) plt.show() def plot_log_power_specgram(sound_names,raw_sounds): i = 1 #fig = plt.figure(figsize=(25,60), dpi = 900) fig = plt.figure(figsize=(25,60)) for n,f in zip(sound_names,raw_sounds): plt.subplot(10,1,i) #D = librosa.logamplitude(np.abs(librosa.stft(f))**2, ref_power=np.max) D = librosa.core.amplitude_to_db(np.abs(librosa.stft(f))**2, ref=np.max) librosa.display.specshow(D,x_axis='time' ,y_axis='log') plt.title(n.title()) i += 1 plt.suptitle("Figure 3: Log power spectrogram",x=0.5, y=0.915,fontsize=18) plt.show() sound_file_paths = ["57320-0-0-7.wav","24074-1-0-3.wav","15564-2-0-1.wav","31323-3-0-1.wav", "46669-4-0-35.wav","89948-5-0-0.wav","40722-8-0-4.wav", "103074-7-3-2.wav","106905-8-0-0.wav","108041-9-0-4.wav"] sound_names = ["air conditioner","car horn","children playing", "dog bark","drilling","engine idling", "gun shot", "jackhammer","siren","street music"] raw_sounds = load_sound_files(sound_file_paths) plot_waves(sound_names,raw_sounds) plot_specgram(sound_names,raw_sounds) plot_log_power_specgram(sound_names,raw_sounds) 
import os import numpy as np %pylab inline import glob import librosa.display import matplotlib.pyplot as plt import tensorflow as tf plt.figure(figsize=(12,4)) librosa.display.waveplot(data,sr=sampling_rate) 
1

Old version of librosa has removed waveplot. Use waveshow to get same result.

import librosa import matplotlib.pyplot as plt signal, sr = librosa.load('filename.wav') plt.figure(figsize=(14, 5)) librosa.display.waveshow(signal, sr=sr) plt.show() 

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJoa2xtY2h9c3%2BOpaCbqp%2Borm6wyKynpZmpYsSiwsSpo6isnqV6or7RmrCfZaOnenN%2Bj25nZpmkqb%2BqrtStnJ6qoqS%2FbrnOnaylnV2kr6ux