简单的语音数据集制作方案

article/2025/10/29 8:39:35

        众所周知,深度学习现阶段还是以数据为驱动,然后我们需要simsiam等的自监督算法来自动标注数据集以及特征,但是初始阶段还是回到我们的音频数据本身。

        我们提取音频特征有数种方式,首先是可以直接进行音频波形的提取:

import librosa
# wav就是所说的音频波形,sr是音频文件的采样率
wav,sr=librosa.load('xxx.wav')# 还有另外一个包就是torchaudioimport torchaudio
# 这里提取出来的wav数据本身就是tensor格式
wav,sr=torchaudio.load('xxx.wav')# ps:torchaudio如果安装不了的话,自己在conda弄个新的环境,
# 用离线的形式安装torch和torchvision还有torchaudio

然后是梅尔频谱之类的东西的提取,不多说,学习资料大把,也是这两个库。

废话不多说,下面上代码。

import os
import numpy as np
import torch
import torchaudio
import librosa
import librosa.display
from matplotlib import pyplot as plt
from torch.utils.data import Dataset, DataLoader
from torchaudio.transforms import MelSpectrogram, AmplitudeToDBdef vision(mel_spectrogram):plt.figure(figsize=(10, 4))  # 创建一个画布librosa.display.specshow(librosa.power_to_db(mel_spectrogram[0], ref=np.max), y_axis="mel",x_axis="time")  # 绘制mel图谱plt.colorbar(format="%+2.0f dB")  # 添加颜色条plt.title("Mel Spectrogram")  # 添加标题plt.tight_layout()  # 调整布局plt.show()  # 显示图片def pad_3d(x, seglen, mode='wrap'):# 这个函数将一个三维数组x [80, 80, L] 补零到指定长度seglen# 如果x的第三个维度小于seglen,则在该维度上补零# 如果x的第三个维度等于seglen,则不变# 如果x的第三个维度大于seglen,则切掉多余的部分pad_len = seglen - x.shape[2]if pad_len > 0:y = np.pad(x, ((0, 0), (0, 0), (0, pad_len)), mode=mode)elif pad_len == 0:y = xelse:r = np.random.randint(-pad_len)  # r : [0- (-pad_len)]y = x[:, :, r:r + seglen]if torch.is_tensor(y):y = yelse:y = torch.tensor(y)return yclass WavDataset(Dataset):def __init__(self, root_dir):self.root_dir = root_dir# self.transform = Noneself.wav_files = []self.labels = []for folder in os.listdir(root_dir):folder_path = os.path.join(root_dir, folder)if os.path.isdir(folder_path):for file in os.listdir(folder_path):if file.endswith(".wav"):file_path = os.path.join(folder_path, file)self.wav_files.append(file_path)self.labels.append(folder)def __len__(self):return len(self.wav_files)def __getitem__(self, idx):wav_file = self.wav_files[idx]label = self.labels[idx]waveform, sample_rate = torchaudio.load(wav_file)# waveform = torch.index_select(waveform, dim=0, index=torch.tensor([0]))mel_spectrogram = MelSpectrogram(sample_rate, n_fft=2048, n_mels=200,hop_length=512)(waveform)# vision(mel_spectrogram)  # 可视化操作mel_spectrogram = AmplitudeToDB()(mel_spectrogram)# 长度保持一致mel_spectrogram = pad_3d(mel_spectrogram, seglen=176)# print(mel_spectrogram.shape)# 进行双声道的转换if mel_spectrogram.shape[0] != 2:# print(mel_spectrogram.shape[0])mel_spectrogram = torch.cat((mel_spectrogram, mel_spectrogram), dim=0)# print(mel_spectrogram.shape)  # 进行数据类型的查看# print(type(mel_spectrogram))# print(torch.is_tensor(mel_spectrogram))# if self.transform is not None:#     mel_spectrogram = self.transform(mel_spectrogram)# print(mel_spectrogram.shape)label = int(label)label = torch.tensor(label)return mel_spectrogram, labelif __name__ == '__main__':dataset = WavDataset('2s_wav_mini')print(dataset[0])# n = 0# for l, data in enumerate(dataset):#     if data[0].shape[0] != 2:#         n += 1#         print('第几个:', l, 'size:', data[0].shape[0], 'total:', n)dataset = DataLoader(dataset)

