Как определить частоту звука «на лету» с микрофона (Android)?
Всем доброго времени суток.
Есть устройство на базе платы Arduino, подключённое к телефону на Android в гнездо для гарнитуры.
Устройство опрашивает датчики, и при получении сигнала посылает в телефон писк определённой частоты длиной 50 мсек. Подскажите способ узнать текущую частоту (или уровень громкости для заданной частоты) средствами Android SDK, или (желательно) нативно на c++. Если есть варианты под Linux, стоит alsa.
Задача на самом деле формулируется так: надо получить спектр мощности входного сигнала (при помощи БПФ от оцифрованных сэмплов), дальше в нем выделить основную частоту с ее амплитудой, и не перепутать ее с ее гармониками с меньшими амплитудами (а они будут мешать). В целом примеров кода по запросу android get input frequency Вам попадется много, но, чтобы заставить их работать, надо хотя бы минимально владеть используемым мат. аппаратом.
Может стоит как то по-другому организовать общение адруинки с телефоном? Преобразование фурье - весьма процессороемкая операция +возможны всякие шумы и прочее.
Как альтернатива - если вам надо просто передать какое то состояние - кодируйте его либо длиной сигнала, либо даже бинарным вариантом посылайте: 0 - есть звук, 1 - нет звука, а потом декодируйте.