首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab去除人声

Matlab去除人声
EN

Stack Overflow用户
提问于 2013-01-22 22:46:19
回答 1查看 5.2K关注 0票数 3

我写了一个用fft从歌曲中去除人声的程序。在C#之前,我决定在Matlab中测试降频算法,但无法得到示例中的结果。有声音。我尝试选择任何范围(0.7 - 1.5),但所有的same...noise。我不能做什么?请帮我把它写好)提前谢谢!

代码语言:javascript
复制
[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');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-22 23:45:44

从代码中我可以看到,如果左和右之间的强度“相等”,您可以简单地将频率内容归类为声乐内容(等于定义为0.7和1.5之间的比率)。我不熟悉你提出这个计划的原因,但它实际上可能会产生一个不错的结果。

可以说,你做错了什么,很可能与fft大小有关,也可能与你一次处理完整信号的事实有关。

例如,一首歌中的人声会随着时间的推移而变化,因此你的伪装也必须改变。这意味着你必须在时域中以帧的形式分解信号,并分别对每一帧进行fft和掩蔽。此外,您还应该考虑在时域框架中使用重叠。

问候

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14461210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档