我写了一个用fft从歌曲中去除人声的程序。在C#之前,我决定在Matlab中测试降频算法,但无法得到示例中的结果。有声音。我尝试选择任何范围(0.7 - 1.5),但所有的same...noise。我不能做什么?请帮我把它写好)提前谢谢!
[y, fs] = wavread('Song.wav');
left = y(:,1);
right = y(:,2);
fftL = fft(left);
fftR = fft(right);
for i = 1:683550 %in my example 683550
dif = fftL(i,1) / fftR(i,1);
dif = abs(dif);
if (dif > 0.7 & dif < 1.5)
fftL(i,1) = 0;
fftR(i,1) = 0;
end;
end;
leftOut = ifft(fftL);
rightOut = ifft(fftR);
yOut(:,1) = leftOut;
yOut(:,2) = rightOut;
wavwrite(yOut, fs, 'tmp.wav');发布于 2013-01-22 23:45:44
从代码中我可以看到,如果左和右之间的强度“相等”,您可以简单地将频率内容归类为声乐内容(等于定义为0.7和1.5之间的比率)。我不熟悉你提出这个计划的原因,但它实际上可能会产生一个不错的结果。
可以说,你做错了什么,很可能与fft大小有关,也可能与你一次处理完整信号的事实有关。
例如,一首歌中的人声会随着时间的推移而变化,因此你的伪装也必须改变。这意味着你必须在时域中以帧的形式分解信号,并分别对每一帧进行fft和掩蔽。此外,您还应该考虑在时域框架中使用重叠。
问候
https://stackoverflow.com/questions/14461210
复制相似问题