我尝试在 Android 上创建说话人识别系统。目前我正在使用 libxtract 从帧和 libsvm 计算 MFCC 向量进行分类。
您是否知道如何使用我可以在 NDK 下编译的 libxtract 或其他小型 C、C++ 库来检测帧中的语音(VAD 语音事件检测)?
最佳答案
稳健 VAD是一个不平凡的问题,并且有many approaches .
您采用的方法取决于以下因素:
- 您的应用程序上下文的细节以及您的应用程序将如何使用
- 您可以对要处理的音频做出什么样的假设(您可以预期哪些类型的背景噪音或非语音音频)
- 您的系统是否需要实时运行
一种简单的方法可能涉及为每个音频帧采用“特征包”(例如 f0、噪音、前 10 个部分的幅度)后降噪,并训练机器学习算法(SVM 就足够了)多种语音和非语音示例。
但是,最好不要将 VAD 视为一个简单的帧级音频分类问题,而是考虑音频随时间变化的方面。这将使您更好地估计语音段的开始和结束位置。为此,您可以使用 envelope follower或 spectral flux .您可以在这些包络值上设置高阈值和低阈值,并使用它们(例如)来控制音频流上的门限。
关于voice - 使用 libxtract 或其他小型 C、C++ 库实现 VAD 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18737332/