注:文件的存储方式如图所示,里面每个0-4文件夹下都是wav格式的文件,更复杂的数据存储结构请另请高明,如果你的数据后缀是ogg之类的请更改代码

if file.endswith(".wav")改为if file.endswith(".ogg"):、

最后强调一下,如果你的数据集本身也就是几分类,效果还是非常差(类似四五分类,但是准确率也就70以下),请先质疑自己数据的问题,而不是质疑模型的问题。比如说,我们进行语音数据是可以通过conv1d或者conv2d直接进入卷积网络的,但是你的数据格式要对。并且,提取mfcc或者其他频谱图也并非是真正将图片保存出来,自己想看看是什么样的就做个可视化。因为语音信号是一种时间序列,而图片是一种“空间序列”。

并且,我的数据集文件音频格式也就是2s一个的,如果自定义数据长度请更改pad_3d的seglen参数,至于为什么pad_3d这个东西这么抽象,用numpy的方式处理tensor数据之后再改回来?那只能说我也是用别人的。还有,请将你的数据集的名称改成0-n的格式

鸟声数据:20种鸟类,14311条自然音频,智源研究院联合百鸟数据发布大型鸟鸣数据集Birdsdata

**链接:https://pan.baidu.com/s/1M-3AQhle_TigrbjjT-z0pw (提取码:61g6)


http://chatgpt.dhexx.cn/article/5SfKTl3o.shtml

相关文章

数据集 | 基于语音(Speech)/多模态(Multimodal)的情绪识别数据集,格式及下载

