ライブオーディオ入力で笛、ポップ、その他の音を検出するにはどうすればよいですか?


9

私はSOに関する多くの質問を読みました、そして率直に言って、それらのそれぞれはそれについて取り組む特定の方法を説明していません。「FFTを実行する」や「ゼロクロッシング」などと言う人もいます。しかし、デジタルオーディオ入力が特定の周波数の振幅の配列で構成されていることを理解しているだけです。それを超えて。

今私はナイキストの定理、周波数、振幅、フーリエ級数などを知っています、そしてそれは私がいくつかの学期の大学のプログラムでそれをした2-3年前からです。しかし、当時はフーリエの実際の使用法についてはあまり教えられていませんでした。私は、主題を理解するのに十分なことを学ぶだけで、その主題についてさらに掘り下げることはありませんでした。しかし、今、私はそれらすべてのものを使わなければならないつもりです。

これが私が検出しようとしている音のスナップショットです:

指スナップとライトスイッチのオン/オフのユニークなグラフ

明らかに、サウンドにはユニークなグラフがあります。グラフ内の独特のとがった線から特定の特有の特性を抽出する方法を理解したいだけです。どのような振幅、周波数など。そしてどのくらいの時間-それは些細なことですが私は推測します。

わかりやすい説明リストを使って簡単な手順を教えてください-理解できない用語をググググできます。

たぶんこれ?-

  1. 入力オーディオデータを取得する

  2. スペクトログラムをプロットする

  3. ノイズのない環境で検出したいサウンドのスペクトグラムグラフを取得する

  4. そのグラフを研究する-その音のユニークな特性を描く

  5. (4)で見つかったサウンドの特性を使用して、ライブオーディオフィードでこれらの特定の特性を検出できるある種の関数を作成します

  6. 一致が見つかった場合、まあ-仕事は完了です。

  7. アルゴリズムを磨いて、偽陰性を取り除きます。

BバツZ

保存したい音を静かな環境でジェスチャーとしてユーザーに録音してもらうことを考えていました。そして、ユーザーは静かな時間のパディングの間だけで音を出します。録音の最初と最後に3秒。

つまり、最初の3秒間、私のシステムは現在の入力が通常の静かなバックグラウンドサウンドであることを確認します。そして、グラフの突然の変化は音声入力の開始になります。そして、それが停止すると、録音はさらに3秒間続き、その後に静かな時間のパディングが続きます。これはユーザーが手動で行います。次に、パディング時間の間のどこかで、グラフの突然の変化が続いた部分のみの特性を自動的に保存します。

したがって、その部分の特性はそのサウンドのジェスチャーデータとして保存され、後でライブオーディオフィードでその特定のサウンドを検出するために使用されます。

問題は、これらすべてを平易な英語で考えていることです。コードで効率的に実装できるように、数学と物理学について考える必要があります。何を書いてコードのどこに書けばいいのかまったくわからないのですが、SOに関する非常に多くのライブラリと質問があっても、自由に使えます。

これが長かったらごめんなさい。


1
好奇心から、そのスペクトログラムは携帯電話またはタブレットで作成されたのですか?もしそうなら、あなたはアプリの名前を伝えることができます。かっこいいですね。あなたの質問に関しては、あなたのアプリケーションは、孤立した単語の認識を行うトピック/タスクに似ていると思います。あなたはおそらくそれをグーグルすることから多くのアイデアとインスピレーションを得ることができます。難しい部分は、限られた比較的小さなジェスチャーのセットでジェスチャーを認識することではなく、難しい部分はジェスチャーではないものをフィルターで取り除くことです。
niaren 2013年

これはアプリです:play.google.com/store/apps/… そしてあなたの視点に感謝します。しかし、口笛、ポップ、拍手など、単語ではなく音(現時点では少なくとも)を検出する方法を教えてほしい。私はPythonで作業しています。
bad_keypoints 2013年

1
残念ながら、この種のものはまだ研究分野です。この特定の問題を解決している人を私は知りません。
ビョルンロシュ

回答:


2

音声認識技術を使用することは良い出発点であるかもしれないというコメントの1つに同意しますが、これらの音は異なり、それらを分類するために調査を行った人を知りません(Nathanによって引用された論文は、音声を区別するためにのみ表示されますそしてノイズ)、それで誰かがそれと矛盾する何かを提示しない限り、あなたはあなた自身のテクニックを発明しなければならず、それは多くの学習と多くの仕事を必要とするでしょう。私ができる最善のことは、あなたを始めることです。

