-1

コンピューターから個々のオーディオ サンプルを認識し、それらを再ルーティングして、ライブラリから WAV ファイルをトリガーできるプログラムを探しています。私のプロジェクトでは、遅延が望ましい結果にならないため、リアルタイムである必要があります。単語を認識してファイルを開くトリガーとなるディクテーション ソフトウェアを使用してみましたが、それは私が行きたい方向ですが、単語の代わりに音声にしたいと思っており、それはリアルタイムで行われます。どこに行けばいいのかわからず、ガイダンスを探しているだけです。私が何をすべきかについて何か提案はありますか?

4

1 に答える 1

0

それはかなり大雑把な質問ですが、私ならどうすればよいか教えていただけますか。(唯一の方法というわけではありませんが、どこから始めますか。)

リアルタイムの入力を探している場合は、Java サウンド ライブラリ (優れたチュートリアルはこちら) がそれを可能にします。(ただし、Web ページからのマイク入力は、セキュリティ上の大きな懸念から、どのような場合でも難しいことに注意してください。そのため、これはデスクトップ アプリケーションになります。)

リアルタイムである必要がある場合、私が最初に提案することは、ストリームとマルチスレッドを徹底的に行うことです。Java 8 Stream API をお勧めしますが、特定のパターンに一致するサブサンプルを探しているため、各データ ポイントは隣接するデータ ポイントの状態を認識している必要があり、ストリームでは簡単ではありません。

おそらく、サウンドがオーディオ プロファイルに大まかに似ているかどうかを知りたいと思うでしょう。そのため、一致させるためにどれだけ近づけたいかについて許容範囲を選択します (いずれにせよ、サンプルが 100% 一致しない可能性があることを思い出してください。 「exact」はオプションではありません)、隠れマルコフ モデルを検索します。これらは音声認識ソフトウェアが通常使用するものであるため、これらをお勧めします。あなたの音は声ではないかもしれませんが、すでに何が行われたかを知ることができます.

また、オーディオ サンプルの限られたリストをメモリ内に維持することもできます。具体的には、オーディオ信号は時変信号であり、1 つのポイントだけから一致を取得することはできないため、最新のデータが必要になる可能性があります。オーディオは大量のメモリを占有するため、認識しようとしている最長のサンプルよりも長くはしません。

最後に (オーディオの場合)、比較のために標準形式を選択することをお勧めします。まともな結果が得られるのと同じくらい良いものにして、高いところから始めましょう。比較する前に、すべてをその形式に変換する必要があります。

特定の音を認識したら、それは基本的にコマンド パターンです。を使用しても、特定のサウンドjava.util.HashMapを特定のファイルにマップすることができます。

最後に、 Java Speech APIを見る価値があります。これは JDK の一部ではなく、かなり古いものですが、その実装から良いアドバイスが得られるかもしれません。

もちろん、これは Java を好むプログラマーのアドバイスですが、Python や Ruby にも適切なライブラリがいくつかあるのではないかと思います。もちろん、Cのどこかに何かがあります。これは多くのように聞こえるかもしれませんが、ほとんどの資料は既に実装されており、すぐに使用できます。

これが役に立てば幸いです。他の回答を楽しみにしましょう。

于 2015-05-17T18:41:29.723 に答える