我已经阅读了很多关于 SO 的问题,坦率地说,每个问题都没有描述任何特定的解决方法。有人说“做FFT”,有人说“过零”等。但我只了解数字音频输入由特定频率的振幅数组组成,而且……不太了解超越它。
现在我确实知道奈奎斯特定理、频率、幅度、傅里叶级数等,那是 2-3 年前我在某个学期的大学课程中做到的。但当时我们真的没有被教过太多傅里叶在现实世界中的用法,而且我也没有费心去挖掘更多关于这个主题的知识,只是学习到足以通过这个主题。但现在我将不得不使用所有这些东西。
这是我试图检测的声音的快照:
显然,声音具有独特的图表。我只是想了解如何为图表中独特的尖线提取它们的独特特征。比如幅度、频率等。以及持续多长时间——尽管我猜这很微不足道。
我想要一个简单的分步说明列表——我可以用谷歌搜索我不明白的术语。
可能像这样?--
获取输入音频数据
绘制频谱图
获取您想要在无噪音环境中检测的声音的频谱图
研究该图 - 绘制该声音的独特特征
使用 (4) 中找到的声音特征,制作某种可以检测实时音频馈送中的特定特征的函数
如果找到匹配项,那么 - 工作就完成了。
完善算法以清除假阴性。
我感到困惑的地方是 - 我怎么去 3,4,5。特别是 3 和 4。因为我正在制作一个软件,用户可以在其中录制任何声音作为手势输入以供以后使用,我希望我的系统能够录制任何声音并将其与现场音频相匹配feed 以检测该声音手势。比如咳嗽、弹指、吹口哨或鼓掌。或者说辅音 -或或或。几乎任何声音。
我正在考虑让用户在安静的环境中记录他们想要存储的声音作为手势。并且用户只会在安静的时间填充之间发出声音;录制开始和结束时 3 秒。
比如说,在前 3 秒内,我的系统会确定当前输入是正常的安静背景声音。然后图表中的突然变化将是声音输入开始。当它停止时,录音会再持续 3 秒,这是尾随的安静时间填充。这将由用户手动完成。然后它会自动存储图表中突然变化持续的那部分的特征——介于填充时间之间的某个地方。
因此,该部分的特征将被保存为该声音的手势数据,稍后将用于在实时音频馈送中检测该特定声音。
问题是,我用简单的英语思考这一切。我需要考虑数学和物理,以便能够在我的代码中有效地实现它。我对在我的代码中写什么以及在哪里写它一无所知——即使有这么多关于 SO 的库和问题可供我使用。
对不起,如果这很长。