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

标签 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) 通常用于分类系统。据我所知,我不能使用这些,因为它们不能在没有重大损失的情况下转换回 mp3。

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

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

提前致谢!

最佳答案

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

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

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

将音频用作神经网络的输入时存在几个挑战

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

2) 与图像一样,音频具有大量数据点......原始音频曲线上的每个点都在上游进行采样,现在每个 channel 每秒通常有 44,100 个样本,其中语义通常是结果这些样本的分组......例如,一个口头词是一个聚合概念,很容易涉及成千上万个音频样本数据点中的数千个,甚至可能是 10 个......因此正确创建这些音频样本窗口至关重要......捆绑到创作中样本窗口的数量是如何创建下一个窗口的设计决策:下一个窗口是否包含前一个窗口的一些样本,或者所有样本都是新的...每个窗口中的音频样本数量是否相同或是否相同变化

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

关于python - 如何表示用于神经网络的音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54157231/

相关文章:

python - Pandas 数据框 : Change column values?

python - 将 python/numpy "A.argmin(axis=-1)"转换为等效的 matlab 表达式

javascript - 如何修复audio.play()不是函数

reactjs - 我想在响应中创建一个音乐列表。如何创建它?

python-3.x - BadZipFile : File is not a zip by importing keras

python - CNN(卷积神经网络)需要设计卷积核吗?

python - 将异常保存到python中的文件

flash - 检查SoundChannel是否正在播放声音

Keras Lambda 层输出不是 "symbolic tensor"

python - 在多索引列上进行瓶坯聚合