主要内容

基于延迟的Pitch Shifter

这个例子展示了一个音频插件,用来实时改变声音的音调。

算法

下图说明了基音偏移算法。

该算法基于时延和增益随时间变化的两个信道之间的交叉衰落。这种方法利用了当信号延迟增加或减少时发生的基频移多普勒效应。

下面的图说明了向上音高移位场景下信道延迟和增益的变化:信道1的延迟以固定的速率从其最大值下降(在本例中为30毫秒)。由于通道2的增益最初等于零,它对输出没有贡献。当信道1的延迟趋近于0时,信道2的延迟从30 ms开始下降。在这个交叉衰落区域,两个通道的增益被调整以保持输出功率水平。信道1在延时为零时完全消失。然后重复这个过程,在两个通道之间来回切换。

对于下俯仰效应,延迟从零增加到最大值。

所期望的输出螺距可以通过改变信道延迟的变化率来控制。交叉衰落减少了在通道之间转换时发生的声音故障。然而,如果交叉衰落发生的时间过长,重叠区域中出现的重复可能会产生伪调制和梳状滤波效应。

Pitch Shifter音频插件

audiopluginexample。PitchShifter是一个音频插件对象,它实现了基于延迟的音调移动算法。插件参数是基音移(半色调)和交叉衰落因子(控制两个延迟分支之间的重叠)。您可以将对象合并到MATLAB仿真中,或使用它生成音频插件generateAudioPlugin

除了输出音频信号外,该对象还返回两个额外的输出,分别对应于两个通道的延迟和增益。

您可以打开一个测试台架audiopluginexample。PitchShifter通过使用音频测试台.测试平台提供了一个用户界面(UI)来帮助您在MATLAB中测试音频插件。您可以在测试台架执行时调优插件参数。你也可以打开一个dsp。TimeScope和一个简介在时域和频域分别查看和比较输入和输出信号。

你也可以使用audiopluginexample。PitchShifter在MATLAB中,就像使用其他MATLAB对象一样。您可以使用configureMIDI命令通过MIDI设备来调优对象。如果对象是流MATLAB模拟的一部分,其中命令窗口不是空闲的,那么这一点特别有用。

runPitchShift是一个简单的函数,可以用来执行pitch shift作为一个更大的MATLAB仿真的一部分。函数实例化audiopluginexample。PitchShifter插件,并使用setSampleRate方法将其采样率设置为输入参数Fs.插件的参数是通过将它们的值分别设置为输入参数pitch和overlap来调优的。注意,也可以使用codegen命令从这个函数生成一个mexo文件。在这种模式下,性能得到了提高,但不影响参数的调优能力。

MATLAB仿真

audioPitchShifterExampleApp实现了一个实时的音调转换应用程序。

执行audioPitchShifterExampleApp除了播放频移的输出音频外,该应用程序还绘制随时间变化的信道延迟和增益,以及输入和输出信号。

audioPitchShifterExampleApp打开用于与模拟交互的UI。用户界面允许您调整pitch shift算法的参数,结果立即反映在模拟中。图反映了调优这些参数时所做的更改。有关UI的更多信息,请调用帮助HelperCreateParamTuningUI

audioPitchShifterExampleApp包裹在HelperPitchShifterSim然后迭代地调用它。HelperPitchShifterSim实例化、初始化和遍历组成算法的对象。

MATLAB Coder可以用来生成C代码HelperPitchShifterSim.为了为您的平台生成一个mexo文件,请执行HelperPitchShifterCodeGeneration从具有写权限的文件夹中。

通过调用audioPitchShifterExampleApp“真正的”作为参数,生成的MEX-fileHelperPitchShifterSimMEX可以用来代替HelperPitchShifterSim为了模拟。在这个场景中,UI仍然在MATLAB环境中运行,但是主要的处理算法是由一个mex文件执行的。在这种模式下,性能得到了提高,但不影响参数的调优能力。

调用audioPitchShifterExampleApp“真正的”作为参数使用mex文件进行模拟。同样,模拟运行直到用户显式地从UI中停止它。

参考文献

[1]“使用多个处理器实现实时音频效果”,Bogdanowicz, K.;贝尔彻,R;AES - 1989年5月。

[2]“一个详细的时域峰校正基音移算法的分析”,Bristow-Johnson, R.;AES - 1993年10月。