Детектирование голоса в (телефонном) аудио файле и вырезание, какую библиотеку использовать в Python?

Есть задача , телефонного разговора вырезать голос в отдельные маленькие wav
По канала звонящий и принимающий я уже разбил, теперь вопрос как вырезать остальные отрезки голоса , есть ли библиотека на питоне работающая с этим ?

Спасибо
  • Вопрос задан
  • 3353 просмотра
Пригласить эксперта
Ответы на вопрос 1
alexeygrigorev
@alexeygrigorev
Переворачиватель пингвинов
Я это делал без библиотеки. Для этого можно использовать энергию сигнала в окошке, и если энергия превышает определенный порог, то значит в окошке есть голос. В телефонном аудиофайле часто присутствует шум, поэтому есть смысл сначала "выровнять" сигнал в окошке - т.е. отнять среднее от каждого элемента.

Примерно так:

window = signal[i:(i+win_len)]
energy = ((window - window.mean()) ** 2).sum()
voice = energy > threshold


Алгоритм - автомат с двумя состояниями "тишина" и "голос":
  • Заводим очередь с макс. вместимостью t
  • Начинаем с состояния "тишина"
  • Проверяем, есть ли голос в окошке
  • Если есть, то создаем новый файл, берем все данные из очереди, добавляем в файл, переходим в состояние "голос"
  • Нет - добавляем данные из окошка в очередь
  • В состоянии "голос" записываем текущее окошко в файл, пока не встретим t подряд идущих окошек с тишиной - в этом случае сохраняем файл и переходим в "тишину" опять


Можно переходить в режим "голос" только после того, как встретилось несколько подряд идущих окошек с голосом, чтобы не выдергивать из записи всякие щелчки и прочие артефакты.

В моем случае t = 10 и ширина окошка 512 давали самые лучшие результаты, но в вашем случае результат может отличаться. Уровень тишины, который я использовал, я точно не помню. Можно просто взять тишину и посмотреть, какая у нее энергия и сравнить с энергией голоса, и взять среднее значение между ними.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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