我正在编写一个使用MATLAB基本程序(例如440Hz处的la4或A4)的MATLAB程序,并且在向用户询问了他/她想要的频率之后,该程序将产生移调的声音。例如,如果用户希望原始文件中的880Hz频率为440Hz,则它将使每个频率加倍(包括谐波)。
我尝试使用MIRPitch
,此处未实现,但安装了所有工具箱后,该功能仍然无法正常工作。
我如何理解基础知识?我该如何以其他方式换位?
[y,Fs]=audioread("Test.wav");
[x,Fs]=audioread("LookingForHappiness.mp3");
D=0.8;
%D=(1/Fs)*length(x);
% Digital format ----------------------------------------------------------
Fs=44100; % Sampling rate (Hz)
Ts=1/Fs; % Sampling Period (s)
% Start DFT -------------------------------------------------------------
W=D; % Set the window analysis to pattern duration
N=W/Ts; % Samples in a window frame
F0=1/W; % Fourier fundamental frequency
K=Fs*W; % Total computable frequencies
for k=0:K-1 % k is the frequency index (f=K*F0)
for(n=0:N-1)
s(n+1)=sin(2*pi*k*F0*n*Ts); % n is the time index (t=n*Ts)
c(n+1)=cos(2*pi*k*F0*n*Ts); % n is the time index (t=n*Ts)
end
Xi(k+1)=0;
Xr(k+1)=0;
for (n=0:N-1)
Xi(k+1)=Xi(k+1)+x(n+1)*s(n+1);
Xr(k+1)=Xr(k+1)+x(n+1)*c(n+1);
end
Xi(k+1)=Xi(k+1)/N; % Scale by 1/N each frequency bin
Xr(k+1)=Xr(k+1)/N; % Scale by 1/N each frequency bin
end
Xi(1)=Xi(1)/2; % Frequency 0 amplitude is scaled by 1/N
Xr(1)=Xr(1)/2; % Frequency 0 amplitude is scaled by 1/N
% Show results ------------------------------------------------------------
Xa=2*sqrt(Xi.^2+Xr.^2); % Computes amplitude spectrum
Fscale=0:F0:(Fs/2);
subplot(2,1,1);
plot(Fscale,Xa(1:K/2+1)); % Plot the amplitude spectrum
xlabel ('frequency (Hz) ')
subplot(2,1,2);
plot(x(1:2)); % Plot the signal %era 1:100
xlabel ('time (s) ')
sound("L4A.mp3");