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

2024-03-29 06:57:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

基本上,我要做的是:

1)将mp3转换为数组

    def mp3_to_array(original_mp3):
        blah blah blah
        return original_array

2)通过autoencoder运行数组,输出一个类似的(但由于autoencoder操作而有损)数组

^{pr2}$

3)将数组转换为mp3

    def array_to_mp3(new_array):
        halb halb halb
        return new_mp3

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

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

编辑:具体来说,我问的是第一步和第三步。我知道第二步本来就是有损的。在

提前谢谢!在


Tags: tonewreturntensorflowdef数组arraymp3
1条回答
网友
1楼 · 发布于 2024-03-29 06:57:20

我想说,这不是一个关于原始音频表示的问题,而是一个问题,是否有一个无损的卷积变换,对此我会说不

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

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

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

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

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

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

相关问题 更多 >