Goodluck
@Goodluck

Как определить гудок начала записи автоответчика?

В рамках проектирования одного онлайн сервиса встал вопрос о том, как определить сигнал начала записи автоответчика. То есть обычно это выглядит так:

1. Идет звонок на определенный номер.
2. Через несколько секунд трубку поднимает автоответчик.
3. Он проигрывает записанное сообщение: "Вы позвонили в ABC. Оставьте свое сообщение после короткого сигнала." (Длина этого сообщения у каждого контакта разная.)
4. Играет гудок начала записи.

Необходимо определять этот гудок. Заранее спасибо.
  • Вопрос задан
  • 4356 просмотров
Пригласить эксперта
Ответы на вопрос 3
peleron
@peleron
Веду кружки по робототехнике
Вам поможет Цифровая Обработка Сигналов - она же DSP
Что вам нужно:
1. постоянно вести запись звука и выполнять операции выделения "гудка"
2. если гудок появляется, то DSP это покажет через резкое увеличение какого-то параметра - нп. амплитуды какой-то частоты.
Самое сложное - определить характеристику гудка - частоту(ы), минимальную длительность. Тип гудка не стандартизирован, но нужно проверять - возможно они чем-то похожи. Проанализировать сигнал можно в программе ru.wikipedia.org/wiki/Audacity
Из DSP процедур посмотрите в сторону FFT(БПФ) и алгоритма Герцеля (Goertzel algorithm)
Ответ написан
Комментировать
Собственно, алгоритм, который должен лечь в основу поиска Вам уже подсказал выше @peleron (из них мне более привычен FFT).

А "поверх" него я посоветовал бы реализовать следующую высокоуровневую логику :
1) после проключения соединения должно пройти не менее K миллисекунд речевого сигнала (он тоже хорошо виден на FFT) или тишины (бывает автоответчик без приветствия);
2) после этого должен в течение L миллисекунд быть слышен тон одной частоты (т.е. в спектральной области - постоянная картина с небольшими шумами);
3) после этого в течение N*L миллисекунд должна быть тишина - это защита от того, что на самом деле в фазе 2 был слышен не сигнал автоответчика, а длинный или короткий in-band (т.е. генерируемый DSP вызываемой стороны) отбой.

+ естественно, нужно смотреть за тем, чтобы вызов не был разорван вызываемой стороной - автоответчик так не сделает.

После успешных проверок этих трех фаз, можно с определенной вероятностью считать, что это был тон автоответчика.
Ответ написан
Комментировать
@aylarov
У нас на платформе это уже реализована в качестве стандартной функции. Посмотрите VoxImplant
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы