前言
本文主要是使用代码实现音频文件(wav)的多种可视化。
1.信号
2.傅里叶变换
3.Mel(梅尔)谱图
4.log_Mel谱图
提示:以下是本篇文章正文内容,下面案例可供参考
一、导入包以及音频文件
为了便于展示,我将信号和傅里叶变换使用plt组合在一起进行展示。
import matplotlib.pyplot as plt
import librosa
import librosa.display
import numpy as np
import sys
# 读取音频wav文件
audio_path = r"D:\PycharmProjects\testwav\test01.wav"
y, sr = librosa.load(audio_path, sr=None, mono=True)
"""
:param
path 音频路径
sr 采样率(默认22050,但是有重采样的功能)
mono 设置为true是单通道,否则是双通道
offset 音频读取的时间
duration 获取音频的时长
:returns
y : 音频的信号值,类型是ndarray
sr : 采样率
"""
###############################################################################
结果展示:
二、信号+傅里叶变换
为了便于展示,我将信号和傅里叶变换使用plt组合在一起进行展示。
import matplotlib.pyplot as plt
import librosa
import librosa.display
import numpy as np
import sys
# 读取音频wav文件
audio_path = r"D:\PycharmProjects\testwav\test01.wav"
y, sr = librosa.load(audio_path, sr=None, mono=True)
"""
:param
path 音频路径
sr 采样率(默认22050,但是有重采样的功能)
mono 设置为true是单通道,否则是双通道
offset 音频读取的时间
duration 获取音频的时长
:returns
y : 音频的信号值,类型是ndarray
sr : 采样率
"""
###############################################################################
###############################################################################
# plt画图
f, ((ax11, ax12)) = plt.subplots(1, 2, sharex=False, sharey=False)
###################################################################
# 01 左,信号
ax11.set_title('Signal')
ax11.set_xlabel('Time (samples)')
ax11.set_ylabel('Amplitude')
ax11.plot(y)
###################################################################
# 02 右,傅里叶变换
n_fft = 2048
ft = np.abs(librosa.stft(y[:n_fft], hop_length=n_fft+1))
ax12.set_title('Spectrum')
ax12.set_xlabel('Frequency Bin')
# ax12.set_ylabel('Amplitude')
ax12.plot(ft)
################################################################################
plt.show()
结果展示:
三、Mel谱图
代码如下(示例):
import matplotlib.pyplot as plt
import librosa
import librosa.display
import numpy as np
import sys
# 读取音频wav文件
audio_path = r"D:\PycharmProjects\testwav\test01.wav"
y, sr = librosa.load(audio_path, sr=None, mono=True)
"""
:param
path 音频路径
sr 采样率(默认22050,但是有重采样的功能)
mono 设置为true是单通道,否则是双通道
offset 音频读取的时间
duration 获取音频的时长
:returns
y : 音频的信号值,类型是ndarray
sr : 采样率
"""
###############################################################################
################################################################################
# 03 使用librosa获取mel谱图
n_mels = 64
n_frames = 5
n_fft = 1024
hop_length = 512
power = 2.0
mel_spectrogram = librosa.feature.melspectrogram(y=y,
sr=sr,
n_fft=n_fft,
hop_length=hop_length,
n_mels=n_mels,
power=power)
librosa.display.specshow(librosa.power_to_db(mel_spectrogram, ref=np.max),
y_axis='mel', fmax=8000, x_axis='time')
plt.colorbar(format='%+2.0f dB')
##################################################################################
plt.show()
结果展示:
四、Log_Mel谱图
代码如下(示例):
import matplotlib.pyplot as plt
import librosa
import librosa.display
import numpy as np
import sys
# 读取音频wav文件
audio_path = r"D:\PycharmProjects\testwav\test01.wav"
y, sr = librosa.load(audio_path, sr=None, mono=True)
"""
:param
path 音频路径
sr 采样率(默认22050,但是有重采样的功能)
mono 设置为true是单通道,否则是双通道
offset 音频读取的时间
duration 获取音频的时长
:returns
y : 音频的信号值,类型是ndarray
sr : 采样率
"""
###############################################################################
################################################################################
# 03 使用librosa获取mel谱图
n_mels = 64
n_frames = 5
n_fft = 1024
hop_length = 512
power = 2.0
mel_spectrogram = librosa.feature.melspectrogram(y=y,
sr=sr,
n_fft=n_fft,
hop_length=hop_length,
n_mels=n_mels,
power=power)
# librosa.display.specshow(librosa.power_to_db(mel_spectrogram, ref=np.max),
# y_axis='mel', fmax=8000, x_axis='time')
# plt.colorbar(format='%+2.0f dB')
##################################################################################
# 04 将mel谱图转换为log mel谱图
log_mel_spectrogram = 20.0 / power * np.log10(np.maximum(mel_spectrogram, sys.float_info.epsilon))
librosa.display.specshow(librosa.power_to_db(log_mel_spectrogram, ref=np.max),
y_axis='mel', fmax=8000, x_axis='time')
# plt.colorbar(format='%+2.0f dB')
##################################################################################
plt.show()
结果展示:文章来源:https://www.toymoban.com/news/detail-403787.html
总结
本文主要是将wav文件进行可视化,并没有对原理进行说明。文章来源地址https://www.toymoban.com/news/detail-403787.html

到了这里,关于python对wav音频可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!