我有一个.mp3文件。如何将人声与C中的其他声音分开?

时间:2009-10-15 08:34:21

标签: c audio extract voice

甚至可能在C [我知道它有可能 - GOM player这样做吗?让我开始......你说什么?

您如何确定人声与其他声音的区别?

6 个答案:

答案 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)