Как распознать код морзе с помощью микрофона? Python
Всем привет, мне понадобилось написать программу конвертирующую код морзе с микрофона в текст. К примеру мы воспроизводим звук из этого видео https://youtu.be/QJeCAvq4URU с другого устройства и на выходе получаем текст в консоль ...---...
Я искал решение этой задачи недели две, но ни смог найти ничего что могло бы мне помочь. Подскажите пожалуйста, как можно решить данную задачу и какие библиотеки использовать? (если они конечно есть)
Ответы (1 шт):
Превращаешь аудио в массив таймингов, когда есть звук. Наличие звука определяем по тому, превышает ли громкость некий порог (скорее всего есть 2 наиболее распространённых уровня, но можно начать со среднего между минимум и максимумом).
По правилам тире в 3 раза больше точки, так что я бы взял минимальный по длительности сигнал, отфильтровал все сигналы, превышающие его менее чем в 2 раза и принял среднее за единицу.
Превращаем имеющийся массив в массив (или генератор) чего-то такого (должен получиться непрерывный таймлайн; время округляем до ближайшего допустимого значения):
interface Entry { сигналИлиТишина: сигнал | тишина; длительность: 1 | 3 | 7; // 7 - только для тишины }Выкидываем первую тишину если она есть. Убеждаемся, что последний элемент - (тишина,3). Если там сигнал, надо добавить ещё одну запись (чтобы не потерять последнюю букву), а если (тишина,7) то поменять 7 на 3 (чтобы не ставить в конце текста пробел).
Очевидно, что сигнал и тишина чередуются.
буква = "" текст = "" for тип,длительность in ...: if тип == сигнал: буква += "." if длительность == 1 else "-" else if длительность > 1: текст += кодВСимвол(буква) if длительность == 7: текст += " " буква = "" print(текст)
PS: А вообще, вполне может быть, что для этого есть библиотека...