音频 .wav 文件的二进制分类

Posted

技术标签:

【中文标题】音频 .wav 文件的二进制分类【英文标题】:Binary classification of audio .wav files 【发布时间】:2018-10-25 14:27:57 【问题描述】:

嘿,我完全是外行,以防音频处理,所以我的问题将是非常基本的。 我有来自 2 组 X 和 Y 的音频以及 .wav 音频样本,我需要制作能够正确分类声音 X 或 Y 的模型。 我创建了如何将数据加载到列表中,然后将其转换为 Dataframe 我有 2 列(在第二列中,每行有 8000 个元素)。

       0    1
0   2000    [0.1329449, 0.14544961, 0.19810106, 0.21718721...
1   2000    [-0.30273795, -0.6065889, -0.4967722, -0.47117...
2   2000    [-0.07037315, -0.6685449, -0.48479277, -0.4535...

到目前为止,我从 python_speech_features 模块中创建了这些有用的功能:

 rate,signal = sw.read(i)
    features = psf.base.mfcc(signal)
    features = psf.base.fbank(features)
    features = psf.base.logfbank(features[1])
    features = psf.base.lifter(features,L=22)
    features = psf.base.delta(features,N=13)
    features = pd.DataFrame(features)
    我应该从音频文件中提取哪些其他特征? 这里有什么值得可视化来揭示一些模式?例如。我可以查看一些可以显示 A 和 B 之间差异的功能吗? 进行此分类的最佳方法是什么,是使用 NN 更好还是传统模型可以满足?

我会感谢所有帮助 我们也非常欢迎其他用于自学的资源。

【问题讨论】:

缺少细节:是什么让声音属于 X 或 Y 类别? (例如:您是否检查声音是“人类语音” 还是“钢琴”)?这可能会帮助您决定要检查什么...频率?波形形状?等等。 PS你显示的数字对其他想要帮助的人毫无意义......解释[a]有神秘的“2000”,而[b]到底是什么?是音频样本值吗?... PPS:我不做机器学习(只知道一些音频处理)。 【参考方案1】:

我在将音频文件转换为 melspectrograms 并使用基本 CNN 对图像进行分类方面取得了巨大成功。以下函数需要librosa 库:

def audio_to_image(path, height=192, width=192):
    signal, sr = lr.load(path, res_type='kaiser_fast')
    hl = signal.shape[0]//(width*1.1)
    spec = lr.feature.melspectrogram(signal, n_mels=height, hop_length=int(hl))
    img = lr.power_to_db(spec)**2
    start = (img.shape[1] - width) // 2
    return img[:, start:start+width]
    加载音频文件 使跳跃长度比指定宽度长 10% 根据音频信号创建 melspectrogram 与人类听觉相似的幅度的对数刻度 从头到尾减少 5% 以处理静音

结果将如下所示:

虽然这些图像背后几乎没有人类直觉,但 CNN 可以很好地对它们进行分类。玩一点不同的分辨率和设置。让我知道这对您有什么作用。

编辑:Here 是我自己的项目的完整代码,将语音的音频样本分类为他们的口语。

【讨论】:

以上是关于音频 .wav 文件的二进制分类的主要内容,如果未能解决你的问题,请参考以下文章

Qt ------ WAV 音频文件介绍

如何从 iOS 中的十六进制/二进制(原始数据)值生成音频文件?

二进制字符串到音频的转换(Python 或 Java)[关闭]

将 .wav 文件转换为二进制文件,然后再转换回 .wav?

PCM文件格式简单介绍

将 wav 文件转换为没有标头的原始二进制文件