如何表示在神经网络中使用的音频文件



我想在Keras(tensorflow、python)中创建一个基本的卷积自动编码器,用于音频(MP3、WAV等)文件。

基本上,我正在做的是:

1)将mp3转换为数组

def mp3_to_array(original_mp3):
blah blah blah
return original_array

2) 通过自动编码器运行数组,输出类似的(但由于自动编码器的操作,有损耗)数组

def autoencoder(original_array):
autoencoder stuff
return new_array

3)将数组转换为mp3

def array_to_mp3(new_array):
halb halb halb
return new_mp3

我知道梅尔谱图和梅尔频率倒谱系数(mfcc)通常用于分类系统。据我所知,我不能使用这些,因为它们无法在没有重大损失的情况下转换回mp3。

是否有一种基于数组的无损*(或几乎无损)、代表性转换方法适用于卷积神经网络,将mp3转换为数组,反之亦然?

编辑:具体来说,我问的是步骤1和3。我知道第二步会有内在的损耗。

提前感谢!

我认为这不是一个关于原始音频表示的问题,而是一个是否存在无损卷积变换的问题,我认为没有

顺便说一句,有很多变换是无损的(或者几乎是无损的),例如,当你将音频发送到傅立叶变换中,将其从时域转换为频域表示,然后通过将频域表示发送到傅立叶逆变换来执行第二次变换时,你现在将拥有与你的原始源输入音频到任意精度级别。。。我是在写了一个golang项目后知道这一点的,该项目给出了一张输入灰度照片,该照片被解析以将每个像素的光强度水平信息合成为单通道音频信号(逆傅立叶变换),然后被收听(傅立叶变换)以合成与输入照片匹配的输出照片

如果你关心比特级精度(无损),你应该避免使用mp3,使用无损编解码器,或者只是为了初学者使用WAV格式。。。任何音频CD都使用WAV,它只是PCM中的音频曲线。。。它只是音频曲线上的点(两个通道的样本)。。。在上面的步骤2)中,如果你只是将音频曲线直接输入你的神经网络,它将得到你的无损音频数据。。。典型的自动编码器的要点是定义为有损变换,因为它丢弃了位级信息

当使用音频作为神经网络的输入时,存在几个挑战

1) 音频具有时间方面的特性,因此根据您的需要,您可能需要大量的音频样本(制作一系列样本窗口),并将每个窗口作为数据单元输入NN,也可能不是

2) 与图像一样,音频有大量的数据点。。。也就是说,原始音频曲线上的每个点都是向上游采样的,现在每通道每秒通常有44100个样本,其中语义通常是这些样本分组的结果。。。例如,一个口语单词是一个聚合概念,很容易涉及数千个甚至可能是数万个音频样本数据点。。。因此,正确创建这些音频样本窗口至关重要。。。创建一个样本窗口的关键是如何创建下一个窗口的设计决策:下一个窗包含上一个窗口中的一些样本还是所有样本都是新的。。。每个窗口中的音频样本数量是相同的还是不同的

所以打开输入音频文件并将其读取到缓冲区中。。。要确认这个缓冲区是创建好的,只需将其写入一个文件,然后播放该文件并验证其播放是否正常。。。使用名为Audacity的免费开源音频工具打开音频文件并查看其音频曲线

最新更新