python 语音学习 librosa语音特征Feature extraction

文档

在这里插入图片描述
这东西真好,提取特征是件挺麻烦的事情,预加重、分帧、加窗 … 不得不感叹py是真舒服。
相比python_speech_features的文档,librosa似乎更舒适

代码 “你好”的频谱

import matplotlib.pyplot as plt
import librosa.display
from python_speech_features import *
import numpy as np
import utils


x , sr = librosa.load("output.wav")
print(f'x.shape = {x.shape}')
print(f'sr = {sr}')
x=utils.trim_long_silences(x)


# -----------------------波形图------------------------------
librosa.display.waveplot(x)
plt.show()
# -----------------------短时傅里叶------------------------------
plt.title('librosa.stft')
# n_fft 为 FFT窗口大小 值越大,信号越清晰
stft = librosa.stft(x, n_fft=9216)
print("短时傅里叶")
print(stft.shape)
librosa.display.specshow(stft, x_axis='time', y_axis='hz')
plt.show()

# ------------------------梅尔-----------------------------
plt.title('librosa.feature.mfcc')
mfcc = librosa.feature.mfcc(x, n_fft=9216, n_mfcc = 20)
print("梅尔")
print(mfcc.shape)
librosa.display.specshow(mfcc, x_axis='time', y_axis='hz')
plt.show()
# ------------------------梅尔对数----------------------------
plt.title('librosa.feature.melspectrogram')
# hop_length 连续帧之间的样本数
melspec = librosa.feature.melspectrogram(x, 16000, n_fft=9216, hop_length=512)
logmelspec = librosa.power_to_db(melspec)
print("梅尔对数")
print(logmelspec.shape)
librosa.display.specshow(logmelspec, x_axis='time', y_axis='hz')
plt.show()
# ------------------------log Mel 能量----------------------------
plt.title('librosa.display.specshow')
logf=logfbank(x)
print("log Mel 能量")
print(logf.shape)
librosa.display.specshow(logf, x_axis='time', y_axis='hz')
plt.show()

# ------------------------光谱对比----------------------------
plt.title('librosa.feature.spectral_contrast')
stft = np.abs(librosa.stft(x,n_fft=9216))
contrast=librosa.feature.spectral_contrast(S=stft, sr=16000)
print("光谱对比")
print(contrast.shape)
librosa.display.specshow(contrast, x_axis='time', y_axis='hz')
plt.show()

# ------------------根据波形或功率谱图计算色谱图-------------------
plt.title('librosa.feature.chroma_stft')
chroma_stft=librosa.feature.chroma_stft(x,sr=16000)
print("色谱图")
print(chroma_stft.shape)
librosa.display.specshow(chroma_stft, x_axis='time', y_axis='hz')
plt.show()
# ------------------恒定Q色谱图-------------------
plt.title('librosa.feature.chroma_cqt')
chroma_cqt=librosa.feature.chroma_cqt(x,sr=16000)
librosa.display.specshow(chroma_cqt, x_axis='time', y_axis='hz')
print("恒定Q色谱图")
print(chroma_cqt.shape)
plt.show()
# ------------------色度能量归一化-------------------
plt.title('librosa.feature.chroma_cens')
chroma_cens=librosa.feature.chroma_cens(x,sr=16000)
librosa.display.specshow(chroma_cqt, x_axis='time', y_axis='hz')
print("色度能量归一化")
print(chroma_cens.shape)
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页