Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我有一个.mp3文件。在C语言中,如何将人声与其他声音区分开来?_C_Audio_Extract_Voice - Fatal编程技术网

我有一个.mp3文件。在C语言中,如何将人声与其他声音区分开来?

我有一个.mp3文件。在C语言中,如何将人声与其他声音区分开来?,c,audio,extract,voice,C,Audio,Extract,Voice,这在C语言中是可能的吗[我知道这在一般情况下是可能的-是吗]?让我开始吧。。。你怎么说 如何准确地识别人类声音,使其区别于其他声音?mp3播放器中的过滤器通常依赖于立体声录音室中的声源(表演者)位于中心这一事实。所以他们只是计算通道之间的差异。如果你给他们录音时表演者的位置不是那样,他们就失败了——声音就不会被提取出来 可靠的方法是使用语音检测器。这是一个非常复杂的问题,涉及核心数学和针对特定任务彻底调整算法。如果你这样做的话,你可以从阅读语音编码(声码器)开始。这个话题已经被讨论过了。它最初是

这在C语言中是可能的吗[我知道这在一般情况下是可能的-是吗]?让我开始吧。。。你怎么说


如何准确地识别人类声音,使其区别于其他声音?

mp3播放器中的过滤器通常依赖于立体声录音室中的声源(表演者)位于中心这一事实。所以他们只是计算通道之间的差异。如果你给他们录音时表演者的位置不是那样,他们就失败了——声音就不会被提取出来


可靠的方法是使用语音检测器。这是一个非常复杂的问题,涉及核心数学和针对特定任务彻底调整算法。如果你这样做的话,你可以从阅读语音编码(声码器)开始。

这个话题已经被讨论过了。它最初是关于音频编码技术的讨论,但在上面的链接页面上有人说

这意味着无法从steoro信号中提取语音? 但有人指出,提取声音应该不会比消除声音更困难


我将让您进一步阅读,但我怀疑成功的提取可能依赖于与乐器相比声音的相对狭窄的频谱分布。

请注意,原则上不可能完全分离在一个音轨中混合在一起的不同声音。这就像你在咖啡中加入奶油一样——在加入奶油后,就不可能再将奶油和咖啡完全分开


可能会有一些智能的信号处理技巧来获得可接受的结果,但一般来说,不可能完美地将声音与音乐区分开来。

将人声与其他声音区分开来绝非易事。如果您有其他声音的录音,那么您可以参考取消背景声音,这将给您留下人声

如果背景噪声是某种类型的随机噪声,则使用某种形式的频谱滤波将获得胜利。但这并不简单,需要相当多的努力才能取得好的效果。Adobe Audition有一个自适应光谱滤波器我相信

假设您的白噪声在整个录制频带上具有相当均匀的频率分布(在44Khz未压缩录制上,您所说的是0到22Khz)。然后在上面添加一个声音。显然,声音使用的频率与噪音相同。人类的声音范围从~300Hz到~3400Hz。显然,音频带通会将您的语音范围降低到300至3400Hz。现在怎么办?你有声音,你有带通的白噪音。不知何故,你需要能够消除噪音,让声音保持圆润。有各种各样的过滤方案,但都会在过滤过程中损坏语音


祝你好运,这真的不简单

其中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]; l=32767; 如果(r 32767) r=32767; a[0]=-l; a[1]=r; a+=2; } } 返回0; }
查找(ICA)

人工智能是复杂的……如果在任何语言中都可能,在C语言中也是可能的。这是基本的计算机科学。你可以从过滤掉人类听不到的频率开始voice@fortran:这些频率在音乐中也听不到。因此,MP3压缩算法已经删除了它们,当您的输入是MP3格式时,您可以安全地忽略它们。@MSalters-这仍然是一个非常有效的想法。我们可以过滤掉人声无法发出的音调。事实上,在带通过滤白噪声后,根据定义,它不再是白色(“白色”指所有频率的相等贡献,在可见光的情况下,它产生白光)
                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; }