#1 楼
我担心这里的所有答案都与问题无关。在音乐制作界所谓的声码器与信号处理中使用的相位声码器无关。更糟糕的是,原始帖子引用的Songify应用不是声码器的示例。让我们来解决这个问题!
1。相位声码器
其他答案所引用的相位声码器是一种信号处理技术,可用于通过计算时间来执行信号的时间/音高修改(时间扩展,音高移位)。信号的频率表示(短期傅立叶变换或STFT),然后插入/删除信号帧,然后保持相位信息的相干性。它与语音的关系仅是历史性的,目前用于低端音频硬件/软件中的音调转换和时间拉伸。 RubberBand是基于相位声码器的开源C ++时间/音调更改库的示例。
2。声码器
当音乐制作领域的人们指声码器时,他们指的是一种提取信号(通常是语音,称为调制器)的频谱包络并过滤其他信号(通常是信号)的设备带有滤波器的丰富合成纹理(称为载波),其响应是提取的频谱包络。有关产生声音的示例,请在头几秒钟内收听Kraftwerk Trans Europe Express中的0:23或Alan Parsons的Project The Raven。产生的效果是将类似声音的音色应用于载波信号播放的旋律或和弦,给人一种通过合成器说出声音的感觉。
声码器最初是一个模拟设备,它是由两个具有高Q值的十几个或更多带通滤波器组成的。这两个调制器信号通过第一个滤波器组发送,所有子带信号的幅度都由一个信封关注者数组。并行地,载波信号通过另一个滤波器组发送。每个子带都以包络跟随器给定的增益放大(带有VCA)。如果您阅读模拟信号,则可以从Jurgen Haible的现用声码器中查看声码器通道的原理图-调制器信号滤波器在顶部,载波滤波器和VCA在底部。声码器的软件实现与此接近,仅因为音乐制作人希望声码器听起来像经典的模拟设备!但是,如果您不希望对“老式”设备保真,并且想要比40 biquads便宜的东西,则获得相同结果的另一种方法是估计全极点滤波器(取决于所需的接近程度,约为8至20从调制器信号(AR建模)获得原始语音);然后将此过滤器应用于载体。这里的典型问题是,您需要每20ms帧左右更新一次滤波器系数;因此,您需要一个能很好处理突变系数更新的全极点滤波器的表示形式。
3。自动调谐和音高重映射
Songify的工作如下:提取录制语音的韵律(音高轮廓),并对其进行更改,以使最终的音高轮廓与目标旋律匹配。这有点类似于自动调谐的功能,区别在于自动调谐会将音高“舍入”为最接近的音乐准确半音,而Songify只是将其推向目标值。由于语音信号是单声道的,并且非常适合源滤波器模型,因此这里使用的算法与传统的音高偏移时间拉伸方法有很大不同。像时域音高同步重叠叠加(TD-PSOLA)这样的方法在计算和质量上比常规时间拉伸算法(通常由相位声码器完成)透明得多)。例如,这些用于语音合成中以更改合成句子的韵律-确实与Songify没什么不同!自动调整也基于此类时域方法(检测输入波形的完整周期并对其进行重采样)。
#2 楼
Dan Ellis在此页面上有一些很好的Matlab示例:http://www.ee.columbia.edu/~dpwe/resources/matlab/pvoc/#3 楼
这是MathWorks上伪代码的一个链接。这里是DSP Dimensions中算法的描述的链接。
FFT仓具有中心频率。相对于2个参考点,相距正好1个FFT帧偏移的那个正弦频率处的任何正弦波将具有相同的相位,或者具有可以为2个参考点或2个FFT帧计算任意相距任意距离(也许重叠)的增量相位。相位声码器的基本思想是将每个FFT bin频率稍微调整到附近的一个频率,以使该频率上的正弦波将与2个偏移FFT帧的参考点处的检测相位匹配,如果FFT bin中心频率不匹配。
然后可以将这些调整后的频率用于波形的粒度重新合成,即使在频率或时域中按比例缩放了原始频谱序列,该波形在重新合成的帧之间也显示出更多的连续性。这些偏移频率也可以用于频率估计,或者作为音高估计方法的一部分。借助音高估计和声音重新合成,人们可以在一个音高下获取声音,然后将重新合成推到听起来几乎相同的东西,除了另一个音高。
#4 楼
以下文章介绍了基于短时傅立叶变换(STFT)的相位声码器,以及用于解决音频信号的时间和音高修改的音高同步重叠相加(PSOLA)技术:Moulines, E.&Laroche,J.
“语音的音调标度和时间标度修改的非参数技术”,
Speech Communication,1995年。
(某些PDF版本可从以下链接获得: google Scholar)
评论
UdoZölzer等人的DAFX有一个简单的相位声码器,带有一些MATLAB代码。检查Melodify SDK,它执行相同的操作,并提供演示试用版。