まず第一に、誰かが魔法の数式を生成できると期待しないでください。音から音が何であるかを理解する方程式はありません。人間とコンピュータは、音を理解するためにデータを組み込んで学習する必要があります。回答で「FFTを使用する」または「ゼロクロッシングを使用する」と言われるのは、これらが音声認識および関連アルゴリズムで使用される基本的なDSP構築ブロックの一部であるためです。ただし、FFTとゼロクロッシングレートは、通常、サウンドを記述する一連のパラメーターを作成するための最初のステップにすぎません。次に、これらのパラメーターが統計的に分析され(魔法の関数ではなく)、どのカテゴリーに属する可能性が最も高いかが決定されます。私が「最も可能性が高い」と言ったことに注意してください:最高の音声検出(そして人間の脳!

したがって、探すことができるいくつかのパラメーターは次のとおりです。

  • ゼロ交差率
  • 周波数重心
  • エンベロープ(これは実際には、たとえば攻撃時間を含むパラメータのセットです)
  • スペクトル包絡
  • 偶数/奇数の調和バランス
  • 声高
  • 基本ピッチ

サウンドを区別できると思われる一連のパラメーターを取得したら、統計的な方法を使用してそれらを分類する必要があります。隠れマルコフモデルは、スピーチでよく使用されます。ロジスティック回帰、K-meansを調べることもできます。他に選択肢があると確信していますが、HMMは試されており、本当です。


あなたの答えは良いですが、基本的には、ユーザー自身のサウンドを、後で私のソフトウェアを使用するためにユーザーが作成したサウンドに一致させることを求めています。似たようなもの。ユーザーが異なるタイプのサウンドA、B、Cを作成するとします。これらのサウンドの特性は、それぞれC_A、C_B、C_Cとして保存されます。
bad_keypoints 2013年

手法は同じです。1。測定するパラメーターを特定します。2。測定します。3。統計を使用して各サウンドの違いを確認します。4。そのデータを使用して分類します。
ビョルンロシュ

それが基本的に私が思ったことです。しかし、私はあなたが提供した優れた長いリストからどのパラメーターが不審なサウンドにマークアップする必要があるかを確認する必要があると思います。
bad_keypoints 2013年

1
正直なところ、さまざまな環境で指のスナップやライトスイッチなどを区別できることは非常に悲観的であり、サンプルデータが多くなく、おそらく指定したパラメータよりも多くのパラメータがありませんが、間違っているといいのですが。しばらく時間がかかっても結果を報告してください。
ビョルンロシュ

また、music-dspメーリングリスト(music.columbia.edu/cmc/music-dsp)の一部の人々は、他の提案をしているかもしれません。
ビョルンロシュ2013年


0

ビョルンの推奨事項は非常に良いと思いますが、いくつか追加情報を提供したいと思います。あなたの説明から、これは音色の識別問題によく似ています。この領域では、コンピューター音楽のコンテキストでいくつかの調査が行われています(さまざまな楽器を識別することは、実行できる有用なことであり、スナップとクラップの違いを区別することは、サウンドの音色によるものです)。ウィリアム・ブレントこの領域でいくつかの調査を行い(彼のページでtimbreIDを探して)、Pure Dataで使用するソフトウェアを作成しました。特定のイベントを探しているそれぞれの状況で、開始検出によるいくつかの自動セグメンテーションを行うことは良い考えです。あなたはすでにSTFTを取っているので、開始を決定することはそれほど多くの追加の作業を必要としません(Spectral Flux開始検出を調べてください)。システムの概要は次のようになります。

トレーニング

  • 適切な機能を決定します(例:ゼロクロッシングレート、スペクトル重心、MFCC)
  • 発症を検出する
  • 入力音声(ジェスチャーの記録)でこれらの機能を計算します
  • 特徴計算のデータベースを保持します。これが監視付きまたは監視なしのトレーニング状況であるかどうかを判断する必要があります。たとえば、ユーザーがスナップを「サウンド1」、クラップを「サウンド2」と事前に指定したり、システムがトレーニング後にこれらをクラスター化しようとしたりします。

分類

  • リアルタイムで開始を検出し、着信オーディオの特徴を計算します
  • 距離メトリック(ユークリッド距離または別のLp距離)を使用して最近傍またはK最近傍分類を実行し、データベースから「最も近い」音を決定します

パーカッシブな音色の識別に関するこの論文は、いくらか役立つかもしれません。入ってくる音と作者の分類方法で計算する潜在的な特徴の定義を概説します。これは、パーカッシブなサウンドではかなりうまく機能しますが、スピーチ(複数音節)などではうまく機能しない可能性があります。その場合は、HMMメソッドの方が適しています。同様に、開始検出の精度は、探している音の種類によって異なります。

スナップとライトスイッチについて特に懸念がある場合は、少し時間をかけて、2つのサウンドを正確に区別できる機能を特定してください。


着信オーディオデータの突然の変化を検出することで、開始を検出します。うまくいくはずです。保存するジェスチャーの開始と終了を検出します。
bad_keypoints 2013年

ええ、それはほとんど動作するはずです。私がSpectral Fluxを提案した唯一の理由は、とにかくあなたがSTFTを取るつもりだからです。かなり静かな環境を想定している場合は、基本的な振幅しきい値処理で十分機能するはずです。
greatscott 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.