librosa库 【NLP】音频特征工程(1)( 三 )


读取时长
计算时间序列的持续时间(以秒为单位)
librosa.get_duration(y=None, sr=22050, S=None, n_fft=2048, hop_length=512, center=True, filename=None)参数:y,音频时间序列sr,y的音频采样率S,STFT矩阵或者任何STFT衍生矩阵(色谱图或者梅尔图)n_fft,S的FFT窗口大小hop_length,S列之间的音频样本数center,bool,True表示中心,False表示从起点filename,从音频文件中计算持续时间返回:d,持续时间(以秒为单位)
读取采样率
librosa.get_samplerate(path)
音频写入
librosa.output.write_wav(path, y, sr, norm=False)
时间序列输出为wav文件
波形图
绘制波形的幅度包络线
libsora.display.waveplot(y, sr=22050, x_axis='time', offset=0.0, ax=None)参数:y,音频时间序列sr,y的采样率x_axis,str{'time', 'off', 'none'}或Noneoffset,水平偏移(以秒为单位)开始波形图
短时傅里叶逆变换(ISTFT)
短时傅里叶逆变换(ISTFT),将复数值D(f, t)频谱矩阵转为时间序列y,窗函数、帧移等参数与STFT相同
librosa.istft(stft_matrix, hop_length=None, win_length=None, window='hann', center=True, length=None)参数:stft_matrix,经过STFT之后的矩阵hop_length,帧移,默认为win_length/4window,字符串,元组,数字,函数或shape = (n_fft, )窗口(字符串,元组或数字)窗函数,例如scipy.signal.hanning长度为n_fft的向量或数组center,bool如果为True,则假定D具有居中的帧如果False,则假定D具有左对齐的帧length,如果提供,则输出y为零填充或剪裁为精确长度音频
幅度转dB
将幅度频谱转为dB标度频谱,对S取对数,逆函数为.(S)
libsora.amplitude_to_db(S, ref=1.0)参数:S,输入幅度ref,参考值,振幅abs(S)相对于ref进行缩放,20*log(S/ref)返回:S,单位为dB
功率转dB
将功率谱(幅度平方)转为分贝(dB),逆函数为.core.(S)
librosa.core.power_to_db(S, ref=1.0)参数:S,输入功率ref,参考值,振幅abs(S)相对于ref进行缩放,20*log(S/ref)返回:S,单位为dB
功率谱案例
def power_demo():y, sr = librosa.load(librosa.util.example_audio_file())S = np.abs(librosa.stft(y))# print(librosa.power_to_db(S**2))plt.figure()plt.subplot(2,1,1)dd.specshow(S**2, sr=sr, y_axis='log')plt.colorbar()plt.title('Power spectrogram')plt.subplot(2,1,2)# 相对于峰值功率计算dbdd.specshow(librosa.power_to_db(S**2, ref=np.max), sr=sr, y_axis='log', x_axis='time')plt.colorbar(format='%+2.0f dB')plt.title('Log Power spectrogram')plt.set_cmap('autumn')plt.tight_layout()plt.show()
频率谱
librosa.display.specshow(data, x_axis=None, y_axis=None, sr=22050, hop_length=512)参数:data:要显示的矩阵sr :采样率hop_length :帧移x_axis 、y_axis :x和y轴的范围频率类型'linear','fft','hz':频率范围由FFT窗口和采样率确定'log':频谱以对数刻度显示'mel':频率由mel标度决定时间类型time:标记以毫秒,秒,分钟或小时显示 。值以秒为单位绘制 。s:标记显示为秒 。ms:标记以毫秒为单位显示 。所有频率类型均以Hz为单位绘制
# 频率谱def freq_demo():y, sr=librosa.load(librosa.util.example_audio_file())plt.figure()D=librosa.amplitude_to_db(np.abs(librosa.stft(y)), ref=np.max)plt.subplot(2, 1, 1)dd.specshow(D, y_axis='linear')plt.colorbar(format='%+2.0f dB')plt.title('Linear freq. Power Spec.') # 线性频率功率谱plt.subplot(2, 1, 2)dd.specshow(D, y_axis='log')plt.colorbar(format='%+2.0f dB')plt.title('Log freq. Power Spec.') # 对数频率功率谱plt.show()