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