我可以使用重采样来对整个信号进行音调移位,并且我在 这里尝试了相位声码器代码。
我也尝试过repmat 和插值,我研究了fft 和 interp1
如何随着时间的推移逐渐/逐渐改变信号的音高? 我已经包含了原始信号的示例以及我试图让处理后的信号听起来像什么(我使用 Audacity 并使用它们的效果创建了处理过的信号Sliding time scale / pitch shift
)但想在 Octave 4.0 中创建这个信号。如果您收听已处理的信号,您可以听到文件的音高逐渐增加,但文件的长度(秒)与原始信号文件相同。
我正在使用类似于 Matlab 的 Octave 4.0
这是可以改变整个信号的音高并在几秒钟内保持原始信号长度相同的代码,但我不确定如何让它随着时间的推移逐渐改变信号的音高。感谢 rayryeng 让我走到这一步。
clear, clc
[ya, fs, nbitsraw] = wavread('/tmp/original_signal.wav');
num_per_sec=2.4; %// Define total number of times we see the signal
%// Get total number of integer times we see the signal
num_whole = floor(num_per_sec);
%// Replicate signal
yb=repmat(ya,num_whole,1);
%// Determine how many samples the partial signal consists of
portion = floor((num_per_sec - num_whole)*length(ya));
%// Sample from the original signal and stack this on top of replicated signal
yb = [yb; ya(1:portion)];
%interpolation
xxo=linspace(0,1,length(yb))';
xxi=linspace(0,1,length(ya))';
yi_t=interp1(xxo,yb,xxi,'linear');
wavwrite([yi_t'] ,fs,16,strcat('/tmp/processed_signal.wav')); % export file