甚至可能在C [我知道它有可能 - GOM player这样做吗?让我开始......你说什么?
您如何确定人声与其他声音的区别?
答案 0 :(得分:11)
mp3播放器中的滤镜通常依赖于立体声录音棚中的声源(表演者)位于中心的事实。所以他们只计算通道之间的差异。如果你给他们一个录音,表演者没有定位,他们就失败了 - 声音没有被提取出来。
可靠的方法是使用语音检测器。这是一个非常复杂的问题,涉及硬核数学和针对您的特定任务彻底调整算法。如果你这样走,你就开始阅读语音编码(声码)。
答案 1 :(得分:2)
讨论了这个确切的主题here。它起初是对音频编码技术的讨论,但在上面的链接页面上有人说
这意味着无法提取语音形式steoro信号?
但有人指出,提取语音应该不比消除语音困难。
我会让你进一步阅读,但我怀疑成功的提取可能依赖于语音的相对较窄的光谱分布。
答案 2 :(得分:2)
请注意,原则上不可能完美地分离在一个轨道中混合在一起的不同声音。就像你将奶油混合到你的咖啡中一样 - 混合后,不可能将奶油和咖啡完全分开。
可能会有智能信号处理技巧来获得可接受的结果,但一般来说,不可能将声音与音乐完全分开。
答案 3 :(得分:1)
将人声与其他声音分开并非易事。如果你有其他声音的录音,那么你可以参考取消背景声音,这将留下你的人声。
如果背景噪音是某种随机噪音,您将通过使用某种形式的光谱过滤获得胜利。但它并不简单,需要花一点时间才能获得好成绩。 Adobe Audition有一个自适应光谱滤波器我相信...
假设您的白噪声在整个录制频段内具有相当均匀的频率分布(在44Khz未压缩录音中,您正在谈论0到22Khz)。然后在上面添加一个声音。显然,语音使用与噪声相同的频率。人声范围从~300Hz到~3400Hz。显然,带通音频会将你降低到只有300到3400Hz的声音范围。怎么办?你有一个声音,你现在有了带隔音的白噪声。不知何故,你需要能够消除噪音并保持声音。有各种过滤方案,但都会损坏过程中的声音。
祝你好运,它真的不会简单!答案 4 :(得分:1)
其中buf具有pcm wav 44100采样率输入数据
int voiceremoval (char *buf, int bytes, int bps, int nch) { short int *samples = (short int *) buf; int numsamples = 0; int x = 0; numsamples = bytes / 2; x = numsamples; if (bps == 16) { short *a = samples; if (nch == 2) while (x--) { int l, r; l = a[1] - a[0]; r = a[0] - a[1];
if (l < -32768)
l = -32768;
if (l > 32767)
l = 32767; if (r 32767) r = 32767; a[0] = -l; a[1] = r; a += 2; } } return 0; }
答案 5 :(得分:1)