10

拍手をカウントする IOS アプリケーションを構築しようとしています。CoreAudio で WWDC のビデオを見てきましたが、トピックが広すぎてどこを見たらよいかわかりません。

ここで、stackoverflow で同様の問題を見つけました。ドアのバタンと閉まる音を検出するための C# の例を次に示し ます。オーディオ ストリームが与えられた場合、ドアがバタンと閉まるタイミングを見つけます (音圧レベルの計算?)

私はこれを行う必要があるようです:

  1. サンプルをセクションに分割します
  2. 各セクションのエネルギーを計算する
  3. 前のウィンドウと現在のウィンドウの間のエネルギーの比率を取る
  4. 比率があるしきい値を超えた場合は、突然の大きなノイズがあったと判断します。

Objective-C でこれを達成する方法がわかりません。SCListenerを使用してオーディオをサンプリングする方法を理解できました。これ が私の試みです。

- (void)levelTimerCallback:(NSTimer *)timer {
    [recorder updateMeters];

    const double ALPHA = 0.05;
    double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;


    if ([recorder peakPowerForChannel:0] == 0)
        totalClapsLabel.text = [NSString stringWithFormat:@"%d", total++];

    SCListener *listener = [SCListener sharedListener];
    if (![listener isListening])
        return;

    AudioQueueLevelMeterState *levels = [listener levels];
    Float32 peak = levels[0].mPeakPower;
    Float32 average = levels[0].mAveragePower;


    lowPassResultsLabel.text = [NSString stringWithFormat:@"%f", lowPassResults];
    peakInputLabel.text      = [NSString stringWithFormat:@"%f", peak];
    averageInputLabel.text   = [NSString stringWithFormat:@"%f", average];

}

ここに画像の説明を入力

提案されたアルゴリズムはわかりますが、Objective-C でそれを実装する方法については不明です。

4

2 に答える 2

4

どのような種類の検出忠実度を求めているかについて言及していませんか? 正直なところ、ある種の音の「圧力」の変化をチェックするだけで、ニーズに完全に適合する場合があります。

ただし、電話への衝突は、実際の拍手ではなくても、検出器をトリガーするように、非常に低い周波数でかなり強力なインパルスになる可能性があることに注意してください。クラップではない非常に高い周波数の音源についても同様です。

これはあなたのニーズに合っていますか?

そうでなく、より高い忠実度を望んでいる場合は、入力信号のスペクトル分析(FFT)を実行してから、はるかに狭い周波数帯域で鋭い信号スパイクを探すほうがよいと思います。既に持っている。

私はこのソースを詳しく調べていませんが、iPhone アプリにそのまま使用できる可能性のあるオープン ソースの FFT コードを次に示します。

編集: https://github.com/alexbw/iPhoneFFT

スペクトル結果をグラフ化することの良い点は、実際に関心のある周波数範囲を簡単に調整できることです。私が持っているいくつかのラップトップ ソフトウェアを使用した私自身のテストでは、私の拍手は 1kHz から 2kHz 付近で非常に強いスパイクを持っています。

あなたのニーズにはやり過ぎかもしれませんが、より高い忠実度が必要な場合は、最初に信号スパイクを引き起こした周波数範囲を知らずに信号スパイクを追跡するだけでは満足できないと思います.

乾杯

于 2012-10-19T16:49:11.883 に答える
0

アプリhttps://itunes.apple.com/us/app/clapmera/id519363613?mt=8に FFT を使用しました。周波数領域でのクラップは (完全ではない) 定数のように見えます。

よろしく

于 2013-04-26T00:48:37.767 に答える