关于声码器的使用
About the usage of vocoders
我是 AI 的新手,我目前正在开发一种用于非并行语音转换的模型。我遇到的一个令人困惑的问题是声码器的使用。
所以我的模型需要 Mel 声谱图作为输入,而我正在处理的当前模型正在使用 MelGAN 声码器 (Github link) which can generate 22050Hz Mel spectrograms from raw wav files (which is what I need) and back. I recently tried 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
模块仅使用标准方法创建 log-magnitude 梅尔频谱图,如下所示:
- 通过对输入音频的 windows 应用傅立叶变换来计算 STFT,
- 获取生成的复杂频谱图的幅度,
- 将幅度谱图乘以梅尔滤波器矩阵。请注意,他们实际上是从
librosa
! 得到这个矩阵的
- 对生成的梅尔频谱图取对数。
关于混淆
您的困惑可能源于这样一个事实,即深度学习论文的作者通常在谈论“声码器”时只指他们的mel-to-audio“解码器”——audio-to-mel部分总是差不多一样。我说这可能会造成混淆,因为据我了解,术语“声码器”的经典含义包括编码器和解码器。
不幸的是,这些方法并不总是完全有效,例如创建梅尔过滤器矩阵的不同方法、不同的填充约定等。
例如,librosa.stft
有一个 center
参数,可以在应用 STFT 之前填充音频,而 tensorflow.signal.stft
没有这个参数(需要事先手动填充)。
创建梅尔过滤器的不同方法的一个示例是 librosa.filters.mel
中的 htk
参数,它在“HTK”方法和“Slaney”方法之间切换。再次以Tensorflow为例,tf.signal.linear_to_mel_weight_matrix
确实不支持这个论点,始终使用HTK方式。不幸的是,我对torchaudio
不熟悉,所以我不知道你是否也需要小心。
最后,当然还有许多参数,例如 STFT window 大小、跳变长度、梅尔滤波器覆盖的频率等,相对于所使用的参考实现更改这些参数可能会影响您的结果.由于不同的代码存储库可能使用略有不同的参数,我想你的问题的答案是“每种方法都会以相同的方式执行操作(创建梅尔频谱图)吗?”是“不是真的”。在一天结束时,您将不得不接受一组参数...
奖励:为什么这些都是解码器而编码器总是一样的?
Mel -> Audio 方向很难。甚至 Mel -> ("normal") 频谱图也不是 well-defined 因为转换为 mel 频谱是有损的并且不能被反转。最后,将频谱图转换为音频很困难,因为需要估计相位。您可能熟悉 Griffin-Lim 之类的方法(同样,librosa 有它,因此您可以尝试一下)。这些会产生嘈杂的 low-quality 音频。所以研究的重点是使用强大的模型改进这个过程。
另一方面,Audio -> Mel 简单、well-defined 且速度快。无需定义“自定义编码器”。
现在,一个完全不同的问题是梅尔频谱图是否是一种“好的”编码。使用变分自动编码器等方法,您也许可以找到更好的(例如更紧凑、损耗更少)音频编码。这些将包括自定义编码器 和 解码器,您将无法摆脱标准的 librosa 功能...
我是 AI 的新手,我目前正在开发一种用于非并行语音转换的模型。我遇到的一个令人困惑的问题是声码器的使用。
所以我的模型需要 Mel 声谱图作为输入,而我正在处理的当前模型正在使用 MelGAN 声码器 (Github link) which can generate 22050Hz Mel spectrograms from raw wav files (which is what I need) and back. I recently tried 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
模块仅使用标准方法创建 log-magnitude 梅尔频谱图,如下所示:
- 通过对输入音频的 windows 应用傅立叶变换来计算 STFT,
- 获取生成的复杂频谱图的幅度,
- 将幅度谱图乘以梅尔滤波器矩阵。请注意,他们实际上是从
librosa
! 得到这个矩阵的
- 对生成的梅尔频谱图取对数。
关于混淆
您的困惑可能源于这样一个事实,即深度学习论文的作者通常在谈论“声码器”时只指他们的mel-to-audio“解码器”——audio-to-mel部分总是差不多一样。我说这可能会造成混淆,因为据我了解,术语“声码器”的经典含义包括编码器和解码器。
不幸的是,这些方法并不总是完全有效,例如创建梅尔过滤器矩阵的不同方法、不同的填充约定等。
例如,librosa.stft
有一个 center
参数,可以在应用 STFT 之前填充音频,而 tensorflow.signal.stft
没有这个参数(需要事先手动填充)。
创建梅尔过滤器的不同方法的一个示例是 librosa.filters.mel
中的 htk
参数,它在“HTK”方法和“Slaney”方法之间切换。再次以Tensorflow为例,tf.signal.linear_to_mel_weight_matrix
确实不支持这个论点,始终使用HTK方式。不幸的是,我对torchaudio
不熟悉,所以我不知道你是否也需要小心。
最后,当然还有许多参数,例如 STFT window 大小、跳变长度、梅尔滤波器覆盖的频率等,相对于所使用的参考实现更改这些参数可能会影响您的结果.由于不同的代码存储库可能使用略有不同的参数,我想你的问题的答案是“每种方法都会以相同的方式执行操作(创建梅尔频谱图)吗?”是“不是真的”。在一天结束时,您将不得不接受一组参数...
奖励:为什么这些都是解码器而编码器总是一样的?
Mel -> Audio 方向很难。甚至 Mel -> ("normal") 频谱图也不是 well-defined 因为转换为 mel 频谱是有损的并且不能被反转。最后,将频谱图转换为音频很困难,因为需要估计相位。您可能熟悉 Griffin-Lim 之类的方法(同样,librosa 有它,因此您可以尝试一下)。这些会产生嘈杂的 low-quality 音频。所以研究的重点是使用强大的模型改进这个过程。
另一方面,Audio -> Mel 简单、well-defined 且速度快。无需定义“自定义编码器”。
现在,一个完全不同的问题是梅尔频谱图是否是一种“好的”编码。使用变分自动编码器等方法,您也许可以找到更好的(例如更紧凑、损耗更少)音频编码。这些将包括自定义编码器 和 解码器,您将无法摆脱标准的 librosa 功能...