import librosa
import librosa.display
import IPython.display as ipd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
%matplotlib inline
通过一个通配符*
遍历一个文件夹里的所有音频文件
import os
import glob
parent_dir = '../data/UrbanSound8K/audio/'
sub_dir = 'samples/'
file_name = '*.wav'
files = glob.glob(os.path.join(parent_dir, sub_dir, file_name))
for file in files:
print(file)
音频文件可以用librosa.lood()
读取,返回采样与采样率
x, sr = librosa.load(files[4])
plt.figure(figsize=(20,5))
librosa.display.waveplot(x, sr=sr)
plt.show()
在Jupyter lab中播放,有两种方法,可以直接读取文件,也可以从上面读取后的x
直接播放
sr
print('street_music:\n')
ipd.Audio(files[4])
ipd.Audio(x, rate=sr)
保存音频
# librosa.output.write_wav('./test_save.wav', x, sr)
上面通过遍历文件夹中的文件名,得到了一个存有音频文件路径的files
矩阵。之后我们可以使用for
循环遍历文件。
files[4]
使用split
提取文件名中的一部分信息
files[4].split('\\')
for file in files:
x, sr=librosa.load(file)
plt.figure(figsize=(20,5))
librosa.display.waveplot(x,sr=sr)
plt.title('Class ID: '+file.split('\\')[1].split('-')[1]+' Path: '+file)
plt.show()
回到开始的这段音频,先读取他的时域数据
print('street_music:\n')
x, sr = librosa.load(files[4])
plt.figure(figsize=(20,5))
librosa.display.waveplot(x, sr=sr)
plt.show()
ipd.Audio(files[4])
import numpy as np
S = np.abs(librosa.stft(x))
Xdb = librosa.power_to_db(S**2, ref=np.max)
# Xdb = librosa.amplitude_to_db(S, ref=np.max)
plt.figure(figsize=(20,5))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
plt.colorbar(format='%+2.0f dB')
plt.title('Log Power Spectrum')
plt.show()
# S = np.abs(librosa.stft(x))
mel = librosa.feature.melspectrogram(y=x, sr=sr)
meldb = librosa.power_to_db(mel,ref=np.max)
print('melspectrogram.shape: '+str(mel.shape))
plt.figure(figsize=(20,5))
librosa.display.specshow(meldb, x_axis='time', y_axis='mel')
plt.colorbar()
plt.title('Mel Spectrogram')
plt.show()
Xdb.shape
mfccs = librosa.feature.mfcc(y=x, sr=sr, n_mfcc=40)
print('mfccs.shape: '+str(mfccs.shape))
plt.figure(figsize=(20,5))
librosa.display.specshow(mfccs, x_axis='time', cmap='inferno')
plt.colorbar()
plt.title('MFCC')
plt.show()
import sklearn
norm_mfccs = sklearn.preprocessing.scale(mfccs, axis=1)
plt.figure(figsize=(20,5))
librosa.display.specshow(norm_mfccs, x_axis='time', cmap='inferno')
plt.colorbar()
plt.title('Normalized MFCC')
plt.show()
S = np.abs(librosa.stft(x))
chroma = librosa.feature.chroma_stft(S=S, sr=sr)
print('chroma.shape: '+str(chroma.shape))
plt.figure(figsize=(20,5))
librosa.display.specshow(chroma, x_axis='time', y_axis='chroma')
plt.colorbar()
plt.title('Chromagram')
plt.show()