Я хочу сгенерировать свои собственные сэмплы звуков Kick, Clap, Snare и Hi-Hat в MATLAB на основе сэмпла, который у меня есть в формате .WAV.
Сейчас это звучит не совсем правильно, и мне было интересно, если мой код не имеет смысла? Или, если это так, что мне не хватает какой-то теории звука.
Вот мой код прямо сейчас.
[y,fs]=audioread('cp01.wav');
Length_audio=length(y);
df=fs/Length_audio;
frequency_audio=-fs/2:df:fs/2-df;
frequency_audio = frequency_audio/(fs/2); //Normalize the frequency
figure
FFT_audio_in=fftshift(fft(y))/length(fft(y));
plot(frequency_audio,abs(FFT_audio_in));
Оригинальный сюжет г.
Мой БПФ от y
Я использую функцию findpeaks (), чтобы найти пики БПФ с амплитудой, превышающей 0,001.
[pk, loc] = findpeaks(abs(FFT_audio_in), 'MinPeakHeight', 0.001);
Затем я нахожу соответствующие нормализованные частоты по частоте аудио (положительные) и соответствующий пик.
loc = frequency_audio(loc);
loc = loc(length(loc)/2+1:length(loc))
pk = pk(length(pk)/2+1:length(pk))
Итак, односторонний нормализованный БПФ выглядит следующим образом.
Поскольку это выглядит как БПФ, я думаю, что смогу воссоздать звук, суммируя синусоиды с правильной амплитудой и частотой. Так как звук хлопка имел 21166 точек данных, я использую это для цикла for.
for i=1:21116
clap(i) = 0;
for j = 1:length(loc);
clap(i) = bass(i) + pk(j)*sin(loc(j)*i);
end
end
Но это приводит к следующему звуку, который далеко не похож на оригинальный звук.
Что мне делать по-другому?