拍手をカウントする IOS アプリケーションを構築しようとしています。CoreAudio で WWDC のビデオを見てきましたが、トピックが広すぎてどこを見たらよいかわかりません。
ここで、stackoverflow で同様の問題を見つけました。ドアのバタンと閉まる音を検出するための C# の例を次に示し ます。オーディオ ストリームが与えられた場合、ドアがバタンと閉まるタイミングを見つけます (音圧レベルの計算?)
私はこれを行う必要があるようです:
- サンプルをセクションに分割します
- 各セクションのエネルギーを計算する
- 前のウィンドウと現在のウィンドウの間のエネルギーの比率を取る
- 比率があるしきい値を超えた場合は、突然の大きなノイズがあったと判断します。
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 でそれを実装する方法については不明です。