音频 .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 文件的二进制分类的主要内容,如果未能解决你的问题,请参考以下文章
如何从 iOS 中的十六进制/二进制(原始数据)值生成音频文件?
二进制字符串到音频的转换(Python 或 Java)[关闭]