在本文中,将探讨不同音乐流派的振幅包络特征,并使用Python和Librosa库进行可视化分析。振幅包络是音频信号的一个重要特征,它描述了声音随时间的幅度变化,对听觉感知有着重要影响。这种特征在声音的起始检测和音乐流派分类中被广泛应用。
振幅包络是指从原始音频波形中提取的时间域音频特征,它描述了声音随时间的幅度波动。振幅包络的最大值可以为提供声音响度的粗略估计,并且对于声音的快速检测和区分至关重要。
根据MAPLE实验室的研究,振幅包络可以分为打击乐和平坦振幅包络两种形式。打击乐振幅包络以突然的起始和快速的指数衰减为特征,而平坦振幅包络则以突然的起始、持续的保持期和突然的终止为特征。这两种振幅包络在不同的研究领域中有着不同的应用效果。
首先,需要安装并导入Librosa库以及所有必要的依赖项,然后加载音频文件。以下是安装和导入依赖项的步骤:
!pip install librosa
# 导入所有必要的库
from IPython.display import Audio
import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
接下来,将加载来自GTZAN数据集的五个不同音乐流派(古典、蓝调、雷鬼、摇滚和爵士)的30秒音频样本。
将计算单个样本和整个音频信号的持续时间。以下是计算古典音乐信号持续时间的示例代码:
# 加载音频文件
classical_music_file = "/content/drive/MyDrive/trytheseaudios/classical.00000.wav"
# ...其他音频文件加载代码...
classical, sr = librosa.load(classical_music_file)
# ...其他音频文件加载代码...
sample_duration_classical = 1/sr
duration_of_classical_signal = sample_duration_classical * len(classical)
print(f"Duration of one sample is : {sample_duration_classical : .6f} seconds")
print(f"Duration of the audio signal is: {duration_of_classical_signal : .6f} seconds")
输出结果将显示每个样本的持续时间和整个音频信号的持续时间。
现在,将可视化不同音乐流派的音频波形。以下是可视化波形的代码:
plt.figure(figsize=(15, 17))
# ...波形可视化代码...
plt.subplots_adjust(hspace = 0.75)
plt.show()
通过这些波形图,可以直观地看到不同音乐流派的音频特征。
将编写一个工具函数来计算不同音乐流派的振幅包络。以下是计算振幅包络的代码:
FRAME_SIZE = 1024
HOP_LENGTH = 128
def amplitude_envelope(signal, frame_size, hop_length):
return np.array([max(signal[i:i+frame_size]) for i in range(0, signal.size, hop_length)])
# 计算各个流派的振幅包络
ae_classical = amplitude_envelope(classical, FRAME_SIZE, HOP_LENGTH)
# ...其他流派的振幅包络计算代码...
这个函数将帮助计算并可视化不同音乐流派的振幅包络。
最后,将可视化不同音乐流派的振幅包络。以下是可视化振幅包络的代码:
frames = range(0, ae_classical.size)
t = librosa.frames_to_time(frames, hop_length=HOP_LENGTH)
plt.figure(figsize=(15, 17))
# ...振幅包络可视化代码...
plt.subplots_adjust(hspace = 0.75)
plt.show()
通过这些振幅包络图,可以进一步分析不同音乐流派的特征。