-1

我正在寻找一个能够从我的计算机中识别单个音频样本并重新路由它们以触发库中的 WAV 文件的程序。在我的项目中,它需要是实时的,因为延迟不是预期的结果。我尝试使用可以识别单词以触发打开文件的听写软件,这就是我想要去的方向,但我希望它不是单词而是声音并且它会实时发生。我不知道去哪里,只是在寻找一些指导。有人对我应该做什么有任何建议吗?

4

1 回答 1

0

这是一个相当广泛的问题,但我可以告诉你我会怎么做。(几乎不是唯一的方法,但我会从哪里开始。)

如果您正在寻找实时输入,Java Sound 库(这里的优秀教程)允许这样做。(请注意,由于主要的安全问题,来自网页的麦克风输入在任何事情上都很困难,所以这将是一个桌面应用程序。)

如果它需要实时,我建议的第一件事是流和多线程。我建议使用 Java 8 Stream API,但由于您正在寻找与特定模式匹配的子样本,因此每个数据点都必须了解其邻居的状态,而这对于流来说并不容易。

您可能想知道声音是否大致类似于音频配置文件,因此,我会选择您希望它与匹配的接近程度的容差(请记住,无论如何样本可能不会 100% 对齐,所以“精确”不是一个选项),然后查找Hidden Markov Models。我建议这些,因为它们是语音识别软件通常使用的,虽然你的声音可能不是声音,但它会让你了解已经完成的工作。

您还需要在内存中维护有限的音频样本列表。具体来说,您可能需要最新数据,因为音频信号是时变信号,您无法仅从某一点获得匹配。我不会让它比您要识别的最长样本长得多,因为音频会占用大量内存。

最后(对于音频),我建议选择标准格式进行比较。让它尽可能好,让你得到体面的结果,然后从高处开始。在比较之前,您需要将所有内容转换为该格式。

一旦你识别出一个特定的声音,它基本上就是一个命令模式。即使使用 , 也可以将特定声音映射java.util.HashMap到特定文件,这些文件(如果足够少的话)您甚至可能已经预加载。

最后,值得一看的是Java Speech API。它不是 JDK 的一部分,而且已经过时了,但您可能会从它的实现中得到一些好的建议。

这当然是偏爱 Java 的程序员的建议,但我想 Python 和 Ruby 中可能也有一些不错的库可以帮助您;当然,C 中的某个地方也有一些东西。这听起来可能很多,但大部分材料已经实施并准备就绪。

希望这会有所帮助,让我们期待其他答案。

于 2015-05-17T18:41:29.723 回答