machine-learning - 如何处理不同的音频格式进行音频分类?
问题描述
我正在研究音频分类问题陈述以在两个音频类之间进行分类。我从jotform收集了样本,他们提供了音频小部件来收集 .wav 音频,但结果证明小部件以.mp3 格式存储数据:
在我的问题陈述中,分类类来自不同的格式:
class A : all the 100 samples are in .mp3 format ( jot form collection )
class B : all the samples are in .wav format
我在这里添加两种类型的类样本:
A 类示例音频 :它是 .wav 格式
细节 :
General
Complete name : count_class_1.wav
Format : Wave
File size : 1.41 MiB
Duration : 15 s 445 ms
Overall bit rate mode : Constant
Overall bit rate : 768 kb/s
Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Duration : 15 s 445 ms
Bit rate mode : Constant
Bit rate : 768 kb/s
Channel(s) : 1 channel
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 1.41 MiB (100%)
B 类音频样本Jotform 说它是 .wav 格式,但只有扩展名是 .wav,文件是 .mp3 格式。
细节 :
General
Complete name : count.wav
Format : MPEG Audio
File size : 183 KiB
Duration : 9 s 360 ms
Overall bit rate mode : Constant
Overall bit rate : 160 kb/s
Writing library : LAME3.99.5
FileExtension_Invalid : m1a mpa mpa1 mp1 m2a mpa2 mp2 mp3
Audio
Format : MPEG Audio
Format version : Version 1
Format profile : Layer 3
Format settings : Joint stereo / MS Stereo
Duration : 9 s 360 ms
Bit rate mode : Constant
Bit rate : 160 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Frame rate : 41.667 FPS (1152 SPF)
Compression mode : Lossy
Stream size : 183 KiB (100%)
Writing library : LAME3.99.5
在将其输入神经网络之前我在做什么:
- 下采样到 16kHz,信号电平被归一化
- 通过去除信号中的静音,在音频段中分段
- 高滤波(预加重滤波器)。然后将音频片段划分为 25 毫秒的非重叠汉明窗帧。
现在,从每个帧中提取各种特征,包括 MFCC、过零率 (ZCR)、共振峰(前 4 个)等,最后将所有这些特征馈送到简单的密集层神经网络或 CNN(频谱图格式)。
但问题是两个类的音频文件格式不同,A 类音频样本为 .wav,B 类音频样本为 .mp3,网络很可能会偏向格式或音频编码。
我想到的解决方案:
- 将所有文件降级到 16kHz 频率(但格式问题仍然存在)
- 或将所有文件转换为一种通用格式,例如我将所有 .mp3 文件转换为 .wav 文件,然后所有文件将具有相同的格式,我可以将一种转换为另一种,但我担心转换后的文件会丢失质量.
我的疑问是,如果我将两类音频样本(.wav 和 mp3 两者)都下采样到 16kHz,我的神经网络仍然会存在格式偏差吗?
当音频文件采用不同格式时,对我来说什么是音频分类的好策略?
解决方案
仅从 MP3 转换为线性 PCM 并不会消除神经网络可能“学习”到的编码伪影。由于 MP3 是有问题的有损格式,自然的方法是将相同的编解码器应用于您的 WAVE 16 位线性 PCM 文件,并使用 MP3 中编码解码的两个类。
但是,编解码器本身可能不是您的类的唯一意外鉴别器。除了从 jotform 仔细检查音频捕获实现之外,您还可以应用像audiomentations项目中可用的数据增强技术。
推荐阅读
- joomla - Joomla - 如何为不在视图中的组件文件创建覆盖
- java - 匹配最后一个空格之前的任何字符
- android - 如何使用 Kotlin 通过 Dagger 2.11 注入 SP?
- google-sheets - 拆分和转置数组
- r - “filename.rdata”文件探索和转换为 CSV
- javascript - Laravel Mix + Vue-Loader 15
- python - 遇到同时连接到多个设备的多线程问题
- swift - TwitterKit 以模态方式关闭视图控制器
- html - 标题中溢出的背景颜色
- javascript - setCustomValidity 不是函数