2012-06-23 2 views
10

Я пытаюсь создать приложение IOS, которое считает claps. Я смотрю видео WWDC на CoreAudio, и тема кажется такой огромной, что я не совсем уверен, где искать.Обнаружение хлопа в IOS

Я нашел похожие проблемы здесь, в stackoverflow. Вот один в C# для обнаружения хлопнула дверь: Given an audio stream, find when a door slams (sound pressure level calculation?)

Кажется, что мне нужно сделать, это:

  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]; 

} 

enter image description here

Хотя я вижу, предложенный алгоритм, я неясно, как реализовать это в Objective-C.

+0

Алгоритм чист, его может потребоваться только настройка. В чем проблема с его внедрением в Objective-C? Разве это не Цель-C - надмножество простого C? Если вы можете сделать это на простом C, вы сможете сделать это в Objective-C. –

+2

Попробуйте это [ Учебник: обнаружение, когда пользователь попадает в микрофон] (http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/) для некоторых возможных подходов –

+0

sinnyTOD , ваша ссылка на mobileOrchard.com показалась мне 404. –

ответ

4

Вы не упомянули, что искали? Честно говоря, просто проверка на какое-то звуковое изменение давления может быть вполне адекватной для ваших нужд.

Имейте в виду, однако, что удары по телефону могут оказаться очень низкой частотой и довольно мощным импульсом, так что он вызовет ваш детектор, даже если это не настоящий хлопок. То же самое для очень высокочастотных источников звука, которые также вряд ли будут хлопать.

Это нормально для ваших нужд?

Если нет, и вы надеетесь на что-то более высокое качество, я думаю, что вам лучше делать спектральный анализ (БПФ) входного сигнала, а затем смотреть в гораздо более узком диапазоне частот для резкого всплеска сигнала, аналогично к той части, которую вы уже имеете.

Я внимательно не смотрел на этот источник, но вот некоторые возможный код с открытым исходным кодом FFT можно с надеждой использовать как есть для вашего iPhone приложения:

Edit: https://github.com/alexbw/iPhoneFFT

Хорошая часть о Графическое отображение спектрального результата состоит в том, что он должен упростить настройку того диапазона частот, который вам действительно нужен. В моих собственных тестах с некоторым программным обеспечением для ноутбуков у меня есть, у моих клипов очень сильный всплеск вокруг 1 кГц - 2 кГц.

Возможно, излишняя потребность в вас, но если вам нужна что-то более высокая точность, то я подозреваю, что вас не устраивает просто отслеживание сигнала, не зная, какой диапазон частот привел к сигнальному шипу в первую очередь.

Приветствия

+0

Ссылка на oscopeapp больше не действительна. – Jetti

+0

привет JDischler. Я создаю одно приложение, которое работает над Clapping. но я немного путаю, как использовать его. так что вы можете предоставить мне полный пример clapping или предоставить ссылку на какой-либо пример, чтобы я мог реализовать. thnx - –

+0

Как я могу определить, кто-то свистнет на iPhone-микрофон ... – iDeveloper