Здравствуйте, мне нужно создать программу, которая способна воспроизводить некоторые звуки фортепиано от Бетховена Элиз
Теперь я реализовал функцию частоты и звука, но она звучит странно и совсем не похоже на ноты фортепиано .
Может ли кто-нибудь дать мне совет, как это исправить?
createWaveform(440,8000,2,1);
function [sinusoid] = createWaveform(frequency,fs,duration,A)
n = linspace(0,duration-1/fs,duration*fs);
sinusoid = 1:duration*fs;
for i = 1:duration*fs
sinusoid(i) = A*cos(2*pi*frequency*n(i)*(1/fs)+(2*pi).*rand(1,1));
end
end
end
Вот часть, где я пытаюсь наложить тоны на нужную фортепианную ноту
%function [tone] = note(keynum,relDuration,fullDuration,fs)
%basetone = 440;
% frequency = basetone * nthroot(2,12)^(keynum-49);
%[tone]=createWaveform(frequency,fs,relDuration*fullDuration,1);
%end
Редактировать: я удалил весь свой старый код и написал следующее, что сделало работу
%sound(createWaveform(1000,8000,1,1));
sound(note(24,1/2,1,8000));
function [sinusoid] = createWaveform(frequency,fs,duration,A)
Fs = fs; % samples per second
dt = 1/Fs; % seconds per sample % seconds
t = (0:dt:duration)'; % seconds
%%Sine wave:
Fc = frequency; % hertz
sinusoid = A.*cos(2*pi*Fc*t+(2*pi).*rand(1,1));
% Plot the signal versus time:
end
function [tone] = note(keynum,relDuration,fullDuration,fs)
basetone = 440;
frequency = basetone * nthroot(2,12)^(keynum-49);
tone=createWaveform(frequency,fs,relDuration*fullDuration,0.5);
end
function [E] = envel(relDuration,fullDuration,fs)
param = 0;
for i = 0:fs:relDuration*fullDuration
E(i)=relDuration*fullDuration;
i=i+1;
end
end