音频分类-数据集:ESC-50【每个音频长度为5 秒,5个大类,50 个小类(每个小类 40 个样本),共 2000个样本】

该数据集由 5 秒长的记录组成,这些记录被组织成 50 个语义类(每个类 40 个示例),松散地排列成 5 个主要类别,
ESC-50 数据集是 2000 个环境录音的标记集合,适用于环境声音分类的基准测试方法。

GitHub下载地址:(https://github.com/karolpiczak/ESC-50)
esc-50-aug

音频分类-数据集:ESC-50【每个音频长度为5 秒,5个大类,50 个小类(每个小类 40 个样本),共 2000个样本】_第1张图片
对应的cvs文件有声音的描述:
音频分类-数据集:ESC-50【每个音频长度为5 秒,5个大类,50 个小类(每个小类 40 个样本),共 2000个样本】_第2张图片

# 例如我们播放狗叫声
import IPython.display as display
display.Audio('../study/sound/ESC-50/audio/1-100032-A-0.wav')
# 声音可视化代码, 使用pywave模块,读取声音文件,一组将声音文件一波形显示
import wave
import struct
import numpy as np
import matplotlib.pyplot as plt

# 读取wav文件
filename = '../study/sound/ESC-50/audio/1-100032-A-0.wav'
wavefile = wave.open(filename, 'r')  # open for writing

# 读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames。
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()

print("channel", nchannels)
print("sample_width", sample_width)
print("framerate", framerate)
print("numframes", numframes)

# 建一个y的数列,用来保存后面读的每个frame的amplitude。
y = np.zeros(numframes)

# for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。
# unpack是struct里的一个函数,用法详见http://docs.python.org/library/struct.html。简单说来就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个
# tuple,所以我们取它的第零位。
for i in range(numframes):
    val = wavefile.readframes(1)
    left = val[0:2]
    # right = val[2:4]
    v = struct.unpack('h', left)[0]
    y[i] = v
    
# framerate就是声音的采用率,文件初读取的值。
Fs = framerate
time = np.arange(0, numframes) * (1.0 / framerate)

# 显示时域图(波形图)
plt.subplot(211)
plt.plot(time, y)
# 显示频域图(频谱图)
plt.subplot(212)
plt.specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
plt.show()

音频分类-数据集:ESC-50【每个音频长度为5 秒,5个大类,50 个小类(每个小类 40 个样本),共 2000个样本】_第3张图片




参考资料:
声音之旅 ----- 声音数据集 ESC-50
ESC-50数据集的分析(1)

你可能感兴趣的:(数据集,音视频,分类,python)