如何代表用于神经网络的音频文件?

时间:2019-01-12 06:15:30

标签: python audio keras neural-network conv-neural-network

我想在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's)通常用于分类系统。据我所知,我无法使用它们,因为它们不会被转换回mp3,而不会造成重大损失。

是否存在适用于卷积神经网络的,基于 array lossless *(或几乎无损)的表示转换方法,该方法适用于卷积神经网络数组,反之亦然?

编辑:具体来说,我要问的是步骤1和3。我知道步骤2本质上是有损的。

谢谢!

1 个答案:

答案 0 :(得分:1)

我想说的不是关于原始音频表示的问题,而是关于是否存在无损卷积变换的问题,我会说不

...此外,还有许多无损(或几乎如此)的变换,例如,当您将音频发送到傅立叶变换以将其从时域转换成其频域表示形式,然后通过将频率域表示形式发送到逆傅立叶变换中,您现在将具有正常的时域音频,该音频将与原始源输入音频相匹配,达到任意精度。在编写golang项目并获得输入灰度照片后,我知道了这一点解析后将每个像素的光强度级别信息合成为单通道音频信号(傅立叶反变换),然后收听(傅立叶变换)以合成与输入照片匹配的输出照片

如果您担心比特级的准确性(无损),则应避免使用mp3并使用无损编解码器,或者仅供初学者使用WAV格式...任何音频CD都使用WAV,而WAV只是PCM中的音频曲线...它只是音频曲线上的点(两个通道的样本)……在您上面的步骤2)中,如果您只是将音频曲线直接馈入神经网络,则会获得无损音频数据……典型点根据定义,自动编码器是一种有损转换,因为它会丢弃比特级信息

使用音频作为神经网络的输入时会遇到一些挑战

1)音频具有时间方面的特征,因此根据您的需要,您可能希望将大块音频采样(以制作一系列采样窗口)并将每个窗口作为数据单元馈入NN或也许不是

2)与图像一样,音频具有大量的数据点...即原始音频曲线上的每个点都是在上游采样的,现在您通常每秒钟每秒有44,100个采样,其中通常会产生语义这些样本的分组...例如,一个口语单词是一个很容易包含数千个音频样本数据点的聚合概念,因此正确创建这些音频样本窗口至关重要采样窗口的大小是如何创建下一个窗口的设计决策:下一个窗口是否包含上一个窗口的一些采样,还是所有采样都是新的?每个窗口中的音频采样数是否相同?变化

因此打开输入的音频文件并将其读入缓冲区...以确认此缓冲区已创建,只需将其写到文件中,然后播放该文件并验证其播放就可以了...使用免费开源音频工具Audacity打开音频文件并查看其音频曲线