Часть III. Реализация

Подытожим то, что мы знаем. Мы знаем, что такое аудио (Часть I) и как извлечь из него полезную информацию (Часть II). В этой части давайте узнаем, как объединить все эти знания.

Ваша реализация будет отличаться, ваш вариант использования будет диктовать, как именно вам нужно все это реализовать. Но есть некоторые общие вещи, которые мы можем выяснить вместе. Первый…

Захват аудио и получение байтовых данных

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

Анализ

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

Не изобретайте велосипед здесь (или изобретайте, если вам это нравится). Что вам нужно, так это алгоритм, который рассчитает для вас ДПФ (дискретное преобразование Фурье) максимально эффективно. Это будет БПФ (быстрое преобразование Фурье). Короче говоря, БПФ — это реализация ДПФ, которая вычисляет преобразование Фурье сигнала за время O(nlogn). Скажем, для Python вам нужно будет использовать numpy.

Запуск преобразования Фурье для всего аудиофайла не подойдет. Почему? Потому что знать доминирующую частоту ВСЕГО аудиофайла недостаточно. Вот общая идея. Разделите аудиофайл на куски и запустите преобразование Фурье для каждого из них. Результатом будет, как вы уже догадались, доминирующая частота каждого небольшого фрагмента вашего аудиофайла. Следовательно, чем меньше ваши фрагменты, тем точнее будет ваш результат FT.

Разделите ваши байтовые данные и подайте их в FFT. Следующий…

Получение баллов и сравнение

Это та часть, где вам нужно понять свой вариант использования. Может быть, вам не нужно знать доминирующую частоту каждого фрагмента? Может быть, вы делаете? Но общая идея заключается в том, что вы должны взять несколько точек (фрагментов, частоты которых вы будете использовать). Точки будут вашим отпечатком пальца. Храните их в безопасном месте, они будут вашим базовым уровнем. Используйте их позже, чтобы сравнить! То, как вы будете сохранять частоты, также будет зависеть от вашего варианта использования (вам нужна основная частота? Или доминирующая частота в некоторых частотных диапазонах?).

Похоже, мы закончили. Думайте обо всем этом как о дополнительном инструменте, который вы можете добавить в свою среду автоматизации и использовать в качестве вспомогательных методов в своих тестах. На изображении ниже вы можете увидеть, как я это сделал.

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