Остановить запись, как только громкость станет ниже порогового значения с помощью python-sounddevice

В настоящее время у меня есть код Python, который постоянно записывает 4-секундные фрагменты звука:

#!/usr/bin/env python3
import sounddevice as sd

fs = 16000

while True:
    print('Started listening')
    myrecording = sd.rec(int(4 * fs), dtype='int16', channels=1, blocking=True)

Однако вместо фиксированного 4-секундного фрагмента я хотел бы, чтобы sounddevice записывал до тех пор, пока громкость не упадет ниже порога звука (т.е. когда человек с микрофоном перестал говорить), а затем снова начал слушать.

По сути, я хочу имитировать поведение такой команды, как rec recording.wav silence 1 0.1 3% 1 3.0 3% sox, которая делает именно это.

Есть ли простой способ сделать это с помощью sounddevice?


person Migwell    schedule 29.11.2018    source источник
comment
Модуль sounddevice не может помочь вам с анализом сигнала, его работа заключается только в предоставлении сигнала. Но вы можете написать свою собственную рукописную функцию обратного вызова, которая выполняет анализ, и использовать ее в sounddevice.InputStream.   -  person Matthias    schedule 10.12.2018


Ответы (1)


Кажется, что библиотеки, которые это делают, называются VAD (обнаружение голоса). Для Python хорошим вариантом является py-webrtcvad.

person Migwell    schedule 01.02.2019