Задать вопрос

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

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

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

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

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


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


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

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

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

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
AST Москва
До 350 000 ₽
18 янв. 2025, в 10:04
50000 руб./за проект
18 янв. 2025, в 09:18
5500 руб./за проект
18 янв. 2025, в 07:20
50000 руб./за проект