Как распознать код морзе с помощью микрофона? Python

Всем привет, мне понадобилось написать программу конвертирующую код морзе с микрофона в текст. К примеру мы воспроизводим звук из этого видео https://youtu.be/QJeCAvq4URU с другого устройства и на выходе получаем текст в консоль ...---...

Я искал решение этой задачи недели две, но ни смог найти ничего что могло бы мне помочь. Подскажите пожалуйста, как можно решить данную задачу и какие библиотеки использовать? (если они конечно есть)


Ответы (1 шт):

Автор решения: Qwertiy
  1. Превращаешь аудио в массив таймингов, когда есть звук. Наличие звука определяем по тому, превышает ли громкость некий порог (скорее всего есть 2 наиболее распространённых уровня, но можно начать со среднего между минимум и максимумом).

  2. По правилам тире в 3 раза больше точки, так что я бы взял минимальный по длительности сигнал, отфильтровал все сигналы, превышающие его менее чем в 2 раза и принял среднее за единицу.

  3. Превращаем имеющийся массив в массив (или генератор) чего-то такого (должен получиться непрерывный таймлайн; время округляем до ближайшего допустимого значения):

    interface Entry {
      сигналИлиТишина: сигнал | тишина;
      длительность: 1 | 3 | 7; // 7 - только для тишины
    }
    
  4. Выкидываем первую тишину если она есть. Убеждаемся, что последний элемент - (тишина,3). Если там сигнал, надо добавить ещё одну запись (чтобы не потерять последнюю букву), а если (тишина,7) то поменять 7 на 3 (чтобы не ставить в конце текста пробел).

  5. Очевидно, что сигнал и тишина чередуются.

     буква = ""
     текст = ""
    
     for тип,длительность in ...:
       if тип == сигнал:
         буква += "." if длительность == 1 else "-"
       else if длительность > 1:
         текст += кодВСимвол(буква)
         if длительность == 7: текст += " "
         буква = ""
    
     print(текст)
    

PS: А вообще, вполне может быть, что для этого есть библиотека...

→ Ссылка