【发布时间】:2019-09-21 22:50:47
【问题描述】:
我想根据我拥有的 .WAV 格式的样本在 MATLAB 中生成我自己的 Kick、Clap、Snare 和 Hi-Hat 声音样本。
现在听起来完全不正确,我想知道我的代码是否没有意义?或者如果是我错过了一些合理的理论。
这是我现在的代码。
[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的原始图。
我对 y 的 FFT
我正在使用 findpeaks() 函数来查找幅度大于 0.001 的 FFT 的峰值。
[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))
所以单边的标准化 FFT 看起来像这样。
由于它看起来像 FFT,我想我应该能够通过对具有正确幅度和频率的正弦曲线求和来重新创建声音。由于拍手声有 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
我应该做些什么不同的事情?
【问题讨论】:
标签: matlab audio fft audio-processing