我正在寻找能够从我的计算机识别单个音频样本并重新路由它们以从库中触发WAV文件的程序。在我的项目中,它需要是实时的,因为延迟不是理想的结果。我尝试使用能够识别单词的听写软件来触发打开文件,而这就是我想去的方向,但是我希望它不是单词,而是实时发生。我不知道该去哪里,我只是在寻找一些指导。有没有人对我该做什么有任何建议?
答案 0 :(得分:0)
这是一个相当广泛的问题,但我可以告诉你我将如何做到这一点。 (几乎是唯一的方法,但我会从哪里开始。)
如果您正在寻找实时输入,Java Sound库(优秀教程here)允许这样做。 (请注意,由于主要的安全问题,网页上的麦克风输入很困难,所以这将是一个桌面应用程序。)
如果它需要是实时的话,我建议的第一件事就是流式传输和多线程。我建议使用Java 8 Stream API,但由于您正在寻找与特定模式匹配的子样本,因此每个数据点都必须知道其邻居的状态,这对于流来说并不容易。
你可能想知道声音是否大致类似于音频配置文件,所以为此,我会选择一个容差,以确定匹配的距离(记住样本可能不会100%排队) ,所以“确切”不是一个选项),然后查找Hidden Markov Models。我建议这些是因为它们是语音识别软件通常使用的,虽然你的声音可能不是声音,但它会让你知道已经完成的工作。
您还需要在内存中维护有限的音频样本列表。具体来说,您可能需要最新的数据,因为音频信号是时变信号,您无法从一个点获得匹配。我不会比你想要识别的最长的样本长得多,因为音频会占用大量的内存。
最后(对于音频),我建议选择一种标准格式进行比较。尽可能让你得到体面的结果,并从高处开始。在比较之前,您需要将所有内容转换为该格式。
一旦识别出特定声音,它基本上就是一个命令模式。即使使用java.util.HashMap
,也可以将特定声音映射到特定文件,这些文件(如果有足够的数据)甚至可能已预先加载。
最后,值得看一下Java Speech API。它不是JDK的一部分而且已经过时了,但你可能会从它的实现中得到一些好的建议。
这当然是Java喜欢的程序员的建议,但我想在Python和Ruby中可能有一些不错的库来帮助你;当然在C某处有一些东西。这可能听起来很多,但大部分材料已经实施并准备就绪。
希望这会有所帮助,让我们期待其他答案。