На многое из того, что у меня есть до сих пор, сильно повлиял этот пример проекта от Apple: https://developer.apple.com/documentati ... pectrogram
Вот какие шаги я предпринимаю в настоящее время:
- Начать прием (Int16) сэмплов с микрофона с помощью AVFoundation.
- Сохранять сэмплы до тех пор, пока у меня не будет хотя бы 1024 семпла, а затем отправить первые 1024 семпла в мой алгоритм обработки. >
- Преобразуйте выборки в денормализованное число с плавающей запятой (с плавающей запятой одинарной точности).
- Примените к выборкам окно Хэннинга, чтобы предотвратить наложение псевдонимов, поскольку количество выборок довольно мало. , из соображений производительности.
- Запустите прямое преобразование DCT-II выборок временной области в выборки частотной области.
- Абсолютное значение для всех образцы.
- "Группируйте" образцы так, чтобы они соответствовали количеству столбцов, которые мне нужно анимировать... для каждых 1024/n образцов найдите максимальное значение в каждом диапазоне.
- Нормализация каждого интервала в диапазоне 0...1 путем деления каждого на образец с наивысшей магнитудой, который был обнаружен в глобальном масштабе.
В любом случае, конечным результатом является то, что самый низкий бин (0...255) имеет мощность, которая по сути представляет собой просто общую амплитуду, в то время как три верхних бина никогда не поднимаются выше 0,001. Я чувствую, что нахожусь на правильном пути, но мое незнание того, что означает вывод DCT, не позволяет мне понять, что здесь происходит не так. Я мог бы также использовать БПФ, если бы это дало лучший результат, но я понимаю, что БПФ и ДКП дают аналогичные результаты, и Apple рекомендует ДКП для повышения производительности.
Подробнее здесь: https://stackoverflow.com/questions/784 ... hone-input
Мобильная версия