audio - 关于声码器的使用

标签 audio deep-learning voice speech-synthesis

我对人工智能还很陌生,目前正在开发一个用于非并行语音转换的模型。我遇到的一个令人困惑的问题是声码器的使用。

所以我的模型需要梅尔频谱图作为输入,我正在研究的当前模型正在使用 MelGAN 声码器( Github link ),它可以从原始 wav 文件生成 22050Hz 梅尔频谱图(这是我需要的)并且后退。我最近尝试了 WaveGlow Vocoder ( PyPI link ),它还可以从原始 wav 文件生成 Mel 频谱图并返回。

但是,在其他模型中,例如, WaveRNN , VocGAN , WaveGrad 关于 wav 到 Mel 频谱图的生成没有明确的解释。这些模型中的大多数是否不需要 wav 到 Mel 频谱图功能,因为它们主要迎合 Tacotron 等 TTS 模型?或者是否有可能所有这些都具有该功能而我只是没有意识到?

如果能得到澄清,我们将不胜感激。

最佳答案

神经声码器如何处理音频 -> mel

检查例如这部分 MelGAN 代码:https://github.com/descriptinc/melgan-neurips/blob/master/mel2wav/modules.py#L26

具体来说,Audio2Mel 模块仅使用标准方法来创建对数幅度梅尔频谱图,如下所示:

  • 通过对输入音频的窗口应用傅立叶变换来计算 STFT,
  • 获取生成的复杂频谱图的幅度,
  • 将幅度谱图乘以梅尔滤波器矩阵。请注意,他们实际上是从 librosa 获取此矩阵!
  • 对所得梅尔谱图取对数。

关于困惑

您的困惑可能源于这样一个事实:深度学习论文的作者通常在谈论“声码器”时仅指他们的梅尔到音频“解码器”——音频到梅尔部分始终是或多或少相同。我说这可能会令人困惑,因为根据我的理解,术语“声码器”的经典含义包括编码器和解码器。

不幸的是,这些方法并不总是以与例如相同的方式工作完全创建梅尔过滤器矩阵的不同方法、不同的填充约定等。

例如,librosa.stft 有一个 center 参数,该参数将在应用 STFT 之前填充音频,而 tensorflow.signal.stft没有这个(需要事先手动填充)。

创建 mel 过滤器的不同方法的一个示例是 librosa.filters.mel 中的 htk 参数,它在“HTK”方法和“Slaney”方法之间切换”。再次以 Tensorflow 为例,tf.signal.linear_to_mel_weight_matrix 确实不支持此参数,并且始终使用 HTK 方法。不幸的是,我对 torchaudio 不熟悉,所以我不知道你是否也需要小心。

最后,当然还有许多参数,例如 STFT 窗口大小、跳跃长度、梅尔滤波器覆盖的频率等,相对于所使用的引用实现更改这些参数可能会影响您的结果。由于不同的代码存储库可能使用略有不同的参数,我想您的问题的答案是“每种方法都会以相同的方式执行操作(以创建梅尔谱图)吗?”是“不是真的”。归根结底,无论哪种方式,您都必须接受一组参数......

奖励:为什么这些都只是解码器而编码器始终相同?

梅尔的方向 -> 音频很难。甚至 Mel ->(“正常”)频谱图也没有明确定义,因为到 Mel 频谱的转换是有损的并且无法反转。最后,将频谱图转换为音频很困难,因为需要估计相位。您可能熟悉 Griffin-Lim 等方法(同样,librosa 有它,因此您可以尝试一下)。这些会产生嘈杂、低质量的音频。因此,研究的重点是使用强大的模型来改进这一过程。

另一方面,Audio -> Mel 简单、定义明确且快速。无需定义“自定义编码器”。

现在,一个完全不同的问题是梅尔谱图是否是一种“好的”编码。使用变分自动编码器等方法,您也许可以找到更好的(例如更紧凑、损耗更少)音频编码。这些将包括自定义编码器解码器,并且您将无法摆脱标准 librosa 函数...

关于audio - 关于声码器的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70942123/

相关文章:

audio - 如何在 flutter 中重现 List<int> 中的音频?

ios - 如何捕获在iOS 10上触发/关闭的系统警报事件

opencv - 如何跟踪快速移动的物体?

python - Keras 中的 BCEWithLogitsLoss

android - 在 Android 屏幕关闭时,音乐应用程序如何检测音量键?

python - PyTorch:如何定义利用迁移学习的新神经网络

android - 拦截语音识别

c# - ASP.NET 具有视频和语音功能?

.net - .NET 中的语音识别

android - 有没有办法在 Android 中重新编码 MP3 或任何其他音频文件?