当前位置:   article > 正文

python 语音学习 librosa语音特征Feature extraction_librosa.feature在 '__init__.pyi' 中找不到引用 'feature

librosa.feature在 '__init__.pyi' 中找不到引用 'feature

文档

在这里插入图片描述
这东西真好,提取特征是件挺麻烦的事情,预加重、分帧、加窗 … 不得不感叹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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

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

import numpy as np
import librosa
import struct
import webrtcvad



from scipy.ndimage.morphology import binary_dilation

# ** a的b次方  32767
int16_max = (2 ** 15) - 1
audio_norm_target_dBFS=-30
partials_n_frames=160
sampling_rate=16000
mel_window_step = 10    # In milliseconds
mel_window_length = 25  # In milliseconds
mel_n_channels = 40

def trim_long_silences(wav,vad_window_length=30,sampling_rate=16000):

    # 计算语音检测窗口大小  //为整除 30秒X16000=总帧长
    samples_per_window = (vad_window_length * sampling_rate) // 1000

    # 修剪音频的结尾,使其具有窗口大小的倍数。使wav的长度能被 samples_per_window整除
    wav = wav[:len(wav) - (len(wav) % samples_per_window)]

    # 浮点数波形转换为16位单声道PCM  *:接收到的参数会形成一个元组,**:接收到的参数会形成一个字典。如下代码。
    # webrtcvad 的 is_speech 接收的是buf 所以这里需要转换
    pcm_wave = struct.pack("%dh" % len(wav), *(np.round(wav * int16_max)).astype(np.int16))

    # 执行语音激活检测
    voice_flags = []
    #  这里共有三种帧长可以用到,分别是80/10ms,160/20ms,240/30ms。其它采样率
    # 的48k,32k,24k,16k会重采样到8k来计算VAD。之所以选择上述三种帧长度,是因为语
    # 音信号是短时平稳信号,其在10ms~30ms之间可看成平稳信号,高斯马尔科夫等比较
    # 的信号处理方法基于的前提是信号是平稳的,在10ms~30ms,平稳信号处理方法是可
    # 以使用的。
    #   从vad的代码中可以看出,实际上,系统只处理默认10ms,20ms,30ms长度的数据,
    # 其它长度的数据没有支持,笔者修改过可以支持其它在10ms-30ms之间长度的帧长度
    # 发现也是可以的。
    #   vad检测共四种模式,用数字0~3来区分,激进程度与数值大小正相关。
    # 0: Normal,1:low Bitrate, 2:Aggressive;3:Very Aggressive 可以根据实际的使用
    vad = webrtcvad.Vad(mode=3)
    for window_start in range(0, len(wav), samples_per_window):
        window_end = window_start + samples_per_window
        # append 进来的都是Boolean  这里以samples_per_windowx2 的长度去检测是否为人声
        voice_flags.append(vad.is_speech(pcm_wave[window_start * 2:window_end * 2],
                                         sample_rate=sampling_rate))
    voice_flags = np.array(voice_flags)
    # 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/288656
推荐阅读
相关标签