本文主要介绍了一些常用的语音🗣识别数据集,文件格式以及下载地址: 目录 1.IEMOCAP Emotion Speech Database(English) 2.Emo-DB Database(German) 文件命名 对象 3.Ryerson Audio-Visual Database of Emotional Speech and Song (Engli…

历史最全开放语音/音频数据集整理分享

本资源整理了40多个语音和音频处理相关的开源数据集,分享给有需要的朋友。 资源整理自网络,源地址:https://github.com/jim-schwoebel/voice_datasets 有两种主要类型的音频数据集:语音数据集和音频事件/音乐数据集。 语音数据集…

语音识别数据集-TIMIT数据集-中文超详细解析

TIMIT数据集 前言 该文章会详细介绍TIMIT数据集的文件组成、内部文件格式以及如何使用TIMIT数据集。同时还会介绍TIMIT是如何组织数据以及划分训练集与测试集的,可以为今后自己构建数据集提供一种思路。 关键词:TIMIT数据集、语音识别、音素、人工音频…

语音增强数据集总结【持续更新】

语音增强数据集总结 语音增强的第一步一般是准备数据,包含带噪语音和纯净语音。一般这些数据都是人工合成的,以纯净语音和噪声数据为基础即可合出带噪语音信号。以下介绍一些语音增强领域常用的数据集。 纯净语音 Common Voice(2019首次发布&#xff…

DuDuTalk语音工牌:语音数据分析在销售场景的应用价值

在现今这个数字时代,企业需要更高效、更有效地沟通和合作。语音数据的收集和分析能够增加销售团队和客户之间的联系,同时提高销售闭合率。因此,了解和利用销售沟通语音数据的价值,是现代企业所必须的。 销售沟通语音数据指的是在…

VoxCeleb1 语音数据集下载

前言 VoxCeleb1 是广泛使用的 说话人识别、验证 数据集。由于是从 YouTube 视频中提取,有比较丰富的噪声。(有空补介绍)由于我只使用音频数据,这里只介绍音频数据相关的下载流程。 如果可以使用谷歌表单和翻译软件应该就可以顺利…

语音识别之语音数据预处理

Email:ht0909mail.ustc.edu.cn 原创内容,转载请标明 数据集 1.清华大学THCHS30中文语音数据集 data_thchs30.tgz http://cn-mirror.openslr.org/resources/18/data_thchs30.tgz test-noise.tgz http://cn-mirror.openslr.org/resources/18/test-noi…

中文语音识别数据集总结

目录 OpenSLR国内镜像1.Free ST Chinese Mandarin Corpus2.Primewords Chinese Corpus Set 13.爱数智慧中文手机录音音频语料库(Mandarin Chinese Read Speech )4.THCHS305.ST-CMDS6.MAGICDATA Mandarin Chinese Read Speech Corpus7.AISHELL7.1 AISHELL…

语音数据集整理

语音数据集整理 目录 1.Mozilla Common Voice. 2 2.翻译和口语音频的大型数据库Tatoeba. 2 3.VOiCES Dataset 3 4. LibriSpeech. 4 5.2000 HUB5 English:... 4 6.VoxForge:... 4 7.人类语音的大规模视听数据集 (VoxCeleb)…

语音数据集

最大的语音数据下载网站: openslr.org vox-celeb说话人识别数据集:无法下载 OpenSpeaker之声纹数据整理 - 知乎本文是OpenSpeaker系列的第二篇文章,全系列可参考这篇文章或者文末的专栏: 蘑菇炖提莫:OpenSpeaker&…

Ubuntu 16.04网络配置

A lazy youth, a lousy age. 1.用root账号进行登录。Files–>Computer–>etc–>network–>interfaces 2.使用以下命令可查看网卡编号、IP地址、子网掩码。 ifconfig3.使用以下命令可查看网关号。 route4.最后,在interfaces中填写配置信息。 2021.10…

Ubuntu20配置网络 ssh

Ubuntu20配置网络 ssh Ubuntu20的网络配置文件位置: /etc/netplan/01-network-manager-all.yaml确定要配置的地址配置VMnet8地址设置虚拟网络地址配置ubuntu地址 Ubuntu20的网络配置文件位置: /etc/netplan/01-network-manager-all.yaml 确定要配置的地址 VMnet8: 192.168.12…

Ubuntu 14.04 网络配置

VMware中网络设置有三种,分别是:NAT、桥接和Host-only。本文仅说明NAT连接,配好后可让虚拟机上网,操作简单图文并茂。 1、首先打开虚拟机的设置 2、设置成NAT模式 3、打开虚拟网络编辑器 4、打开权限 5、设置虚拟网络编辑器为…

Ubuntu如何配置桥接网络

1、Ubuntu的网络配置分类 Ubuntu的主要三种网络配置 (1)桥接模式:Ubuntu和主机各有一个IP地址。(重点) (2)NAT模式:Ubuntu和主机共享IP地址。 (3)主机模式…

VMware虚拟机Ubuntu连接网络设置

VMware虚拟机Ubuntu连接网络设置 前言 学校发了新电脑不想装双系统,装了VMware虚拟机,但是在联网是遇到了困难。在网上找了方法连接成功。现在做一下记录。 方法 一般虚拟机联网方法有两种:NAT 和 桥接。 参考 知乎:Vmware虚拟…

【Ubuntu】配置ubuntu网络

配置ubuntu网络 一、三种虚拟网络介绍二、 配置ubuntu系统使用桥接模式连接外网三、通过NAT模式让ubuntu系统连接外网四、常见问题1.解决ubuntu系统没有网络图标一、三种虚拟网络介绍 VMnet0 : 桥接模式,选中桥接模式之后,可以将VMnet0桥接到对应的物理网卡之上, 默认选中自…

Ubuntu桥接网络配置

一、虚拟机设置 点击虚拟机最上面的“虚拟机”选项,在打开的下拉菜单中选择最下面的“设置”选项,弹出“虚拟机设置”对话框: 在当前“硬件”选项卡,选择“网络适配器”,在右侧的网络连接中选择“桥接模式”&#xf…

Ubuntu网络配置、开发板与电脑

一、Ubuntu网络配置 1、概念 桥接:Ubuntu会单独由路由器分配ip地址,不和Windows共享ip NAT:Ubuntu跟主机共享ip 注意:某些同学Ubuntu一直无法配置联网或者ping不通局域网,有可能是你的虚拟网卡被删了,重新安…

virtualbox下ubuntu虚拟机配置网络

一、目标: 1.在ubuntu虚拟机内可以联通外网 2.可以通过本机ssh连接上ubuntu虚拟机 二、Virtualbox配置 1.勾选 “系统->网络” 2.配置双网卡 网卡1配置为Nat,网卡2配置为Host-Only 三、ubuntu虚拟机内部设置 vi /etc/netplan/00-installer-confi…

VirtualBox设置Ubuntu虚拟机网络通信

1、安装虚拟机 2、设置虚拟机上网 3、设置主机-虚拟机、虚拟机-虚拟机网络通信 4、修改虚拟机IP地址 (1)查看本地IP (2)查看虚拟机IP (3)修改虚拟机IP,切换为管理员用户 改为静态IP,设置dpcp4为false,addresses设置为…