我正在 matlab 中编写音高适应函数。它需要一个音频信号和一个音高系数向量,其中每个元素确定其各自帧的音高偏移量。
根据有多少音高系数,音频信号被均匀分割。如果只有 2 个音高系数,则音频将被分成 2 半,前半部分将根据第一个系数进行音调偏移,后半部分将根据第二个系数进行音调偏移。因此,如果我的系数为 [1,2],则音频信号的前半部分听起来与原始信号相同,而后半部分的音调将是原来的两倍。
这是我的功能的代码:
function [audioModified] = modifyPitch(audio, pitchCoefficients)
nwindows = length(pitchCoefficients);
windowSize = floor(length(audio)/nwindows);
audioModified = [];
for i=1:nwindows
start = (i-1)*windowSize + 1;
finish = i*windowSize;
originalWindow = audio(start:finish, 1);
pitchCoeff = 1/pitchCoefficients(i);
timeScaledWindow = pvoc(originalWindow, pitchCoeff);
[P,Q] = rat(pitchCoeff);
pitchModifiedWindow = resample(timeScaledWindow, P, Q);
audioModified = [audioModified; pitchModifiedWindow];
end
end
然而,最终的音频(即所有帧的串联)具有这些伪影,其中每一帧都以“tic”声音开始。我假设发生这种情况是因为我连接帧的方式。如果帧太小,这种效果会变得如此明显,以至于音频不再可听。
我应该如何减轻或消除这个问题?有没有办法像模糊图像以消除噪音一样平滑音频?
附加信息:我使用此相位声码器(pvoc) 进行时间缩放。